我有一个简单的http服务器,我想在正文之前向客户端发送一些标题,因为内容的生成需要很长时间(超过n秒)。
例如:
HTTP 200 OK header->SOME CUSTOM HEADERS->SOME LONG OPERATION
->Content-Length->\n\n->BODY
如果服务器没有响应,有些客户端设备会在5秒左右后关闭。 在源代码中有一个对象" wfile"(套接字描述符,类文件对象)。 wfile.flush()将内容发送到客户端。在标准情况下,一切正常。 HTTP连接服务于nginx服务器。并且nginx从后端等待整个响应。有没有办法去冲洗"后端输出数据? 配置:
location / {
# proxy_set_header X-Real-IP $remote_addr;
#sendfile_max_chunk 0;
proxy_buffering off;
sendfile off;
proxy_pass srv;
}
# server_tokens off;
}
<!-- language: lang-python -->
from SocketServer import ThreadingMixIn, TCPServer
from SimpleHTTPServer import SimpleHTTPRequestHandler
class MyHandler(SimpleHTTPRequestHandler):
def do_Get(self):
self.wfile.write("HERE SOME HEADER\n")
self.wfile.flush()
#---HERE SOME LONG BLOCKING OPERATION
content = blocking_operation()
#HERE Content-length header generation etc.
...
class SimpleSrv(ThreadingMixIn, TCPServer):
allow_reuse_address = True
....
httpd = SimpleSrv((ip, port), MyHandler)
httpd.serve_forever()
答案 0 :(得分:0)
默认情况下,nginx缓冲响应此类响应,您可以通过nginx配置选项禁用此行为 proxy_buffering 或者从后端发送“X-Accel-Buffering”标题。