计算机网络 HTTP协议
一、HTTP协议介绍
HTTP协议由两个部分实现,他们运行在不同的端系统中(一个客户机程序,一个服务器程序),通过交换HTTP报文,进行会话。Web浏览器实现了HTTP协议的客户机端,即浏览器是Web应用的用户代理;Web服务器实现了HTTP的服务器端。
每个URL地址由两部分组成:存放对象的服务器主机名和对象(所请求资源)的路径名。
HTTP使用TCP作为底层运输协议。HTTP客户机先发起一个与服务器的TCP连接,一旦建立连接,浏览器和服务器进程就可以通过套接字访问TCP(TCP为HTTP提供一个可靠的数据传输服务)。
HTTP服务器不保存关于客户机的任何信息,所以HTTP是无状态协议。
二、HTTP报文
1、HTTP请求报文
- 请求行(request-line): 方法——URL——HTTP协议/版本
- 请求头(headers): 请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息。
- 空行(blank line)
- 请求正文(request-body):使用GET方法,正文为空;POST方法,会有正文(提交表单),此时正文为用户的输入值;HEAD类似GET,服务器会对此进行响应,但是不返回请求对象(可用于故障跟踪)。
/*典型的HTTP请求报文*/ /*请求方法为GET,所以没有请求主体*/ GET /somedir/page.html HTTP/1.1 Host:www.someschool.edu Connection:close User-agent:Mozilla/4.0 Accept-language:fr
2、HTTP响应报文
- 状态行(status-line): 协议版本(HTTP Version)——状态码(Status Code)——短语(Reason Phrase)
- 响应头(headers):
- 空行(blank-line)
- 响应正文(response-body):
/*上述请求的响应报文*/ //状态行 HTTP/1.1 200 OK //下面是响应首部行 //告诉客户机在报文发送完后关闭了该TCP连接 connection:close Date:Thu,03 Jul 2003 12:00:15 GMT Server:Apache/1.3.0(Unix) //对象创建或最后修改的日期和时间 Last-Modified:Sun, 5 May 2003 12:23:24 GMT //表明被发送对象的字节数 Content-Length:6821 //表明实体中的对象是HTML文本 Content-Type:text/html (data data data data ...) /*常见的状态码和短语*/ /* 200 OK:请求成功,信息包含在返回的响应报文中 301 Mover Permanently:请求的对象已经被永久转移了,新的URL在响应报文的Location:首部行中指定。 400 Bad Request:一个通用差错代码,表示该请求不能被服务器解读。 404 Not Found:被请求的文档不在该服务器上。 505 HTTP Version Not Supported:服务器不支持请求报文使用的HTTP协议版本 */
另一个请求报文:
HTTP/1.1 200 OK Date: Sat, 31 Dec 2005 23:59:59 GMT Content-Type: text/html;charset=ISO-8859-1 Content-Length: 122 <html> <head> <title>Wrox Homepage</title> </head> <body> <!-- body goes here --> </body> </html>
3、浏览器和响应器(包括缓存服务器)都可以向请求报文或响应报文中的头部插入信息,具体插入哪些信息和诸多因素有关。
三、用户与服务器交互——cookie
HTTP服务器是无状态的,即它不保存关于客户机的任何信息。cookie技术则实现了对用户信息的跟踪。
1、cookie技术由四个部分组成:
(1)HTTP响应报文中有一个cookie首部行;
(2)HTTP请求报文中有首部行;
(3)用户端系统中保留有一个cookie文件,由浏览器管理;
(4)在Web站点有一个相关的后端数据库(记录用户信息)
2、cookie如何被使用
- 浏览器访问使用cookie技术的网站,如电商,发送请求;
- web服务器收到请求,将会为用户产生一个唯一的识别码,并以次为索引在它的后端数据库产生一个项;
- 接着,用一个包含set-cookie(识别码)首部行的响应报文发送给浏览器;
- 浏览器收到报文,在它管理的特定cookie文件中添加记录:服务器主机名和识别码
- 此后的每一个请求,浏览器都会从cookie文件中获取同网站的识别码,放入报文头
四、Web缓存
Web缓存服务器,也叫代理服务器,能够代表初始服务器满足HTTP请求的中间服务器。它自己的磁盘存储空间,保存最近请求过的资源对象的拷贝。
1、应用过程
(1)浏览器建立到代理服务器的TCP连接,向它里面的对象发送HTTP请求;
(2)代理Server检查本地是否存储了对象的拷贝,若有,直接做出响应;
(3)若没有,代理服务器与对象资源所在的初始Server建立TCP连接,向它发出请求,初始服务器会做出应答。
(4)代理服务器收到了相应的对象,在本地拷贝一份,然后响应转发给浏览器
2、一个问题:存放在代理服务器中的对象的拷贝已经过时了,如何处理?
通过条件GET方法——HTTP协议有一种机制,允许缓存服务器证实它的对象是最新的。
条件GET请求报文——请求报文使用GET方法;请求报文中包含一个if-Modified-Since首部行
因为代理服务器存储的拷贝对象存储了最后的修改时间,所以当这个对象在隔一段时间又被浏览器请求时,缓存器会发送一个条件GET给初始服务器(有上次修改的时间)。然后,初始服务器向代理Server发送一个响应报文,其中的状态码会只是代理服务器是否可以使用拷贝对象。(304 Not Modified)