python – 将HTTP / 1.1与SimpleHTTPRequestHandler一起使用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 将HTTP / 1.1与SimpleHTTPRequestHandler一起使用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1774字,纯文字阅读大概需要3分钟。
内容图文
![python – 将HTTP / 1.1与SimpleHTTPRequestHandler一起使用](/upload/InfoBanner/zyjiaocheng/816/1c9cc1eeaeff4f31846efcd50c9dab6a.jpg)
当我将HTTP / 1.1与SimpleHTTPRequestHandler一起使用时,加载一个引入其他资源的页面将在第二个资源之后挂起.
这是一个小型的复制品:
from SimpleHTTPServer import SimpleHTTPRequestHandler
from BaseHTTPServer import HTTPServer
class MyRequestHandler(SimpleHTTPRequestHandler):
#protocol_version = "HTTP/1.0" # works
protocol_version = "HTTP/1.1" # hangs
server = HTTPServer(("localhost", 7080), MyRequestHandler)
server.serve_forever()
使用上述服务器,当浏览器尝试加载b.png时,以下HTML将挂起:
<html>
<body>
<img src="a.png">
<img src="b.png">
</body>
</html>
HTTP / 1.1可以与SimpleHTTPServer模块一起使用吗?如果可以,如何使用?请注意,将ForkingMixIn或ThreadingMixIn添加到服务器将允许事情进展,但是,似乎没有任何一个mixin它应该是可能的.
解决方法:
您看到的行为有三个原因:
>默认情况下,BaseHTTPServer.HTTPServer一次只能处理一个请求
>大多数用户代理(浏览器)一次打开与任何给定主机的多个连接
>大多数用户代理使用HTTP 1.1的保持活动功能,并且在收到请求的实体后不立即关闭连接
您看到的是浏览器能够使用它打开到服务器的第一个连接获取所有entities请求.这是页面本身,可能还有一些资源.同时浏览器打开其他连接以获取其余资源,但这些连接无法继续,因为服务器与第一个连接.服务器与第一个绑定的原因是虽然浏览器已经收到使用此连接请求的实体,但它不会立即关闭它,以防它可以在不久的将来被重用以获取更多实体(服务器不会关闭连接它的一面是浏览器指定的HTTP版本1.1并发送了Connection:keep-alive header).只有在第一次连接超时后,服务器才会开始处理下一个等待连接,以便下载其他资源(所有这些资源都是使用此特定连接请求的).如果你等待足够长的时间,浏览器会设法获得所有资源.在Firefox中将network.http.max-persistent-connections-per-server首选项设置为1(而不是默认值6)或在其他浏览器中类似时,可以观察到差异.然后,由于使用相同的连接请求所有资源,所以每次检索都会在没有任何延迟的情况下检索到前一个.
我要感谢freenode.net上#python IRC频道的marienz对这个问题的帮助.
内容总结
以上是互联网集市为您收集整理的python – 将HTTP / 1.1与SimpleHTTPRequestHandler一起使用全部内容,希望文章能够帮你解决python – 将HTTP / 1.1与SimpleHTTPRequestHandler一起使用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。