HTTP 报文 之 HTTP 状态码(2)

成功执行了一个部分或 Range 请求。稍后我们会看到,客户端可以通过一些特殊的首部来获取部分或某个范围内的文档 —— 这个状态码就说明范围请求成功了。

206 响应中必须包含 Content-Range、Date 以及 ETag 或 Content-Location 首部。

 

300 ~ 399 —— 重定向状态码

重定向状态码要么告知客户端使用替代位置来访问他们所感兴趣的资源,要么就提供一个替代的响应而不是资源的内容。如果资源已被移动,可以发送一个重定向状态码和一个可选的 Location 首部来告知客户端资源已被移走,以及现在可以在哪里找到它。

wKioL1jbLOGRX_wvAACOTpvFVeE819.png

可以通过某些重定向状态码对资源的应用程序本地副本与源端服务器上的资源进行验证。比如,HTTP 应用程序可以查看其资源的本地副本是否仍然是最新的,或者在源端服务器上资源是否被修改过。

客户端发送了一个特殊的 If-Modified-Since 首部,说明只读取 1997 年 10 月之后修改过的文档。这个日期之后,此文档并未修改过,因此,服务器回送了一个 304 状态码,而不是文档的内容。

wKiom1jbLO7iWdAjAACifprgM6g812.png

总之,在对那些包含了重定向状态码的非 HEAD 请求进行响应时,最好要包含一个实体,并在实体中包含描述信息和指向(多个)重定向 URL 的连接。

状态码   原因短语   含义  
300   Multiple Choices   客户端请求一个实际指向多个资源的 URL 时会返回这个状态码,比如服务器上有某个 HTML 文档的英语和法语版本。返回这个代码时会带有一个选项列表;这样用户就可以选择他希望使用的那一项了,有多个版本可用时,客户端需要沟通解决,更多于此有关的信息请参见第17章。服务器可以在 Location 首部包含首选的 URL  
301   Moved Permanently   在请求的 URL 已被移除时使用。响应的 Location 首部中应该包含资源现在所处的 URL   
302   Found   与 301 状态码类似;但是,客户端应该使用 Location 首部给出的 URL 来临时定位资源。将来的请求仍应使用老的 URL   
303   See Other   告知客户端应该用另一个 URL 来获取资源。新的 URL 位于响应报文的 Location 首部。其主要目的是允许 POST 请求的响应将客户端定向到某个资源上去。  
304   Not Modified    客户端可以通过所包含的请求首部,使其请求变成有条件的。更多有关条件首部的内容请参见第三章。如果客户端发起了一个条件 GET 请求,而最近资源未被修改的话,就可以用这个状态码来说明资源未被修改。带有这个状态码的响应不应该包含实体的主体部分。  
305   Use Proxy   用来说明必须通过一个代理来访问资源;代理的位置由 Location 首部给出。很重要的一点是,客户端是相对某个特定资源来解析这条响应的,不能假定所有请求,甚至所有对持有所请求资源的服务器的请求都通过这个代理进行。如果客户端错误地让代理介入了某条请求,可能会引发破坏性的行为,而且会造成安全漏洞。  
306   (未使用)   当前未使用  
307   Temporary Redirect   与 301 状态码类似;但客户端应该使用 Location 首部给出的 URL 来临时定位资源。将来的请求应该使用老的 URL  

当 HTTP/1.0 客户端发起一个 POST 请求,并在响应中收到 302 重定向状态码时,它会接受 Location 首部的重定向 URL,并向那个 URL 发起一个 GET 请求(而不会像原始请求中那样发起 POST 请求)。

问题出在 HTTP/1.1。HTTP/1.1 规范使用 303 状态码来实现同样的行为(服务器发送 303 状态码来重定向客户端的 POST 请求,在它后面跟上一个 GET 请求)。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/5af036edbd300e97f529329396e8c719.html