欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

HTTP协议(RFC2616)中的方法定义

程序员文章站 2022-04-28 07:49:45
...

OPTIONS
OPTIONS 方法表示在由 Request-URI 标识的请求/响应链上关于有效通迅选项信息的请求。该方法允许客户端判断与某个资源相关的选项和/或需求或者服务器的能力,而不需要采用资源行为或发起资源获取。

该方法的响应不能缓存。

如果OPTIONS请求包括实体(如由 Content-Length或 Transfer-Encoding的存在表示),这时媒体类型必须通过 Content-Type 域表示。尽管本规范没有定义该实体的用法,将来的HTTP 扩展可能使用 OPTIONS 消息体来更详细地查询服务器的信息。服务器不支持该扩展可以丢弃该请求消息体。

如果 Request-URI 是星号(“*”),OPTIONS 请求通常试图应用于服务器而不是特定的资源。由于服务器的通迅选项一般由资源决定,所以“*”请求只作为“ping”或“no-op”类型的方法有用;它没有任何作用,除了允许客户端测试服务器的能力。例如,可用来测试HTTP/1.1 代理的一致性(或缺少因素)。

如果 Request-URI不是星号,OPTIONS请求只应用于与该资源通迅时的有效选项。

200 响应应该包括任何头部域来表示服务器实现和可应用到该资源的可选特性(如Allow),可能包括该规范没有定义的扩展。如果有响应消息体,则应该还包括通迅选项的信息。本规范没有定义该消息体的格式,但可能在将来扩展 HTTP时定义。内容协商可用于选择适当的响应格式。如果不包括响应消息体,则响应必须包括域值为“0”的 Content-Length域。

Max-Forwards 请求头部域可能用于请求链中定位特定代理。当代理收到关于允许请求转发的absoluteURI的OPTIONS请求时, 代理必须检查Max-Forwards域。 如果Max-Forwards域值为0(“0” ),则代理不能转发该消息;取而代之,代理应该以它自己的通迅选项来响应。

如果 Max-Forwards 域值是大于 0 的整数,代理在转发该请求时必须将域值减一。如果请求中不存在 Max-Forwards域,则转发的请求中不能包括Max-Forwards域。

GET
GET 方法即获取由 Request-URI 标识的任何信息(以实体的形式)。如果 Request-URI引用某个数据处理过程,则应该以它产生的数据作为在响应中的实体,而不是该过程的源代码文本,除非该过程碰巧输出该文本。

如果请求消息包括 If-Modified-Since、If-Unmodified-Since、If-Match、If-None-Match或者If-Range头部域,则GET方法的语义变为“条件GET”。条件 GET方法请求只传输在条件头部域描述情形下的实体。条件 GET 方法试图通过允许刷新缓存的实体而不需要多次请求或传输客户端已经拥有的数据来减少非必要的网络使用。

如果请求消息包括 Range头部域,则 GET方法的语义变为“局部 GET”。局部 GET请求只需传输实体的某部分。

HEAD
除了服务器不能在响应中返回消息体,HEAD 方法与 GET 相同。HEAD 请求的响应中的 HTTP 头部中包含的元信息应该与 GET 请求发送的响应中的信息相同。该方法可用来获取请求暗示实体的元信息, 而不需要传输实体本身。 该方法常用来测试超文本链接的有效性、可用性和最近的修改。

当响应中包含的信息可用于更新先前从该资源缓存的实体时, HEAD 请求的响应可能是可缓冲的。如果新的域值表明该缓冲的实体与当前实体不同(如可通过 Content-Length、Content-md5、ETag或Last-Modified的区别来表示),这时缓冲服务器必须将该缓存实体作为过期的。

POST
POST 方法用来请求原始服务器接受请求中封装的实体作为从属于请求行中的Request-URI标识的副属。POST设计允许完成下列功能的统一方法:
http://www.devdao.com/
注解存在资源;
上传消息到论坛、新闻组或相似的讨论组;
向数据处理过程提供数据块,如递交表单的结果;
通过追加操作来扩展数据库。
POST 方法执行的实际功能由服务器决定,且通常取决于 Request-URI。上传的实体从属于该URI,通过文件从属于包含它的目录,新的论文从属于它上传的新闻组,或记录从属于数据库的方式。

