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
分享到:
相关推荐
在IT领域,多线程控制、线程池模式和HTTP线程是三个关键概念,尤其在高并发和高性能系统设计中扮演着重要角色。本文将深入探讨这些知识点,并结合实际应用进行阐述。 首先,让我们从多线程控制开始。多线程是指在一...
在IT领域,多线程控制、线程池模型以及HTTP线程是三个核心概念,尤其在服务器端编程和网络通信中至关重要。以下是对这些概念的详细解释: 1. **多线程控制**: 多线程是操作系统提供的功能,允许程序同时执行多个...
在Android和Java应用开发中,基于Http的多线程下载是一项关键的技术,它能显著提升大文件下载的效率,减少用户等待时间,并充分利用设备的计算能力。本篇将深入探讨如何实现这一功能。 首先,我们需要理解多线程...
"libevent 多线程 HTTP post服务器" 指的是一种使用libevent库构建的、支持多线程处理HTTP POST请求的服务器。libevent是一个事件通知库,它提供了一种方法来执行非阻塞I/O操作,这对于高性能网络服务器尤其重要。而...
HTTP多线程下载是一种优化网络资源获取的技术,尤其在处理大文件时,能显著提高下载速度。这种技术基于HTTP协议,通过将一个大文件分割成多个部分,然后使用多个线程同时下载这些部分来实现并行下载。这样做可以充分...
HTTP多线程下载是网络编程中的一个重要概念,尤其在处理大文件下载时,可以显著提高下载效率。在Java中实现这个功能,主要涉及到以下几个关键知识点: 1. **HTTP协议**:HTTP(超文本传输协议)是互联网上应用最...
**基于mongoose实现Http Server(多线程)** 在IT领域,构建HTTP服务器是常见的任务,特别是在Web开发中。本文将详细介绍如何使用mongoose库创建一个支持多线程的HTTP服务器,并探讨相关技术要点。 **mongoose库...
HTTP多线程服务器下载是网络编程中的一个重要概念,主要应用于提高大文件下载的效率和速度。在VC++环境中实现这样的功能,需要理解HTTP协议、多线程编程以及文件I/O操作的基本原理。以下是对这些知识点的详细解释: ...
在C#编程中,实现Http多线程下载是一项常见的任务,尤其在处理大文件或需要提高下载速度的情况下。本文将详细讲解如何利用C# Winform框架实现这一功能,并结合多线程技术提升下载效率。 首先,我们需要理解Http协议...
《使用Winsock实现的HTTP多线程下载程序详解》 在互联网技术日新月异的今天,高效的数据传输成为了一项基本需求。特别是在处理大文件下载时,传统的单线程下载方式往往耗时过长,用户体验不佳。为了解决这个问题,...
在 DELPHI 开发环境中,多线程HTTP下载是一种提高应用程序性能和用户体验的技术。通过将大文件分割成多个部分并同时下载,可以显著减少下载时间,尤其在网络带宽有限的情况下。下面将详细介绍如何使用DELPHI进行多...
在IT领域,多线程HTTP服务器是一个至关重要的概念,它涉及到网络编程、并发处理和服务器架构等多个方面。这里,我们主要探讨的是一个基于多线程技术实现的HTTP服务器,能够支持用户通过Internet远程访问和下载本地...
易语言多线程http下载模块源码,多线程http下载模块,回调1,回调2,Call,HTTP下载处理_1,HTTP下载处理_2,多线程_HTTP下载_开始,多线程_HTTP下载_停止,多线程_HTTP下载_暂停,多线程_HTTP下载_继续,...InternetOpen,...
在v6.15这个版本中,它引入了多线程HTTP服务器的功能,这使得mongoose能够处理更多的并发请求,提升了服务性能。这个项目是在GitHub上开源的,用户可以自行下载源码并进行编译。在描述中提到,有开发者使用VC6...
QT多线程Http源码实现详解 在编程领域,尤其是涉及到网络I/O操作时,多线程技术常常被用来提高程序的并发性能。QT库,一个跨平台的应用开发框架,提供了丰富的多线程支持和HTTP协议处理功能。本文将深入探讨如何在...
1. **线程基础**:线程是操作系统调度的基本单位,一个进程可以包含多个线程。在易语言中,通过创建和管理线程,可以并发地执行多个任务。创建线程的方法是调用“创建线程”命令,每个线程都有自己的执行上下文,...
线程创建和管理 线程创建和管理是多线程编程中一个非常重要的概念,在实际开发中,合理地创建和管理线程可以提高程序的效率和性能。在C#中,线程池和Thread类是两种常用的线程创建和管理方式。 一、线程池...
在Linux操作系统中,开发一款多线程轻量级HTTP服务器是一项技术挑战,它涉及到网络编程、多线程处理以及对HTTP协议的理解。本项目“Linux下多线程轻量级HTTP服务器”旨在实现一个基本的HTTP服务器,能够响应客户端的...