Http 什么';302和307重定向的区别是什么?
找到的Http 什么';302和307重定向的区别是什么?,http,redirect,Http,Redirect,找到的302和307临时重定向HTTP响应之间有什么区别 似乎表明它们都用于临时重定向,除非响应特别允许,否则都不能缓存。区别在于重定向POST、PUT和DELETE请求以及服务器对用户代理行为的期望(): 注意:RFC 1945和RFC 2068规定不允许客户端 更改重定向服务器上的方法 要求但是,大多数现有用户 代理实现将302视为 这是一个303响应,执行 获取位置字段值 不管最初的要求如何 方法。状态代码为303和307 已为希望 弄清楚是哪一种 预计会有更多的反应 客户 另外,请阅读W
302
和307临时重定向
HTTP响应之间有什么区别
似乎表明它们都用于临时重定向,除非响应特别允许,否则都不能缓存。区别在于重定向
POST
、PUT
和DELETE
请求以及服务器对用户代理行为的期望():
注意:RFC 1945和RFC 2068规定不允许客户端
更改重定向服务器上的方法
要求但是,大多数现有用户
代理实现将302视为
这是一个303响应,执行
获取位置字段值
不管最初的要求如何
方法。状态代码为303和307
已为希望
弄清楚是哪一种
预计会有更多的反应
客户
另外,请阅读Wikipedia上的文章。307的出现是因为用户代理采用了一种事实行为,即接收302响应的POST请求,并将GET请求发送到位置响应头 这是不正确的行为-只有303会导致帖子变成GET。如果原始POST请求返回302,则用户代理在请求新URL时应(但不)坚持使用POST方法
307的引入是为了让服务器向用户代理清楚地表明,当遵循位置响应头时,客户端不应进行方法更改。一个很好的例子是,当Google Chrome遇到一个对它知道需要严格传输的域的HTTP调用时,
307内部重定向就起作用了安全
浏览器使用与原始调用相同的方法无缝重定向
另外,对于服务器管理员来说,需要注意的是,如果使用307重定向,浏览器可能会向用户显示提示
例如*,Firefox和Opera会要求用户允许重定向,而Chrome、IE和Safari会透明地进行重定向
*per(第192页)。预期为302:重定向在新URL上使用相同的请求方法POST
CLIENT POST OLD_URL -> SERVER 302 NEW_URL -> CLIENT POST NEW_URL
CLIENT POST OLD_URL -> SERVER 302 NEW_URL -> CLIENT GET NEW_URL (redirect uses GET)
CLIENT POST OLD_URL -> SERVER 303 NEW_URL -> CLIENT GET NEW_URL (redirect uses GET)
CLIENT POST OLD_URL -> SERVER 307 NEW_URL -> CLIENT POST NEW_URL
302303的实际情况:从POST重定向更改请求方法以获取新的URL
CLIENT POST OLD_URL -> SERVER 302 NEW_URL -> CLIENT POST NEW_URL
CLIENT POST OLD_URL -> SERVER 302 NEW_URL -> CLIENT GET NEW_URL (redirect uses GET)
CLIENT POST OLD_URL -> SERVER 303 NEW_URL -> CLIENT GET NEW_URL (redirect uses GET)
CLIENT POST OLD_URL -> SERVER 307 NEW_URL -> CLIENT POST NEW_URL
307的实际情况:重定向在新URL上使用相同的请求方法POST
CLIENT POST OLD_URL -> SERVER 302 NEW_URL -> CLIENT POST NEW_URL
CLIENT POST OLD_URL -> SERVER 302 NEW_URL -> CLIENT GET NEW_URL (redirect uses GET)
CLIENT POST OLD_URL -> SERVER 303 NEW_URL -> CLIENT GET NEW_URL (redirect uses GET)
CLIENT POST OLD_URL -> SERVER 307 NEW_URL -> CLIENT POST NEW_URL
在某些使用案例中,307重定向可能被攻击者滥用以了解受害者的凭据
更多信息请参见的第3.1节
上述论文的作者提出以下建议:
修复。与OAuth标准中的当前措辞相反,重定向的确切方法不是实现细节,而是OAuth安全的关键。在HTTP标准()中,只有303重定向被明确定义为删除HTTP POST请求的主体。所有其他HTTP重定向状态代码,包括最常用的302,都让浏览器保留保留POST请求和表单数据的选项。实际上,浏览器通常重写为GET请求,从而除去307重定向之外的表单数据。因此,OAuth标准应该要求对上述步骤进行303次重定向,以解决此问题
- 301:永久重定向:URL已旧,应替换。浏览器将缓存此URL。
用法示例:URL从/register form.html
移动到signup form.html
根据RFC 7231,该方法将更改为GET:“出于历史原因,用户代理可以将后续请求的请求方法从POST更改为GET。”
- 302:临时重定向。仅用于HTTP/1.0客户端。此状态代码不应更改此方法,但浏览器仍会更改此方法。
RFC说:“许多HTTP/1.1之前的用户代理不理解[303]。当与此类客户机的互操作性受到关注时,可以使用302状态代码,因为大多数用户代理会对302响应做出反应,如本文针对303所述。”当然,一些客户机可能会根据规范实现它,因此,如果与这些古老客户机的互操作性不是一个真正的问题,那么303对于一致的结果来说更好
- 303:临时重定向,更改获取的方法。
示例用法:如果浏览器将POST发送到/register.php
,则现在加载(获取)/success.html
- 307:临时重定向,重复相同的请求。
示例用法:如果浏览器向/register.php
发送了一篇文章,那么这会告诉它在/signup.php
处重做文章
- 308:永久重定向,重复相同的请求。其中307是303的“无方法更改”对应项,308状态是301的“无方法更改”对应项
非常可读,不太冗长。如果你想知道确切的答案,建议阅读。其他一些答案使用1999年的RFC2616,但没有任何变化
指定308状态。它被认为是实验性的,但已经在2016年了。最初只有302
回应
浏览器应该做什么
302已找到
使用新url重做请求
302是由服务器生成的临时重定向,而307是由浏览器生成的内部重定向响应。内部重定向意味着重定向由浏览器在内部自动完成,基本上,浏览器在发出请求之前会将get请求中输入的url从http更改为https,因此不会向internet发出不安全连接的请求。浏览器是否将url更改为https取决于浏览器预装的hsts预加载列表。您还可以通过在t中输入域,将任何支持https的站点添加到列表中