HTTP POST响应失败,使用网页.py

2024-04-19 22:04:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我想不言而喻,我对以下几点感到困惑。这是我在这里查询的一个伪延续:HTTP 303 (SeeOther): GET Works, POST Fails我发布另一个问题,因为另一个问题主要处理HTTP重定向,而没有解决我现在认为的潜在问题。在

我有一个很简单的网页.py班级:

class user:
        def GET(self, id):
                """List a single user"""
                web.header('Cache-control', 'no-cache')
                return 'wtf!!'

        def POST(self, id):
                """Save an updated user"""
                web.header('Cache-control', 'no-cache')
                return 'wtf!!'

如果我从这个资源得到,我会收到我愚蠢的简单的“wtf!!”文本响应。在

如果我发布到这个资源,根据请求的来源,我会得到混合的结果。在

  • 谷歌Chrome:完全失败。使用开发人员工具网络分析器,我可以看到请求发出。大约15秒后,它说它失败了。在
  • IE9:从技术上讲,它是有效的。等待~15秒后,预期响应将始终到达。在
  • PuTTY/Telnet:效果完美。正如预期的那样,响应几乎是瞬间出现的。在

我想也许是网络浏览器添加了一些损坏的标题网页.py,我决定让Wireshark来调查。我发现客户总是及时收到回复。但是,我注意到Wireshark没有将POST请求的响应识别为HTTP(这是它对GET请求的响应所做的)。在

编辑: 我一直在测试/排除这个问题,我有更多的发展。在

GET和POST响应都以头“Transfer-encoding:chunked”返回客户端。这意味着它不会发送整个页面,而是在它们准备好的时候发送碎片。一般格式为:

^{pr2}$

我用Wireshark找这些包。我注意到GET响应看起来应该如此,但是POST响应似乎缺少最后一个块。因此,连接会一直保持打开状态,直到超时(因为它希望来自服务器的数据更多)。在

以下是服务器端的请求。我不确定是哪一个负责“分块”数据。在

  • 阿帕奇
  • 国防部
  • 绒毛
  • 在网页.py在
  • 我的应用程序

我现在的问题:

哪个组件实际上“分块”了我的请求?在

为什么它不能发送最后一个块(只用于POST响应)?在


Tags: pyselfwebidhttp网页cacheget
1条回答
网友
1楼 · 发布于 2024-04-19 22:04:15

我试图复制你的问题。一切都正常。在

班级:

class User:
    def GET(self, id):
        """List a single user"""
        web.header('Cache-control', 'no-cache')
        return 'GET' + str(id)

    def POST(self, id):
        """Save an updated user"""
        web.header('Cache-control', 'no-cache')
        raise web.seeother('/user/2')

对于URL: urls = ( r'/user/?(\d*)', "User", )

当我在做POST(使用FF)时,一切都在起作用。在

你使用中间件吗?在

相关问题 更多 >