POST 方法执行的行为可能不导致通过 URI 能够标识的某个资源。在这种情况下,200(OK)或 204(No Content)都是适合的响应状态。这取决于描述结果的响应是否包括实体。

如果原始服务器创建了资源,响应应该是 201(Created),且包含描述请求状态的实体,和新资源的引用,和Location头部。

该方法的响应不能缓存,除非响应包括适当的Cache-Control或 Expires头部域。然而,303(See Other)响应能够用来引导用户代理获取可缓存的资源。

PUT
PUT方法请求以提供的Request-URI存储封装的实体。如果 Request-URI引用已经存在的资源,该封装实体应该被认作原始服务器存储的修改版本。如果 Request-URI没有指向已存在的资源, 且该URI可以被请求的用户代理定义为新的资源, 则原始服务器可以用该 URI创建资源。如果创建了新的资源,则原始服务器必须通过 201(Created)响应提示用户代理。

如果修改了已存在的资源,则应该发送200(OK)或 204(No Content)响应代码来表示成功完成了请求。如果不能按 Request-URI创建或修改资源,则应该给出适当的错误响应以反映出问题的性质。实体的接受方不能乎略任何不理解或没有实现的 Content-*(如Content-Range)头部,在这种情况下必须返回 501(Not Implemented)响应。

如果请求通过缓冲服务器且Request-URI标识出一个或多个缓冲的实体,则应该认为这些实体过期了。该方法的响应不可缓存。

POST和PUT请求间的基本区别反映在 Request-URI的不同意义。POST请求中 URI标识的资源将处理封装的实体。该资源可能是数据接收过程、其它协议的网关或接受注解的独立实体。与此对应,PUT请求中的URI标识请求封装的实体——用户代理知道该 URI是目标且服务器不能试图将该请求应用到其它资源上。 如果服务器希望该请求应用到不同的 URI上,则它必须发送301(Moved Permanently)请求;这时客户代理可以自己决定是否要重定向该请求。

可以用许多不同的 URI 标识同个资源。例如,一篇文章可以有标识为“当前版本”的URI,它独立于标识每个特别版本的 URI。在这种情况下,使用通用 URI 的 PUT 请求可能造成原始服务器定义的一些不同URI的结果。

HTTP/1.1 没有定义PUT方法如何影响原始服务器的状态。

除了其它特殊实体头部的规定,PUT 请求中的实体头部应该应用到 PUT 创建或修改的资源上。

DELETE
DELETE 方法请求原始服务器删除Request-URI 标识的资源。原始服务器可在人为干涉下(或其它意思)屏闭该方法。客户端不能确保该操作已经提交,即使原始服务器发出的状态码表明动作已经成功完成也如此。然而,在给出响应的时候,服务器不应该表示成功,除非它试图删除该资源或将它移动到不可访问的位置。

如果响应包含描述状态的实体,成功响应应该是200(OK)。如果动作没有实施,则是202(Accepted)。如果动作已经实施但响应不包含实体,则是 204(No Content)。

如果请求通过缓冲服务器,且Request-URI标识一个或多个当前缓存的实体,则应该认为这些实体已经过期。该方法的响应不可缓存。

TRACE
TRACE 方法用于引起远程的,该请求消息的应用层回射。请求的最终接收者应该反射200(OK)响应,并以该消息作为客户端回收消息的实体。最终接收者是原始服务器或第一个收到请求中的Max-Forwards值为0(0)的代理或网关。TRACE 请求不能包括实体。

TRACE 允许客户端看见请求链上的另一端收到了什么,然后使用该数据作为测试或诊断信息。Via 头部域的值有特殊作用,将它作为请求链路径。使用Max-Forwards头部域允许客户端限制请求链的长度,这对于测试无限循环转发消息的代理链非常有用。

如请求有效,则响应应该在实体中包含整个请求消息,设置 Content-Type 为“message/http” 。该方法的响应不能缓存。

CONNECT
规范保留 CONNECT 方法名。该方法用于代理,使之能够动态切换隧道(例如 SSL隧道)。