HTTP协议简介及其工作原理
1.HTTP的概述
超文本传输协议(HTTP)是万维网应用层的协议,是通过两个程序实现:一个是客户端程序(一般称为浏览器),另一个是服务器(常称Web服务器)。这两个通常运行在不同的主机上通过交换HTTP报文来完成网页请求和响应。并且HTTP定义了报文的结构和客户/服务器之间交换报文的规则。
2. HTTP的工作流程
浏览器可以向web服务器发送请求并显示收到的网页,当用户在浏览器地址栏中输入一个URL或点击一个超连接时,浏览器就向服务器发出了HTTP请求,该请求被送往由URL 指定的WEB服务器,WEB服务器接收到请求后,进行相关文档的检索并以HTTP规定的格式送回所要求的文件或其他相关信息,再由用户计算机上的浏览器负责解释和显示。
在HTTP协议中,由于WEB服务器在发送用户要求的文档过程中,并不储存任何有关客户端的状态信息。如果某个客户端在几秒钟内两次要求同一文档,服务器绝对不会认为不合理,因为它根本不记得用户端曾经来访过,因此HTTP 不维持客户端状态,故它又被称为无状态协议。
3. HTTP运作过程中的连接
3.1连接过程说明
假设某个网页有10个JPFG图像,总共11个对象存在同一个服务器中,该网页的基本文档形式URL为:
/somedepartment/home.index
当采用HTTP/1.0时,WEB服务过程:
⑴.HTTP的客户端启用了对服务器的TCP连接,该服务器的80
号端口(HTTP的默认端口)用来监听来自网络的网络服务请求。
⑵. HTTP的客户端通过第一步建立的链接套接字发送“请求报文”。请求报文中包含了文
档的路径名(/somedepartment/home.index )。
⑶.HTTP服务器通过第一步建立连接套接字收到了该请求报文,从磁盘或内存中查找
/somedepartment/home.index,将文档封存在HTTP的“相应报文”中,并通过先前建立的套接字将该报文送到客户端。
⑷. HTTP服务器告诉TCP断开连接(TCP在客户端完全收到响应报文之前不会断开TCP
连接)。
⑸.当客户端接受完响应报文,本次TCP连接即告结束。到达的报文说明所封装的内容是
HTML基本文件,客户端从响应报文中取出文件,对HTML文件进行解析,从而发现该文件还要引用另外10个JPEG对象。
⑹.针对所有的JPEG对象,需要重复进行前四个步骤。
上述步骤使用的是非坚持连接的的工作模式,由于服务器在每个对象发送后都要关闭TCP连接。由于TCP连接传输一个请求报文和一个响应报文,这样上述例子传送一个网页需要11次TCP连接,效率比较低。由于每个请求的对象建立和维持一个“崭新”的连接,在客户端和服务器端都要为TCP分配缓存并保持TCP变量,这会对同时几百个客户服务端的WEB服务器造成城中负担。
3.2 提高HTTP服务效率的两种方法
⒈从一个客户端同时发送多个TCP连接并列到一个WEB服务器上,即建立“并行”的
TCP连接,目前浏览器可以配置5~10个并行连接,每个连接完成一次HTTP的报文交换,但其没有从根本上解决服务器负担问题。
2.使用持续连接模式,服务器在完成一次HTTP报文交互后继续保持连接,统一客户端
和服务器之间后继的请求和响应报文可以在原来的连接进行。
4.HTTP报文格式
4.1送往服务器的请求报文
下面是一个浏览器发往服务器的请求报文样例:
GET/test/file.hmtl HTTP/1.0
Accept:text/plain
Accept:application/x-html
Accept:application/html
Accept:text/x-html
Accept:text/html
Accept:audio/*
…
Accept:text/x-setext
Accept:*/*
请求报文样例的方法字段一般格式: HTTP-method identifier HTTP-version 解释如下:
HTTP-method :指定HTTP 方法,可以说明对URL 指向的对象进行什么样的操作。该方法常用的有:GET 或POST 可以使用网页中的表单向WEB 服务器传送数据,在请求报文样例中使用get 方法。HEAD :请求一个对向有关的首部信息。
identifier :资源标识符(这里为去掉协议和因特网域名字符串后的URL ,如报文是送往代理服务器的则为整个URL
HTTP-version :目前客户端使用的HTTP 协议版本。
请求报文由两部分组成:Method 字段,它是请求的第一行,指定使用的HTTP 方法和服务器上资源地址;然后HTTP header 字段,他把有关客户端语HTML 文件的解析能力的相关信息传到服务器上。
方法字段包含三个文本字段,中间用空格(SP )或制表符(T ab )分开。
4.2服务器送往客户端的响应报文。
服务器接受来自浏览器的请求时,根据GET , POST 或HEAD 等指定的方法取得来自浏览器的数据或要求,并按ACTION 指定的资源对象进行相应的处理,然后把处理结果传回客户端。有关会话状态 的报文会通过返回浏览器的响应报文的首部传给客户端,与客户端送往请求首部字段一样,响应首部字段也都是有些回车换行结尾的文本行。响应首部的结束也是由仅包含回车换行的一个空行表示,响应数据接在空行后面。
下面是一个服务器响应客户端请求后从服务器放往客户端的响应报文样例: (1) HTTP/1.0 200 OK
(2) Date:Friday,23-Sep-94 16:04:09 GMT (3) Server:NCSA/1.3 (4) MIME-vereoin:1.0 (5) Content-type:text/html
(6) Last-modified:Friday,23-Sep-94 16:03:27 GMT (7) Contentlength:145
(8) [a blank line,containing only CRLF]
Request line 请求报文的一般格式 相应首部信息