这个是用来模拟测试环境的,但是 302 那个 response 的 FIN 被置 1 ,连接断开了 如何在以下过程中保持 TCP 长连接? GET->302->GET
from http.server import SimpleHTTPRequestHandler from http.server import HTTPServer #Listen Address ADDR = '' #Listen Port PORT = 80 class WebRequestHandler(SimpleHTTPRequestHandler): def do_GET(self): #self.close_cOnnection=False self.protocol_version='HTTP/1.1' rawpath = self.path.split('?')[0] if(rawpath == '/ITPage/SurftheInternet.aspx' ): self.send_response(302) self.send_header('Content-Type','text/html; charset=') self.send_header('Location','/ITPage/SurftheInternet.html?openid=testestestestest') self.end_headers() if(rawpath == '/ITPage/SurftheInternet.html'): self.send_response(200) self.end_headers() server = HTTPServer((ADDR,PORT),WebRequestHandler) print("Server start!") server.serve_forever()
![]() | 1 ryd994 2016-11-28 01:20:30 +08:00 via Android 1. protocol version 直接放 class 里 2. 设置 header Connection: keep-alive |
![]() | 2 qq446015875 2016-11-28 09:54:46 +08:00 via iPhone @ryd994 我试了下,抓包确实看到了 302 没有 FIN ,但是浏览器似乎不认这个 302 ,浏览器 F12 没有记录到,也没有跳转 如果只按 1 操作,抓包没有 302 , python 没有回应 GET |
![]() | 3 qq446015875 2016-11-28 10:15:31 +08:00 via iPhone 我好像知道了, Content-Length 吧? |
4 julyclyde 2016-11-28 11:01:00 +08:00 你自己写 handler 啊 那你输出的 header 里并没提到 Connection: Keep-Alive 啊 |
![]() | 5 ryd994 2016-11-29 03:46:13 +08:00 @qq446015875 不是 content-length 你查查 Connection: keep-alive |
6 axisray OP @ryd994 不需要 Connection: Keep-Alive ,浏览器在发起 GET 请求的时候就已经包含了 Connection: Keep-Alive 而且 HTTP/1.1 默认就是长连接 我遇到的问题是因为没有包含 Content-Length 浏览器一直在等待数据,所以就卡死在哪了 添加 self.send_header('Content-Length','0') 这样就可以了 |
![]() | 7 ryd994 2016-11-30 14:18:43 +08:00 ![]() 说什么都比不上源码: https://hg.python.org/cpython/file/3.6/Lib/http/server.py#l344 你自己问的是连接断开了怎么办,怎么保持长连接 请求 header 和响应 header 是两回事 另外,你的问题文档里有明确说过: https://docs.python.org/3.7/library/http.server.html#http.server.BaseHTTPRequestHandler.protocol_version |
![]() | 8 qq446015875 2016-12-03 15:58:06 +08:00 via iPhone @ryd994 嗯是我描述不清楚,我也是发完帖子注意到文档里说要加 content-length 还是谢谢你了:) |
9 axisray OP 我擦,没注意,暴露马甲了.... |