HTTP 1.1与HTTP 1.0的比较

一、HTTP简介
web浏览器和服务器之类的交互过程必须遵守的协议。HTTP协议是TCP/IP中的一个应用协议。用来协议数据交换过程和数据本身的格式.主要的有HTTP/1.0和HTTP1.1。

 

HTTP/1.0和HTTP/1.1都把TCP作为底层的传输协议。HTTP客户首先发起建立与服务器TCP连接。一旦建立连接,浏览器进程和服务器进程就可以通过各自的套接字来访问TCP。如前所述,客户端套接字是客户进程和TCP连接之间的“门”,服务器端套接字是服务器进程和同一TCP连接之间的 “门”。客户往自己的套接字发送HTTP请求消息,也从自己的套接字接收HTTP响应消息。类似地,服务器从自己的套接字接收HTTP请求消息,也往自己的套接字发送HTTP响应消息。客户或服务器一旦把某个消息送入各自的套接字,这个消息就完全落入TCP的控制之中。TCP给HTTP提供一个可靠的数据传输服务;这意味着由客户发出的每个HTTP请求消息最终将无损地到达服务器,由服务器发出的每个HTTP响应消息最终也将无损地到达客户。我们可从中看到分层网络体系结构的一个明显优势——HTTP不必担心数据会丢失,也无需关心TCP如何从数据的丢失和错序中恢复出来的细节。这些是TCP和协议栈中更低协议层的任务。

 

TCP还使用一个拥塞控制机制。该机制迫使每个新的TCP连接一开始以相对缓慢的速率传输数据,然而只要网络不拥塞,每个连接可以迅速上升到相对较高的速率。这个慢速传输的初始阶段称为缓启动(slow start)。

 

需要注意的是,在向客户发送所请求文件的同时,服务器并没有存储关于该客户的任何状态信息。即便某个客户在几秒钟内再次请求同一个对象,服务器也不会响应说:自己刚刚给它发送了这个对象。相反,服务器重新发送这个对象,因为它已经彻底忘记早先做过什么。既然HTTP服务器不维护客户的状态信息,于是说HTTP是一个无状态的协议(stateless protocol)。

 

二、HTTP1.1和HTTP1.0主要区别
在同一个tcp的连接中可以传送多个HTTP请求和响应.
多个请求和响应可以重叠,多个请求和响应可以同时进行.
更加多的请求头和响应头(比如HTTP1.0没有host的字段).
总之在HTTP/1.0中,大多实现为每个请求/响应交换使用新的连接。在HTTP/1.1中,一个连接可用于一次或多次请求/响应交换,尽管连接可能由于各种原因被关闭。

三、HTTP1.1和HTTP1.0区别详解
一个WEB站点每天可能要接收到上百万的用户请求,为了提高系统的效率,HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。


这也造成了一些性能上的缺陷,例如,一个包含有许多图像的网页文件中并没有包含真正的图像数据内容,而只是指明了这些图像的URL地址,当WEB浏览器访问这个网页文件时,浏览器首先要发出针对该网页文件的请求,当浏览器解析WEB服务器返回的该网页文档中的HTML内容时,发现其中的img图像标签后,浏览器将根据img标签中的src属性所指定的URL地址再次向服务器发出下载图像数据的请求。

显然,访问一个包含有许多图像的网页文件的整个过程包含了多次请求和响应,每次请求和响应都需要建立一个单独的连接,每次连接只是传输一个文档和图像,上一次和下一次请求完全分离。即使图像文件都很小,但是客户端和服务器端每次建立和关闭连接却是一个相对比较费时的过程,并且会严重影响客户机和服务器的性能。当一个网页文件中包含Applet,JavaScript文件,CSS文件等内容时,也会出现类似上述的情况。

 

为了克服HTTP 1.0的这个缺陷,HTTP 1.1支持持久连接,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。一个包含有许多图像的网页文件的多个请求和应答可以在一个连接中传输,但每个单独的网页文件的请求和应答仍然需要使用各自的连接。HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容,这样也显著地减少了整个下载过程所需要的时间。基于HTTP
1.1协议的客户机与服务器的信息交换过程。

可见HTTP 1.1在继承了HTTP 1.0优点的基础上,也克服了HTTP 1.0的性能问题。不仅如此,HTTP 1.1还通过增加更多的请求头和响应头来改进和扩充HTTP 1.0的功能。例如,由于HTTP 1.0不支持Host请求头字段,WEB浏览器无法使用主机头名来明确表示要访问服务器上的哪个WEB站点,这样就无法使用WEB服务器在同一个IP地址和端口号上配置多个虚拟WEB站点。在HTTP 1.1中增加Host请求头字段后,WEB浏览器可以使用主机头名来明确表示要访问服务器上的哪个WEB站点,这才实现了在一台WEB服务器上可以在同一个IP地址和端口号上使用不同的主机名来创建多个虚拟WEB站点。HTTP
1.1的持续连接,也需要增加新的请求头来帮助实现,例如,Connection请求头的值为Keep-Alive时,客户端通知服务器返回本次请求结果后保持连接;Connection请求头的值为close时,客户端通知服务器返回本次请求结果后关闭连接。HTTP 1.1还提供了与身份认证、状态管理和Cache缓存等机制相关的请求头和响应头。

 

原帖地址
http://blog.csdn.net/elifefly/article/details/3964766
http://blog.csdn.net/macrossdzh/article/details/5256565

关于虚拟主机的配置请参见《Tomcat的设置3——设置虚拟主机》http://blog.csdn.net/woshixuye/article/details/18818863

