HTTP 303(SeeOther):GET工程,POST失败(HTTP 303 (SeeOther

2019-07-17 13:00发布

我想执行一个简单的动作:

  1. POST到一个URL
  2. 返回HTTP 303(SeeOther)
  3. 来自新网址,以获取

从我可以告诉,这是一个非常标准的做法: http://en.wikipedia.org/wiki/Post/Redirect/Get

此外,它似乎SeeOther设计这样的工作方式: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.4

我使用web.py作为我的服务器端控制,但我怀疑这不是问题。 如果我得到的,完美的作品如预期SeeOther。 如果我张贴到相同的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

可能在作品被扔扳手另一件事:我使用的是国防部,重写使得用户可见domain.com/Users/1实际上是domain.com/control.py/Users/1

可能有更多的信息/疑难解答,我有,但我画一个空白,现在。

问题:

为什么用GET请求这项工作,而不是POST请求? 我缺少一个响应头的地方?

编辑:

使用IE9开发者工具和浏览器的检查,它看起来像303不回来了一个POST后,浏览器。 不过,我可以看到303进来时,我做一个GET请求。

然而,在Chrome的督察更加紧密地看后,我看到记录每个请求的能力(不清除瓦特/每个页面调用)。 这让我看到了,由于某种原因,我的POST请求看起来像它的失败。 再次 - GET作品就好了。

Answer 1:

这是完全可能的,这不是你的问题,但因为你没有张贴你的代码,我会进行拍摄(以防万一)。

由于您使用web.py,你有你的对象上定义的POST方法?

urls = (
    '/page', 'page'
)

class page:

    def POST(self):
        # Do something

    def GET(self):
        # Do something else


文章来源: HTTP 303 (SeeOther): GET Works, POST Fails