日期:2014-05-16 浏览次数:20793 次
?
?最近一些天来,由于实验室项目开发的需要,自己对HTTP协议进行了比较细致的研究,并结合目前项目进度,成功解决了Ajax的跨域访问问题!
HTTP协议之深入浅出:
?HTTP-Hypertext Transfer Protocol(超文本传输协议),这是我们日常上网接触最多的网络应用层协议之一。有些朋友可能会问,这么个协议有什么值得研究的?非也,作为一个合格的软件开发人员,具备一定的协议分析能力是必要的,也是必须的,而且深入地理解HTTP协议也有助于我们掌握Servlet和Jsp技术!
“HTTP has been in use by the World-Wide Web global information initiative since 1990. This specification defines the protocol referred to as "HTTP/1.1", and is an update to RFC 2068 [33].”
下面,我们来看看Web中常用的术语,这对我们下面深入理解HTTP运行机理很有必要。浏览器(Browser)是Web应用的用户代理,它用于显示所请求的Web页面,并且提供了大量的导航功能和配置属性。因为Web浏览器是实现了HTTP协议的客户端,所以根据不同的上下文环境,我们经常交替使用“浏览器”和“客户机”来称呼它。目前流行的Web浏览器包括Netscape Communicator 和Microsoft Internet Explorer。Web服务器用于存储Web对象(简单的说就是文件,如HTML文件,JPEG文件,GIF文件,Java小程序,声音剪辑文件等),每个对象由URL寻址(通常有两部分组成:存放对象的服务器主机名和对象的路径名)。Web服务器实现了HTTP的服务器端,流行的Web服务器程序有Apache和Microsoft Internet Information Server(IIS)。
简单的讲,HTTP协议定义了浏览器如何向Web站点请求Web页面以及服务器如何响应请求这一过程。它是一种无状态的协议(Stateless),即服务器在向客户机发送响应消息时并不存储客户机的任何状态信息。
截至1997年,基本上所有的浏览器和服务器都实现的是在RFC 1945中定义的HTTP/1.0协议。从1998年开始,一些Web服务器和浏览器开始实现在RFC 2612中定义的HTTP/1.1 。HTTP/1.1协议向后兼容HTTP/1.0协议,它最大的特点是支持持久连接。HTTP使用TCP(而不是UDP)作为底层传输协议。在TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。它不必像HTTP/1.0协议中定义的那样,为每一个请求对象建立和维护一个全新的连接。
持久连接又分为两种方式:非流水线方式(without pipelining)和流水线方式(with pipelining)。在非流水线方式下,客户机只能在前一个响应接收到之后才发出新的请求。在这种情况下,服务器发送完一个对象后,连接处于空闲状态,等待下一个请求的到来,这势必浪费了宝贵的服务器资源。
由于最近一直在做J2EE相关软件开发,所以在本次的研究中,我使用了业界最为流行的轻量级Web容器Tomcat(5.5.25版本)作为Web服务器,至于我前面提到的Apache,它比较适合用PHP等Web程序设计语言开发项目的Web服务器,而IIS则比较适合于Asp,Asp.net项目的Web服务器。当然,Tomcat在处理静态页面时速度显得稍微满了些,不过还好,我们可以讲Tomcat与Apache或者是IIS进行集成,需要的仅仅是一个JK插件(这个插件我还没用过,所以不敢在这妄加评论,等以后项目中使用到了我想自己会认真研究一下,讲心得贴出来与大家分享!)。在这我们还是用到了Telnet客户端软件,这个软件默认是随着Window操作系统一起被装入机器的,唯一需要的是简简单单的一个Dos命令 net start telnet(