a 302 FOUND和307 TEMPORARY REDIRECTHTTP响应有什么区别?
W3规范似乎表明它们都用于临时重定向,除非响应特别允许,否则它们都不能被缓存.
Chr*_*Orr 153
307 came about because user agents adopted as a de facto behaviour to take POST requests that receive a 302 response and send a GET request to the Location response header.
这是不正确的行为 - 只有 303应该导致POST变成GET.如果原始POST请求返回302,则用户代理应该(但不要)在请求新URL时坚持使用POST方法.
引入了307以允许服务器向用户代理明确说明在遵循Location响应头时客户端不应该进行方法更改.
Kri*_*ams 56
实际操作的一个很好的例子307 Internal Redirect是Google Chrome遇到对其知道需要严格传输安全的域的HTTP调用.
浏览器使用与原始调用相同的方法无缝重定向.

Ian*_*oyd 11
原来只有 302
| 回复 | 浏览器应该做什么 |
|---|---|
302 Found |
使用新 url 重做请求 |
这个想法是:
GET在某个位置做一个,你会重做你GET的新 URLPOST在某个位置做一个,你会重做你POST的新 URLPUT在某个位置做一个,你会重做你PUT的新 URLDELETE在某个位置做一个,你会重做你DELETE的新 URL不幸的是,每个浏览器都做错了。当得到 a 时302,他们总是切换到GET新的 URL,而不是用相同的动词(例如,POST)重试请求:
它变成了事实上的错误。
所有浏览器都302出错了。所以303和307被创造。
| 回复 | 浏览器应该做什么 | 浏览器实际做什么 |
|---|---|---|
302 Found |
使用新 url 重做请求 | 使用新网址获取 |
303 See Other |
使用新网址获取 | 使用新网址获取 |
307 Temporary Redirect |
使用新 url 重做请求 | 使用新 url 重做请求 |
5 种不同类型的重定向:
??????????????????????????????????????????????????????????????
? ? Switch to GET? ?
? ??????????????????????????????????????????????????
? Temporary ? No ? Yes ?
??????????????????????????????????????????????????????????????
? No ? 308 Permanent Redirect ? 301 Moved Permanently ?
??????????????????????????????????????????????????????????????
? Yes ? 307 Temporary Redirect ? 303 See Other ?
? ? 302 Found (intended) ? 302 Found (actual) ?
??????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
或者:
| 回复 | 切换获取? | 暂时的? |
|---|---|---|
301 Moved Permanently |
不 | 不 |
302 Found (故意的) |
不 | 是的 |
302 Found (实际的) |
是的 | 是的 |
303 See Other |
是的 | 是的 |
307 Temporary Redirect |
不 | 是的 |
308 Permanent Redirect |
不 | 不 |
EXPECTED为302:重定向在NEW_URL上使用相同的请求方法POST
CLIENT POST OLD_URL -> SERVER 302 NEW_URL -> CLIENT POST NEW_URL
Run Code Online (Sandbox Code Playgroud)
ACTUAL for 302,303:将更改请求方法从POST重定向到NEW_URL上的GET
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)
Run Code Online (Sandbox Code Playgroud)
FORT for 307:重定向在NEW_URL上使用相同的请求方法POST
CLIENT POST OLD_URL -> SERVER 307 NEW_URL -> CLIENT POST NEW_URL
Run Code Online (Sandbox Code Playgroud)
/register-form.html移到signup-form.html。/register.php,则现在加载(GET)/success.html。/register.php,则告诉它在处重做POST /signup.php。RFC 7231(自2014年起)具有很好的可读性,并且不太冗长。如果您想知道确切的答案,建议阅读。其他一些答案使用的是1999年的RFC 2616,但没有任何变化。
RFC 7238指定308状态。它被认为是实验性的,但2016年所有主流浏览器均已支持它。