【发布时间】:2011-03-22 08:58:02
【问题描述】:
HTTP 302 如何工作?我想知道内部原理
【问题讨论】:
标签: http http-redirect
HTTP 302 如何工作?我想知道内部原理
【问题讨论】:
标签: http http-redirect
你的意思是浏览器如何处理它?服务器发送302 代码和Location 标头,浏览器请求Location 标头指定的新URI。
与301 (Moved Permanently)不同,浏览器继续使用原来的URI来做请求,以防302代码消失
【讨论】:
服务器返回一个带有代码302的HTTP响应,表示临时重定向,并包含一个Location:标头表示新的URI,例如
HTTP/1.1 302 Found
Location: http://some-other-url
以及可能由服务器自行决定的其他标头。
浏览器通常将此作为指令自动对位置标头指定的其他 URI 发出新的单独请求。客户端(浏览器)不会强制这样做(理论上,它可以只向用户显示一条消息,或者做它想做的任何其他事情),但这就是 HTTP 客户端通常的行为方式。
请注意,由于 302 是一个临时重定向,因此行为良好的客户端将来会继续使用旧 URL,而不是直接转到新 URL(301 是永久重定向)。
【讨论】:
来自: http://www.ietf.org/rfc/rfc2616.txt 和 http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
10.3.3 找到 302
请求的资源暂时位于不同的 URI 下。 由于重定向有时可能会改变,客户端应该 继续使用 Request-URI 来处理未来的请求。这个回应 仅在 Cache-Control 或 Expires 标头指示时才可缓存 字段。
临时 URI 应该由 回复。除非请求方法是 HEAD,否则 响应应该包含一个带有超链接的简短超文本注释 新的 URI。
如果收到 302 状态代码以响应其他请求 与 GET 或 HEAD 相比,用户代理不能自动重定向 请求,除非它可以被用户确认,因为这可能 更改发出请求的条件。
Note: RFC 1945 and RFC 2068 specify that the client is not allowed
to change the method on the redirected request. However, most
existing user agent implementations treat 302 as if it were a 303
response, performing a GET on the Location field-value regardless
of the original request method. The status codes 303 and 307 have
been added for servers that wish to make unambiguously clear which
kind of reaction is expected of the client.
【讨论】:
什么内部? 302是服务端给客户端的一个返回码,客户端做什么由它决定。 RFC 为客户端应该做什么提供了指导,但在现实世界中,主流浏览器对 301、302、303 和 307 的处理方式都是相同的。
【讨论】:
只是一个插件- 重要的是,停止客户端连续/频繁地使用相同的请求访问相同的服务器 url。
【讨论】: