1、什么是http线程
一般情况下,http请求都是很有顺序的发出去的,只有当前这个请求的响应被完全接收到才会发生下一个请求。由于网络延迟和带宽的限制,下一个请求被服务器接收到之前会产生一个显著的延迟。
HTTP/1.1让多个http请求写在一个socket而不用去等待对应的响应,然后请求发送方等待响应按照发出去请求的顺序返回来。这样在发很多请求的时候在页面加载时间方面会有很显著的改善,尤其是有一些高延迟的连接。
线程同样可以减少tcp/ip数据包的数量,一个典型的在536至1460 bytes范围内的MSS(最大字段的大小),它可以装好几个http请求到一个tcp/ip数据包里。减少页面加载需要的数据包的数量对整个网络都是有利的,更少的数据包自然能减轻ip路由器和网络的负担。
符合HTTP/1.1的服务器需要支持线程,这并不意味着服务器一定要用pipeline的方式回应,但是他们必须保证当一个客户端选择用pipeline请求时,服务器不会出错。这显然会引入一个新的潜在的非致命性的bug,因为没有大众的浏览器支持线程。
2、什么时候应该用线程请求
只有idempotent可以用线程,例如get和head请求,put和post请求不能用线程,第一次连接也不能用线程,因为不能确定服务端或者代理是否支持HTTP/1.1。因此只有在重用一个已经存在的keep-alive连接时才可以用线程。
3、多少个请求的时候应该用线程
如果这个连接过早的被关闭,将很多请求放到线程里代价是昂贵的,因为我们会浪费这些写请求的时间,在新的请求中不得不重写一遍。此外,一个比较长的线程,如果早一点的请求要很长的时间去完成, 会产生用户可以感知到的延迟。HTTP/1.1并没有明确说明一个线程中理想的请求数,但是它给了个限制,每台服务器不要有超过两条keep-alive的连接。显然,它依赖于应用程序。鉴于以上两种原因,浏览器可能不会想要太长的线程,可能是合适的值,但是仍然有待检验。
4、如果一个请求取消会发生什么
如果一个请求被取消了,那就意味着整个线程被取消吗?或者意味着这个被取消的请求的响应简单的被丢弃,以免线程中的其他请求被迫重复请求一遍?答案取决于以下几个因素:被取消的请求的响应未被接受部分的大小。一个简单的方法就是取消这个线程然后重新发送所以的请求。这个是唯一的方法因为所以的请求都是idempotent。
5、如果一个连接失败会发生什么
如果一个连接失败了或者在服务器下载一个线程响应的中途被丢弃,浏览器会重新发送丢失的请求。这种情况可以简单的处理,用和上面那种取消的情况一样的方法
原文:http://www-archive.mozilla.org/projects/netlib/http/pipelining-faq.html
分享到:
相关推荐
多线程控制 线程池模式 HTTP线程 用户点击数量控制在一个线程池模式下
多线程控制、线程池模型、HTTP线程.rar
libevent 多线程 HTTP post服务器
http多线程 http多线程http多线程http多线程http多线程http多线程http多线程 http多线程
易语言多线程http下载模块源码,多线程http下载模块,回调1,回调2,Call,HTTP下载处理_1,HTTP下载处理_2,多线程_HTTP下载_开始,多线程_HTTP下载_停止,多线程_HTTP下载_暂停,多线程_HTTP下载_继续,...InternetOpen,...
资源为博客实例代码:http://blog.csdn.net/lmj623565791/article/details/26994463 有问题博客中留言
用Java编写的HTTP多线程下载工具,Java课程设计
http多线程下载 可以断点续传 可以控制暂停继续 添加网络资源的url即可
http://blog.csdn.net/morewindows/article/details/8646902 配套程序 在《秒杀多线程系列》的前十五篇中介绍多线程的相关概念,多线程同步互斥问题《秒杀多线程第四篇一个经典的多线程同步问题》及解决多线程同步...
mongoose v6.15版本,多线程http——server,自己从GitHub上下载的c源码,然后再vc6里面改成c++工程,线程数量可设
VC++的HTTP服务器多线程下载,亲自试验可以运行,适合初学者学习
c#实现unity下可用的http多线程下载。主要是WWW接口的bundle函数不好用,而且性能也不高。支持多线程。支持单个文件和多个文件下载
C#多线程下载C#多线程下载C#多线程下载C#多线程下载C#多线程下载C#多线程下载C#多线程下载
多线程HTTP 服务器。能在INTERNET上下载浏览本地文件
1、基于mongoose 6.7实现的http server 2、支持多线程(本项目使用vs2008编译) 3、附带mongoose6.7版本源代码,6.7以上的版本,多线程实现方式与现在不一样)
详细介绍基于HTTP协议的多线程下载工具的原理、实现和应用
VC HTTP多线程与断点续传下载示例
qt多线程下载文件的Demo,支持http协议,支持多任务下载
资源介绍:。易语言多线程http下载模块源码例程程序调用API函数实现...模块实现了多线程_HTTP下载_开始,多线程_HTTP下载_继续,多线程_HTTP下载_暂停,多线程_HTTP下载_停止。资源作者:。资源界面:。资源下载:。