我使用python编写了一个简单的http web服务器,但我注意到当我连接到它时,html页面出现在浏览器窗口中,但chrome选项卡中的指示器继续旋转,服务器收到空字符串。这一直持续到我单击“X”以停止加载页面。有人可以解释为什么会发生这种情况以及如何解决这个问题。另外,如果http标题错误或者我错过了重要标题,请告诉我。我发现很难找到有关http标头和命令的信息。
您找到代码here。
控制台输出:
创建套接字
绑定插座
现在正在收听插座
连接127.0.0.1:55146
连接127.0.0.1:55147接收数据:GET / HTTP / 1.1
主持人:localhost
连接:保持活力
接受:text / html,application / xhtml + xml,application / xml; q = 0.9,image / webp, / ; q = 0
0.8
User-Agent:Mozilla / 5.0(Windows NT 6.1; WOW64)AppleWebKit / 537.36(KHTML,like
Gecko)Chrome / 33.0.1750.154 Safari / 537.36
DNT:1
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-GB,en-US; q = 0.8,en; q = 0.6
解析GET命令
客户端请求目录/index.html,HTTP版本1.1
HTML
/index.html
HTTP / 1.1 200 OK
内容类型:text / html;字符集= UTF-8
服务器:Max的Python Web Server / 1.0
Cache-Control:max-age = 600,public
连接127.0.0.1:55148
收到的数据:
收到的数据:
收到的数据:
收到的数据:
答案 0 :(得分:1)
你的错误是你如何看待套接字:
socket.recv
将永远等待来自客户的数据
这里你不需要循环。
但是,您的请求将受recv
param的限制
但是如果你想允许任何尺寸要求,
您应该通过 HTTP 规范来检测数据的结尾。
例如,如果您只等标题,则双线换行意味着它们结束
如我所知,身体的大小(例如 POST 方法)应与Content-length
标头一起传递。
您的问题与此问题相同:link
如果你想制作正确的HTTP服务器,请谷歌搜索HTTP规范。