HTTP 重定向解析
Posted 后端开发杂谈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP 重定向解析相关的知识,希望对你有一定的参考价值。
30x 重定向
关于重定向的 http code 主要有以下:
301 Moved Permanently
301 状态码表明目标资源被永久的移动到了一个新的URI, 任何未来新对这个资源的引用都应该使用新的 URI.
服务器会在响应Header的Location字段中放上这个不同的URI(目标URI). 浏览器可以使用Location中 的URI进行自动重定向.
设置 Cache-Control 可以缓存301响应
302 Found
302 状态码表示 目标资源
临时移动到另外一个URI上. 由于重定向是临时发生的, 所以客户端在之后 的请求中URI还应该使用原来的URI.
服务器会在响应Header的Location字段中放上这个不同的URI(目标URI). 浏览器可以使用Location中 的URI进行自动重定向.
注意: 历史的原因, 用户代理可能会在重定向后的请求中把POST方法改为GET方法. 如果不想这样, 应该 使用 307 (Temporary Redirect) 状态码.
设置 Cache-Control 可以缓存302响应
303 See Other
303 状态码表示服务器要将浏览器重定向到另一个资源, 这个资源的URI会被写在响应Header的Location 当中. 从语义上讲, 重定向到的资源并不是你所请求的资源, 而是对你所请求资源的一些描述.
303 常用于将POST请求重定向到GET请求. 例如:上传文件成功后, 服务器发回一个303响应, 将你重定向到 一个上传成功的页面.
不管原请求是什么方法, 重定向的请求方法都是GET(或HEAD).
303 响应禁止被缓存.
307 Temporary Redirect
307 的定义实际上和302是一致的, 唯一的区别在于, 307 状态码不允许浏览器将原本为POST请求重定向到 GET请求上. 即不允许修改请求方法.
308 Permanently Redirect
308 的定义和301是一致的, 唯一的区别在于, 308状态码不允许浏览器将原本为POST去请求重定向到GET请 求上去. 不允许修改请求方法.
301 和 308 是永久重定向
302, 303, 307 是暂时重定向
302 303 307的区别 302 允许各种各样的重定向,
一般情况下都会实现为到GET的重定向
. 但是不能确保POST会重定向为POST 303 只允许任意请求到(GET | HEAD)的重定向; 307 和 302 一样, (HEAD | GET | PUT | DELETE | POST), 除了不允许POST到GET的重定向.
301 308的区别 301 允许各种各种的重定向(HEAD|GET|PUT|DELETE). 但是不能确保POST会重定向为POST. 308 运行各种各样的重定向(HEAD | GET | PUT | DELETE | POST)
场景介绍
使用 301 场景 (一般是资源位置永久更改)
换域名.
HTTP -> HTTPS
使用 302 场景 (一般是普通的重定向需求: 临时跳转)
未登录前使用302重定向到登录页面, 登录成功再跳回原来请求的页面
自动刷新页面. 比如5秒后返回订单详细页面之类
http://t.cn/RuUMBnI -> miaopai.com 302
http://t.cn/RuOcwxn -> video.weibo.com 301 -> miaopai.com 302
电脑端与移动端的转换
https://www.taobao.com/ -> m.taobao.com 302
以上是关于HTTP 重定向解析的主要内容,如果未能解决你的问题,请参考以下文章
Linkedin OAuth 2.0 重定向 URL 不能包含片段标识符 (#)