我想执行一个简单的动作:HTTP 303(SeeOther):GET工程,POST失败
- POST到一个URL
- 返回HTTP 303(SeeOther)的新URL
- GET
从我可以告诉,这是一个相当标准的做法: http://en.wikipedia.org/wiki/Post/Redirect/Get
而且,它似乎SeeOther设计这样的工作方式: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.4
我使用web.py作为我的服务器端控制,但我怀疑这不是问题。如果我GET,SeeOther完美无瑕地按预期工作。如果我POST到相同的URL,浏览器根本无法重定向或加载任何东西。
我以为这是一个浏览器的问题,我都尝试IE9和谷歌Chrome(V23 ISH)。两者都有同样的问题。
思考web.py可能会错误地服务页面,或产生不良URL,我用telnet来检查标头。我发现这一点:
HTTP GET(这部作品在浏览器):
GET /Users/1 HTTP/1.1
HOST: domain.com
HTTP/1.1 303 See Other
Date: Mon, 24 Dec 2012 18:07:55 GMT
Server: Apache/2
Cache-control: no-cache
Location: http://domain.com/Users
Content-Length: 0
Content-Type: text/html
HTTP POST(这不会在浏览器中运行):
POST /Users/1 HTTP/1.1
HOST: domain.com
HTTP/1.1 303 See Other
Date: Mon, 24 Dec 2012 18:12:35 GMT
Server: Apache/2
Cache-control: no-cache
Location: http://domain.com/Users
Content-Length: 0
Content-Type: text/html
可能被抛另一件事一个扳手在作品中: 我使用的是mod-rewrite,因此用户可见的domain.com/Users/1实际上是domain.com/control.py/Users/1
可能有更多的i我有信息/故障排除,但现在我正在画空白。
问题:
为什么这个工作,一个GET请求,而不是POST请求?我在某处丢失了一个响应标题吗?
编辑:
使用IE9开发者工具和浏览器的检查,它看起来像303不回来了一个POST后,浏览器。但是,当我执行GET请求时,我可以看到303进来。
然而,在Chrome的督察更加紧密地看后,我看到记录每个请求(不清除瓦特/每个页面调用)的能力。这让我看到了,由于某种原因,我的POST请求看起来像它的失败。再次 - GET工作得很好。
你在Chrome Inspector中看到了什么? 303是否收到客户端?例如,如果您有重定向循环,则Chrome会在控制台中显示错误。 –
@JanusTroelsen更新了问题以包含问题的答案。另外,这是我在这里的第一个问题,所以我不知道在评论中回答是否更合适。我想把更多的细节放在这个问题上让未来的读者更容易... – Dan
没关系。 POST请求如何失败? –