在CherryPy中处理HTTP/1.1升级请求

2024-06-16 12:42:27 发布

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

我将CherryPy用于web服务器,但希望它能处理HTTP/1.1 Upgrade请求。因此,当客户端发送:

OPTIONS * HTTP/1.1
Upgrade: NEW_PROTOCOL/1.0
Connection: Upgrade

我希望服务器在响应必需的HTTP/1.1 101 Switching Protocols...(如RFC 2817)后将连接移交给某个NEW_PROTOCOL处理程序。在

我对CherryPy很陌生,在文档中找不到任何关于如何处理上述特定客户端请求的内容。如果有人能告诉我一个教程或CherryPy文档的一部分,甚至是一个解决方案,那将是非常有帮助的。在


Tags: 文档服务器webhttp处理程序客户端newrfc
1条回答
网友
1楼 · 发布于 2024-06-16 12:42:27

这在trunk中很容易实现(最终将是3.2 final)。我敢肯定在旧版本中是可能的,但要复杂得多。在

{gateway继续执行一个通常的问题,即关闭所有的子类。例如:

class UpgradeGateway(Gateway):
    def respond(self):
        h = self.req.inheaders
        if h.get("Connection", "") == "Upgrade":
            # Turn off auto-output of HTTP response headers
            self.req.sent_headers = True
            # Not sure exactly what you want to pass or how, here's a start...
            return protocols[h['Upgrade']].handle(self.req.rfile, self.req.wfile)
        else:
            return old_gateway(self.req).respond()

old_gateway = cherrypy.server.httpserver.gateway
cherrypy.server.httpserver.gateway = UpgradeGateway

可能还有其他一些好的地方,但这是一般的技巧。在

相关问题 更多 >