BaseHTTPServer 写了个简易 HTTP 服务器,但是有时候 Response 没有头部,求大佬指点!

2018-08-03 23:22:51 +08:00
 axisray

就是一个很简单的 HTTP 服务器,响应任意 GET 请求,返回一个文件
服务端用 clumsy 模拟乱序环境,乱序 10%
然后在客户端抓包发现有时候服务端的 Response 没有 HTTP 头,不知道为什么……
是 python 有 bug 还是我写的代码有问题?求大佬指点

有头部的流

GET /122879/122879.bat HTTP/1.1
Host: 200.200.89.77:8832
User-Agent: python-requests/2.18.4
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive

HTTP/1.0 200 OK
Server: BaseHTTP/0.6 Python/3.7.0
Date: Fri, 03 Aug 2018 15:10:09 GMT
Content-Length: 252416
Last-Modified: Thu, 14 Sep 2017 05:05:10 GMT

MZ......................@.............................................	.!..L.!This program cannot be run in DOS mode.

$.......PE..L.....:1.................x...^......

没有头部的流

GET /122877/122877.bat HTTP/1.1
Host: 200.200.89.77:8832
User-Agent: python-requests/2.18.4
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive

MZ......................@.............................................	.!..L.!This program cannot be run in DOS mode.

$.......PE..L.....:1.................x...^......

源代码

from http.server import BaseHTTPRequestHandler
from http.server import HTTPServer
import datetime
import os
import shutil

# Listen Address
ADDR = ''
# Listen Port
PORT = 8832

class WebRequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        path = "./testb"
        try:
            f = open(path, 'rb')
        except IOError:
            self.send_error(404, "File not found")
            return None
        self.send_response(200)
        #self.send_header("Content-type", 'image/png')
        #self.send_header('Content-Disposition','attachment; filename=test.exe')
        fs = os.fstat(f.fileno())
        self.send_header("Content-Length", str(fs[6]))
        self.send_header("Last-Modified", self.date_time_string(fs.st_mtime))
        self.end_headers()  
        shutil.copyfileobj(f, self.wfile)
        f.close()

server = HTTPServer((ADDR, PORT), WebRequestHandler)
print("Server start!")
server.serve_forever()

2917 次点击
所在节点    Python
5 条回复
mengzhuo
2018-08-04 08:48:23 +08:00
说明没走到 set header 逻辑里,需要打日志了
axisray
2018-08-04 10:58:34 +08:00
散了散了,Wireshark 有 bug,导致乱序包重组失败,实际是有 HTTP 头的
anyele
2018-08-04 15:53:56 +08:00
首先别怀疑编程语言有 bug
axisray
2018-08-06 10:56:16 +08:00
@anyele 我太相信 wireshark 了
axisray
2018-08-06 10:57:29 +08:00
我总以为这么历史悠久的软件怎么会有 BUG 呢?
他还真有
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=13517

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/476745

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX