一个WEB站点每天可能要接收到上百万的用户请求,为了提高系统的效率,HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。但是,这也造成了一些性能上的缺陷,例如,一个包含有许多图像的网页文件中并没有包含真正的图像数据内容,而只是指明了这些图像的URL地址,当WEB浏览器访问这个网页文件时,浏览器首先要发出针对该网页文件的请求,当浏览器解析WEB服务器返回的该网页文档中的HTML内容时,发现其中的<img>图像标签后,浏览器将根据<img>标签中的src属性所指定的URL地址再次向服务器发出下载图像数据的请求,如图3.3所示。
图3.3
显然,访问一个包含有许多图像的网页文件的整个过程包含了多次请求和响应,每次请求和响应都需要建立一个单独的连接,每次连接只是传输一个文档和图像,上一次和下一次请求完全分离。即使图像文件都很小,但是客户端和服务器端每次建立和关闭连接却是一个相对比较费时的过程,并且会严重影响客户机和服务器的性能。当一个网页文件中包含Applet,JavaScript文件,CSS文件等内容时,也会出现类似上述的情况。
为了克服HTTP 1.0的这个缺陷,HTTP 1.1支持持久连接,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。一个包含有许多图像的网页文件的多个请求和应答可以在一个连接中传输,但每个单独的网页文件的请求和应答仍然需要使用各自的连接。HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容,这样也显著地减少了整个下载过程所需要的时间。基于HTTP 1.1协议的客户机与服务器的信息交换过程,如图3.4所示。
图3.4
可见,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缓存等机制相关的请求头和响应头。
Accept-Language
Accept-Language头字段用于指定客户机期望服务器返回哪个国家语言的文档,可以指定多个以逗号分隔的国家语言。对于一些WEB站点,可以根据用户所使用的浏览器国家语言版本的不同,分别返回该国家语言的网页文档。例如,使用中文的IE浏览器访问www.google.com站点时,服务器返回的是使用中文语言的网页文件。单击IE浏览器的“工具”à“Internet选项”菜单,在打开的“Internet选项”对话框中,单击“语言”按钮,在打开的“语言首选项”对话框中添加英语,并将其上移到语言列表中的第一个位置,
图3.14
设置好语言首选项后,再次访问www.google.com站点,这时服务器返回的是使用英语的网页文件。上面的实验结果很可能会受到google站点策略调整和Cookie的影响,例如,作者在编写本书的初稿时,按照上面的操作,看到了预期的效果,但等到作者几个月后再次校稿时,即使将英语设置成了语言首先项,但所看到的结果却仍然是中文网页。这可能是由于英语已成为了国际通用语言的原因,google对语言首选项设置成英语的情况进行了忽略吧!如果把语言首选项设置成日语后,服务器可以返回日语的网页文件。
在WEB服务器上实现上述功能的原理非常简单,因为,IE浏览器会根据“语言首选项”对话框中的语言列表,生成相应的Accept-Language请求头,例如,
Accept-Language: en-gb,zh-cn
WEB服务器只要检查Accept-Language请求头中的信息,按照其中设置的国家语言的先后顺序,就知道应该返回哪种国家语言的网页文档给浏览器。如果WEB服务器不能返回位于Accept-Language设置值前面的国家语言的网页文档时,WEB服务器将返回后面的国家语言的网页文档。关于各个国家语言的名称信息,例如,中国是zh-cn,可以参阅RFC 1766,其实,只要在图3.14中添加进某个国家的语言,显示在中括号里面的内容就是这个国家语言的名称。
:动手体验:Accept-Language头字段的作用
(1)在命令行窗口中执行telnet www.google.com 80,在成功连接后启动的telnet程序窗口中,输入如下几行内容:
GET / HTTP/1.1
Host:
Accept-Language: en-us,zh-cn
<空行>
可以看到google返回的正文部分是英文字符的网页文档。省略上面的Accept-Language字段部分,google默认返回的正文部分也是英文字符的网页文档。
(2)重新连接上google站点,在成功连接后启动的telnet程序窗口中,输入如下几行内容:
GET / HTTP/1.1
Host:
Accept-Language: zh-cn
<空行>
可以看到google返回的正文部分是中文字符的网页文档。
【转】http://blog.csdn.net/zhangxiaoxiang/article/details/765082
相关推荐
张孝祥老师,作为传智播客的一位资深讲师,以其丰富的教学经验和专业技能,为我们详细剖析了HTTP协议的核心概念和实际运用。 首先,HTTP协议是基于TCP/IP通信协议来传输数据的,它的主要任务是在万维网上传输超文本...
【描述】中的“传至博客张孝祥老师的经典”可能是指张孝祥老师在传智播客平台上的课程内容,这些内容被整理成了一套系统的Java学习资料,特别适合那些已经掌握了编程基础知识,想要深入学习Java技术的学员。...
总结,张孝祥老师的HTTP协议详解课程涵盖了HTTP的基础概念、请求与响应机制、方法、状态码、头部字段等内容,对于理解和应用HTTP协议具有重要指导意义。通过深入学习,我们可以更好地理解和优化网络应用,提升用户...
【张孝祥老师书籍源码(全)】这个资源包含了张孝祥老师的javaweb和javascript书籍中的源代码,这是一份非常宝贵的编程学习材料。张孝祥老师在IT教育领域有着深厚的造诣,他的书籍深入浅出,是许多初学者入门和进阶的...
张孝祥老师的课程特别注重理论与实践的结合,通过源代码和配套PPT,使学习者能够更直观地理解和应用所学知识。源代码部分涵盖了各种核心概念,如面向对象编程、数据结构、异常处理、多线程、网络编程等,这些都是...
张孝祥老师讲解java的多线程的配套ppt,很实用的
本文将根据张孝祥老师提供的《Java面试试题》中的内容进行深入解析,旨在帮助读者更好地准备Java相关的面试。 #### 关键知识点梳理 ##### 1. 学习方法与职业规划 - **学习方法**:在IT领域,尤其是Java开发中,...
此外,张孝祥老师还讲解了HTTP协议的版本迭代,从HTTP/1.0到HTTP/2的改进,包括二进制分帧、多路复用等技术,以及最新的HTTP/3对QUIC协议的采纳,旨在解决HTTP/2的延迟问题。 最后,课程可能涵盖了HTTPS,即HTTP...
张孝祥老师的课程详细讲解了Struts2的基础和最新特性。 首先,开发Struts2应用需要依赖一系列的JAR文件,这些JAR可以从Apache Struts的官方下载页面获取。例如,struts-2.x.x-all.zip包含了所有必要的库。核心库...
张孝祥老师的教程聚焦于提升这些基础技能,旨在帮助学员深入理解Java语言的核心概念,并为应对面试做好充分准备。 在Java的基础学习中,我们首先会接触到的是Java的语法特性,这包括但不限于: 1. **变量与数据...
张孝祥老师的讲课笔记强调了Windows程序设计与传统的DOS方式有着本质的不同,尤其体现在程序运行机制上。Windows采用了事件驱动的模式,这种模式下,程序的执行不是线性顺序的,而是由外部事件触发的。当用户操作,...
张孝祥老师在书中详细介绍了CSS的选择器、属性和值,如何控制字体、颜色、背景,以及页面布局的技巧。读者将学习到盒模型、定位、浮动、响应式设计等核心概念,使网页设计达到美观且适应不同设备的需求。 ...
Struts是Apache软件基金会 Jakarta项目下的一个开源框架,主要用于构建基于Java的企业级Web应用程序。...在学习过程中,结合张孝祥的视频教程和源代码,能够更直观地看到理论与实践的结合,加深对Struts框架的理解。
张孝祥JavaWEB课堂PPT同步教程,HTTP、Request的应用、Response引用。
张孝祥老师会讲解如何使用JDBC连接数据库,进行SQL查询,以及事务管理。此外,还可能涉及流行的数据库管理系统,如MySQL或Oracle,以及ORM框架,如Hibernate或MyBatis,它们能简化数据库操作,提高开发效率。 随着...
#### 内存模型与垃圾回收 Java内存管理是面试中经常涉及的话题之一,它主要包括堆(Heap)和栈(Stack)两个部分。其中,堆是用来存放对象实例的地方,而栈则是用来存放基本数据类型以及对象引用的地方。 - **堆...
在Java编程领域,张孝祥老师是一位备受尊重的专家,他的教学材料往往富含深度与实践性。"Java 精讲代码"是张孝祥老师多年编程经验的结晶,通过具体的代码实例,深入浅出地讲解了Java语言的核心概念、最佳实践以及...
配套视频: 黑马程序员张孝祥高新技术 https://www.bilibili.com/video/av7717207
详细的java高级视频目录,适合初学者打好基础,赞美张孝祥老师。
在张孝祥的JAVA课堂中,他详细讲解了HTTP协议的基础知识,这对于我们理解网络通信至关重要。 首先,HTTP是一个基于TCP/IP协议的应用层协议,它的主要功能是在Web浏览器和Web服务器之间传输HTML文档和其他类型的数据...