POST => 302重定向到GET的正确行为是什么?
在Chrome(可能是大多数每个浏览器)中,在POST(对于想要我重定向的资源)并且我收到302重定向之后,浏览器会自动在302位置发出GET.这甚至是众所周知的模式.但是我阅读规范的方式似乎表明这不应该发生.
如果收到302状态代码以响应GET或HEAD以外的请求,则用户代理不得自动重定向请求,除非用户可以确认,因为这可能会改变发出请求的条件.
小提琴手正在展示:
REQUEST 1: POST URLA
RESPONSE 1: 302 redirect to URLB
REQUEST 2: GET URLB
Run Code Online (Sandbox Code Playgroud)
上面的部分似乎说浏览器不应该发出GET请求?我错过了什么?
aba*_*ert 19
规范中的下一行开始:
注意:RFC 1945和RFC 2068指定不允许客户端更改重定向请求的方法.但是,大多数现有的用户代理实现将302视为303响应,对Location字段值执行GET,而不管原始请求方法如何.已经为希望明确清楚客户端期望哪种反应的服务器添加了状态代码303和307.
在此之后,它会解释如何处理303,这正是您所看到的.
如果你问为什么服务器仍然使用302而不是307,所有当前浏览器都能正确处理,那是因为旧的浏览器无法处理它.如果你想知道为什么浏览器将302作为303处理,那是因为旧服务器期望它.实际上没有办法摆脱那个循环,并且HTTP可能更好地将302恢复为意味着它的意思,并且弃用它(对于非GET/HEAD)而不是307.
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           16502 次  |  
        
|   最近记录:  |