Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Http 什么';302和307重定向的区别是什么?_Http_Redirect - Fatal编程技术网

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的站点添加到列表中