2014-03-30 41 views
0

我使用Python写了一个简单的HTTP Web服务器,但我注意到,当我连接到它的HTML页面出现在浏览器窗口,但铬指标选项卡继续旋转,服务器收到空字符串。这继续下去,直到我点击'X'停止加载页面。有人可以解释为什么会发生这种情况,以及如何解决这个问题。另外,如果http标题错误或者我错过了重要的请告诉我。我发现很难找到有关http头文件和命令的信息。页无限加载

找到代码here

Link to image of network tab

控制台输出:

插槽创建
绑定套接字
插座现在听
跟127.0.0.1:55146
跟127.0.0.1:55147Received数据:GET/HTTP /1.1
主机:本地主机
连接:保持活跃
接受:文/ HTM l,application/xhtml + xml,application/xml; q = 0.9,image/webp,/; q = 0 .8
User-Agent:Mozilla/5.0(Windows NT 6.1; WOW64)为AppleWebKit/537.36(KHTML,像壁虎 )的Chrome/Safari的33.0.1750.154/537.36
DNT:1
接受编码:gzip,紧缩,SDCH
接受语言:EN-GB,EN-US; q = 0.8,连接; q = 0.6



解析GET命令
客户端采用HTTP版本请求的目录/index.html 1.1
HTML
/index.html

回复头:


HTTP/1.1 200 OK
Content-Type:text/html;字符集= UTF-8
服务器:最大的Python的Web服务器/ 1.0
缓存控制:最大年龄= 600,公共


跟127.0.0.1:55148
接收到的数据:
接收到的数据:
接收到的数据:
接收到的数据:

+1

所有的缩进都在你的女巫中错过了,不是吗?我们无法读取没有缩进的Python代码) –

+0

您的浏览器的开发工具的网络标签说什么? – lmc

+0

@vp_arth对不起,我没有意识到在我之前使用的网站上删除了缩进。我已经添加了一个新的链接到不同的网站,保持缩进和语法突出显示。 – icedvariables

回答

1

你的错,你是如何看待插座:

socket.recv将永远等待来自客户的数据

这里不需要循环。
但是,您的请求将受限于recv param。
但是,如果你想允许任何大小的请求,
你应该通过HTTP规范检测数据的结束。

例如,如果您只等待标题,双行换行意味着它们结束。
和身体的大小(例如POST方法)应与Content-length标题传递,因为我知道。

您的问题与此问题相同:link
而谷歌的HTTP规范,如果你想制作正确的HTTP服务器。