我正在将CherryPy用于Web服务器,但希望它能够处理HTTP/1.1 Upgrade
个请求。因此,当客户发送:
OPTIONS * HTTP/1.1
Upgrade: NEW_PROTOCOL/1.0
Connection: Upgrade
我希望服务器在使用RFC 2817中指定的必要NEW_PROTOCOL
回复后,将连接移交给某个HTTP/1.1 101 Switching Protocols...
处理程序。
我对CherryPy很新,并且在文档中找不到有关如何处理上述特定客户端请求的任何内容。如果有人可以指向我的教程或CherryPy文档的一部分甚至是解决方案,那将非常有用。
答案 0 :(得分:2)
这在trunk中相当容易(最终将是3.2最终版)。我确信它可以在旧版本中使用,但更复杂。
您需要做的就是创建一个wsgiserver.Gateway
的新子类,查找有问题的标题,然后将其移出conn或继续执行常用网关。例如:
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
可能还有其他一些优点,但这是一般技术。