HTTP响应状态代码----重定向(300–399)

喜夏-厌秋 提交于 2020-01-04 11:36:59

301 Moved Permanently、308 Permanent Redirect

请求的资源已经被永久的移动到了由 Location 首部指定的 URL

浏览器会重定向到这个URL,同时搜索引擎也会更新其链接(用 SEO 的行话来说,意思是链接汁被传递到了新的 URL)。

在重定向过程中,308请求方法和消息主体不会发生改变,如果在第一个请求中使用 POST,则必须在第二个请求中使用 POST,然而在返回 301 状态码的情况下,请求方法有时候会被客户端错误地修改为 GET 方法

302 Found、307 Temporary Redirect

请求的资源被暂时的移动到了由Location 头部指定的 URL
浏览器会重定向到这个URL, 但是搜索引擎不会对该资源的链接进行更新。

请求的资源现在临时从不同的URI 响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-ControlExpires中进行了指定的情况下,这个响应才是可缓存的。

在确实需要将重定向请求的方法转换为 GET的场景下,可以使用 303 See Other
例如在使用 PUT 方法进行文件上传操作时,需要返回确认信息(例如“你已经成功上传了xyz”)而不是上传的资源本身,就可以使用这个状态码。

总结:即使规范要求浏览器在重定向时保证请求方法和请求主体不变,但并不是所有的用户代理都会遵循这一点。
所以推荐仅在响应 GET 或 HEAD 方法时采用301302 状态码,而在其他时候使用 307308 来替代,因为在这些场景下方法变换是明确禁止的。

303 See Other

重定向链接指向的不是新上传的资源,而是另外一个页面
比如消息确认页面或上传进度页面。而请求重定向页面的方法要总是使用 GET
通常作为 PUTPOST 操作的返回结果。

304 Not Modified

未改变。
如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。

说明无需再次传输请求的内容,也就是说可以使用缓存的内容。

这通常是在一些安全的方法(safe),例如GETHEAD 或在请求中附带了头部信息: If-None-MatchIf-Modified-Since

如果是 200 OK ,响应会带有头部 Cache-Control, Content-Location, Date, ETag, Expires,和 Vary.

300 Multiple Choice

表示该请求拥有多种可能的响应。用户或浏览器能够自行从中选择一个首选的地址进行重定向。
假如服务器可以提供一个优先选择,那么它应该生成一个 Location 首部。
由于没有如何进行选择的标准方法,这个状态码极少使用。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!