连接到我的Python网络服务器时页面无限加载
我用Python写了一个简单的HTTP网页服务器,但我发现当我连接到它时,浏览器窗口里会显示HTML页面,但Chrome标签页的加载指示器却一直在转圈,服务器接收到的都是空字符串。这种情况一直持续,直到我点击“X”来停止加载页面。有人能解释一下这是为什么吗?还有,HTTP头部如果有问题或者我缺少重要的头部,请告诉我。我发现关于HTTP头部和命令的信息很难找到。
你可以在这里找到代码。
这是网络标签的图片链接。
控制台输出:
创建了一个Socket
绑定了Socket
Socket现在在监听
与127.0.0.1:55146连接
与127.0.0.1:55147连接接收到的数据:GET / HTTP/1.1
Host: localhost
Connection: keep-alive
Accept: text/html,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, 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
Content-Type: text/html; charset=UTF-8
Server: Max's Python Web Server/1.0
Cache-Control: max-age=600, public
与127.0.0.1:55148连接
接收到的数据:
接收到的数据:
接收到的数据:
接收到的数据:
1 个回答
你的问题在于你对套接字的理解:
socket.recv
会一直等待客户端发送数据。
这里其实不需要用循环。
不过,你的请求会受到 recv
参数的限制。
如果你想允许任意大小的请求,
你需要根据HTTP规范来判断数据的结束。
举个例子,如果你只等待头部信息,两个换行符就表示头部结束了。
而请求体的大小(比如对于POST方法)应该通过 Content-length
这个头部来传递,按照我所知道的。
你的问题和这个问题是一样的:链接
如果你想做一个正确的HTTP服务器,可以去谷歌查一下HTTP规范。