时间: 2024-09-27 15:50:42

HTTP 1.1与HTTP 1.0的比较的相关文章

Spring.Net在Mvc4.0中应用的说明

案例Demo:http://yunpan.cn/cJ5aZrm7Uybi3 访问密码 414b Spring.Net在Mvc4.0中应用的说明 1.引用dll       2.修改Global文件 (SpringMvcApplication)       3.控制器添加属性     4.WebConfig配置   <!--必须紧跟着configuration之后-->   <configSections>     <sectionGroup name="spring

Android 4.0设计规范10大改变

在拜读和翻译了Android design设计指导后,对比Android 4.0与Android2.3及之前版本的app设计指导,总结了Android 4.0设计的10大改变: 1. 导航栏 (详见模式PATTERNS>导航Navigation) 由之前的物理按键导航(返回.菜单.搜索.主页)变成了嵌入屏幕的虚拟按键(返回.主页.最近任务).   左侧为早期有4个物理按键的手机,右侧为新版只有3个虚拟按钮的手机 把菜单项和搜索项从导航栏去掉,把之前通过长按主页键才出现的最近任务直接展示在导航栏中

php中0与空 Null false的区别

  代码如下   <?php $test=0; if($test==''){  echo '<br />在php中,0即为空'; //被输出 } if($test===''){  echo '<br />在php中,0即为空'; //不被输出 } if($test==NULL){  echo '<br />在php中,0即为空'; //被输出 } if($test===NULL){  echo '<br />在php中,0即为空'; //不被输出 }

Asp.net 1.0 升级至 ASP.NET 2.0十个问题总结

asp.net|问题     这几天升级了一下原来的1.1项目,发现了一些问题,总结一下放在这里,也提醒还没有来得及升级或准备升级的朋友,升级的过程中少走弯路,少浪费时间. 1.Global.asax文件的处理形式不一样 转化后将出现错误,在vs2003中Global.asax具有代码后置文件,2.0下, 将代码分离文件移到 App_Code 目录下,以便使其自动变为可通过应用程序中的任意 ASP.NET 页面访问."Code-behind"属性将从 ASAX 文件的指令中删除.vs2

.NET 2.0 基础类库中的范型——其他范型类

其他范型类.NET 2.0 基础类库对范型的应用当然并不仅限于范型集合和 Functional Programming.下面所列的范型类也都有其明确的设计目的和用途. Array在.NET 2.0中,Array 类扩充了对范型编程的支持.当然,Array类本身并不是范型类(出于兼容的考虑),而是提供了一系列支持范型的方法.除了前面提到的 Functional Programming 的支持外,Array 类还对以前很多基于 object 的方法提供了对应的范型版本,这样对值类型可以提高查找和排序

android4.0+怎么捕获home键

问题描述 android4.0+怎么捕获home键 android4.0+怎么捕获home键 不用event方法QQQQQQQQ求77777777777777777777 解决方案 http://blog.sina.com.cn/s/blog_896b1e670100wqcy.html 解决方案二: http://f120412352.iteye.com/blog/1461501 解决方案三: http://blog.sina.com.cn/s/blog_896b1e670100wqcy.htm

安装 OpenLiteSpeed 1.4 + PHP 7.0 设置篇

此篇接上篇 <安装篇>,这里介绍如何在 OpenLiteSpeed 中以 LSAPI 跑 PHP的设置篇.因为两篇文章合起来比较长,所以这里分开写. O喷 LiteSpeed 的设置有点像 IIS 的设置,还是蛮有意思的. 因为根据 LiteSpeed 的官方数据显示,LSAPI 跑 PHP 是 LS 下最高效的,所以这里就不介绍 Fast-CGI 的方式了. 一.访问面板,设置中文 1.登入 WebAdmin ,默认在 7080 端口,例如米饭粑就可以通过 https://www.mf8.b

extjs4.0 应用 新建项目怎么添加包

问题描述 extjs4.0 应用 新建项目怎么添加包 如题所示,网上也百度了一些但是总是有些功能不能用,还有5.0兼容4.0吗?急救....拜谢大神 解决方案 extjs的相对容易配置,你先把java和eclipse的环境配置好,然后把extjs的包放到自己的项目中就行了,高版本未必完全兼容低版本,有可能修改了类名,或者某些方法不用了,你可以试试,正常情况下不会有大问题

怎样在Redhat 9.0下让PHP支持Java类

最近在Linux下的PHP支持Java类,我把调试笔记经过整理总结后写出来,希望对大家今后的调试会有所帮助. 系统环境: Redhat 9.0 Apache-1.3.27 Mysql3.23-54a-11 Php-4.32 j2sdk1.4.1_03 安装配置: 1.mysql使用的是redhat9自带的rpm包,不介绍安装了,jdk的安装也很简单,我们把jdk安装到/usr/java/j2sdk1.4.1_03 并在/etc/profile设置jdk环境参数. 2.编译安装apache tar

图解:PHP 在Windows 2003 Enterprise Server 、IIS6.0 下的安装

enterprise|iis|server|window 有朋友反映在win2000中IIS和PHP工作好好的, 在win2003 enterprise server中,按照2000下的做法PHP不工作.其实在Windows2003下安装也是很简单的,只不过Win2003在IIS6.0的安全方面下了些功夫,所以安装起来要稍费点功夫了. 步骤1,先去www.php.net下在一个安装程序,我是装的是:php-4.2.3-installer.exe,你也可以去找最新的版本,在安装php-4.2.3-