HTTP 303(参见其他):GET Works,POST失败

时间:2012-12-24 19:01:25

标签: python http http-headers web.py

我正在尝试执行一个简单的操作:

  1. 发布到网址
  2. 返回HTTP 303(参见其他)
  3. 从新网址获取
  4. 据我所知,这是一个非常标准的做法: http://en.wikipedia.org/wiki/Post/Redirect/Get

    此外,看起来SeeOther的设计方式是这样的: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.4

    我使用web.py作为我的服务器端控制器,但我怀疑它不是问题。如果我获得,请看其他正如预期的那样完美无瑕。如果我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

    我可能有更多信息/疑难解答,但我现在正在填空。

    问题:

    为什么这适用于GET请求,而不是POST请求?我错过了某处的回复标题吗?

    修改

    使用IE9开发者工具和Chrome的Inspector,看起来303在POST后不会回到浏览器。但是,当我发出GET请求时,我可以看到303进来。

    然而,在仔细查看Chrome的Inspector之后,我看到了记录每个请求的能力(不清楚每个页面调用)。这让我看到由于某种原因,我的POST请求看起来像是失败了。再次--GET工作正常。

1 个答案:

答案 0 :(得分:1)

完全有可能这不是你的问题,但由于你没有发布你的代码,我会采取行动(以防万一)。

由于您使用的是web.py,您是否在对象上定义了POST方法?

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

class page:

    def POST(self):
        # Do something

    def GET(self):
        # Do something else