我正在使用 CherryPy 作为网络服务器,但希望它能够处理HTTP/1.1 Upgrade
要求。因此,当客户端发送:
OPTIONS * HTTP/1.1
Upgrade: NEW_PROTOCOL/1.0
Connection: Upgrade
我希望服务器将连接转交给某些人NEW_PROTOCOL
处理程序在响应必要的信息后HTTP/1.1 101 Switching Protocols...
,如指定RFC 2817 http://www.ietf.org/rfc/rfc2817.txt.
我对 CherryPy 还很陌生,在文档中找不到有关如何处理如上所述的特定客户端请求的任何内容。如果有人可以向我指出 CherryPy 文档的教程或部分内容,甚至是解决方案,那将非常有帮助。
这在 trunk 中相当容易做到(最终将成为 3.2 Final)。我确信在旧版本中这是可能的,但更复杂。
您需要做的就是创建一个新的子类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
可能还有其他一些要点,但这是一般技术。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)