我希望浏览器反映一些其他URL,而不是用于创建请求的URL,但不需要往返服务器.
我也许会这样做:
POST /form HTTP/1.1 ...
...然后返回:
HTTP/1.1 200 OK Location: /hello
但这会导致重定向,浏览器会再次请求URL/hello.
我想告诉浏览器,虽然您刚发送的请求是POST/some_url,但我现在返回的实际资源实际上称为GET/hello/1,但没有预先形成往返.即位置:......
有没有办法用JavaScript或base =""属性做到这一点?这会告诉浏览器在我按F5(刷新)而不是发布提交警告时请求/ hello/1?
HTTP/1.1 200 OK Location: /hello
实际上这可能不起作用; 它应该是30x状态而不是200("303 See Other"最适合POST的响应),"Location"应该是完整的绝对URL.
(如果您的脚本只是说'Location:/ relativeurl'没有30x状态,CGI服务器通常会通过获取新URL并返回它而不告诉浏览器发生任何有趣的事情来进行内部重定向.这可能听起来像你想要的但是它实际上并不是因为从浏览器的角度来看,它与返回200和直接页面的原始脚本没有什么不同.)
但这会导致重定向,浏览器会再次请求URL/hello.
在实践中,由于HTTP/1.1保持活动,这可能没有您想象的那么糟糕.客户端应该能够立即响应重定向(在下一个数据包中),只要它在同一台服务器上.
有什么办法[...]当我点击F5(刷新)而不是发布提交警告时,会告诉浏览器请求/ hello/1吗?
不.坚持使用POST-Redirect-GET模型来解决这个问题.