我有一个使用gevent.pywsgi.WSGIServer (http://www.gevent.org/gevent.pywsgi.html)的web服务器,我需要处理一个非http请求以及正常的http请求。如何处理pywsgi中的非http请求
Server:
web_server = gevent.pywsgi.WSGIServer(('', 8080), web_server);
web_server.serve_forever();
Handler:
def viewer_command_server(env, start_response):
if env['REQUEST_METHOD'].upper() == "PUT":
path = env["PATH_INFO"]
start_response("200 OK", [("Content-Type", "text/html"), ("Cache-Control", "no-cache"), ("Connection","keep-alive")])
return [ ""]
该处理正常PUT请求,但我也想通过服务器闪存应用程序使用的crossdomain.xml文件。但问题是,当Flash应用程序试图检索其crossdomain.xml文件时,我得到了这个。
"socket fileno=13 sock=66.228.55.170:9090 peer=96.54.202.251:63380: Invalid HTTP method: '<policy-file-request/>\x00'
96.54.202.251 - - [2012-05-21 22:58:53] "<policy-file-request/>" 400 0 2.940527
"
有没有办法处理这个请求? Adobe建议在端口843上运行单独的tcp服务器来提供此文件。 我想保留所有端口8080.
谢谢,问题是,Flash使用它自己的'xmlish'查询_and_,如果它不能得到一个答案在端口843,然后它回落到http端口。 有些时候,由于某些原因它无法连接到843,并且它在应用程序中不可见。所以http服务器仍然会收到请求。如果我们能够陷害并处理这种情况,那将会更顺利。 –
我不确定所有Flash播放器的功能,但这听起来不像一个合理的行为 - 它总是发送非HTTP请求到它知道的http服务器,当它不能联系端口843.(这很常见,很多公司都防火墙,然后代理端口80和443)。你确定这里没有更多的东西吗? – metamatt
重新“陷阱并处理”这种情况 - 你可能会严重破坏你的wsgi服务器,但这样做会很难看。 – metamatt