http Status 415 - Cannot consume content type
我试过的两个python REST客户端库,在谷歌代码上的github和python-rest-clIEnt上的restclIEnt,在发出GET请求时都会发送一个Content-Type头.
我对查看http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html的理解是客户端应该只在POST和PUT请求上发送Content-Type标头.那是对的吗?
这两个库都发送了标头的事实使我认为服务器通常会忽略它,而不是返回客户端错误代码.
解决方法 虽然没有在规范中明确概述,但可以做出一些推论. Section 7.2.1州Any http/1.1 message containing an
entity-body SHOulD include a
Content-Type header fIEld defining the
media type of that body.
这很明显,而且很有意义.鉴于此,我们可以查看@L_403_2@(方法定义),看看哪些提到他们可能在请求体中有一个实体.其中三个提到它:
OPTIONS
If the OPTIONS request includes an
entity-body (as indicated by the
presence of Content-Length or
transfer-encoding)…
POST
…used to request that the origin
server accept the entity enclosed in
the request…
放
…requests that the enclosed entity
be stored under the supplIEd
Request-URI
并且一种方法特别禁止实体,TRACE:
A TRACE request MUST NOT include an
entity.
实际上,您可以使用正文中的实体和Content-Type标头发送任何方法(TRACE除外).但是,根据规范,我不希望服务器对它做任何事情,除非它是上面三种方法之一.
我还要说,您正在使用的响应http状态415的软件违反了规范.
Section 4.3说:
…if the request method does not
include defined semantics for an
entity-body,then the message-body
SHOulD be ignored when handling the
request.
由于规范不包含具有GET请求的实体主体的已定义语义,因此服务器应忽略它.
另外,如果请求中没有提供实体,并且Content-Length为零(假设transfer-encoding标头未设置且不是“IDentity”),则服务器不应尝试使用实体,无论请求如何方法或是否存在Content-Type标头.这可以通过优先顺序来备份,以确定Section 4.4中描述的消息长度.
总结以上是内存溢出为你收集整理的python – Content-Type标头是否适用于除PUT或POST之外的任何HTTP动词?全部内容,希望文章能够帮你解决python – Content-Type标头是否适用于除PUT或POST之外的任何HTTP动词?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)