应用层协议------HTTP
一.概况
Web 的应用层协议是超文本传输协议(HyperText Transfer Protocol,HTTP),它是Web的核心 。HTTP协议由两部分程序实现:一个客户机程序和一个服务器程序,他们运行在不同的端系统中,通过交换HTTP报文进行会话,HTTP定义了这些报文的格式以及客户机和服务器是如何进行报文交换的。
HTTP使用TCP作为它的支撑运输层协议,一旦客户机发送了一个请求报文,该报文就“脱离客户机控制”并“进入TCP控制”。
服务器向客户机发送被请求的文件时,并不存储任何关于该客户机的状态信息,所以说HTTP是一个无状态协议。
二.非持久连接和持久连接
客户机/服务器的交互运行于TCP协议之上时,如果每个请求/响应是经一个单独的TCP连接发送,该应用程序被称为使用非持久连接,如果所有的请求和响应经由相同的TCP连接发送,该应用程序被称为使用持久连接;
1.非持久连接
每次从服务器发送一个对象到应用程序的时候,断开TCP连接,再次传输的时候再次建立连接。
每次传输的时候可以设置浏览器控制并行度,如果并行度设为1,则为串行。
一个小分组从客户机到服务器再回到客户机所花费的时间称为往返时间RTT,粗略的讲总的响应时间就是两个RTT加上服务器传输HTML文件的时间。
2.持久连接
必须为每一个请求的对象建立和维护一个全新的连接,并且对每个这样的连接,在客户机和服务器都要分配TCP的缓冲区和变量。
HTTP默认使用了流水线方式的持久连接。
三.HTTP报文格式
1.HTTP请求报文
下面是一个典型的HTTP请求报文:
GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Connection:close
User-agent:Mozilla/4.0
Accept-language:fr
第一行为请求行,包含方法字段(GET,POST,HEAD,PUT,DELETE),URL字段,HTTP协议版本字段
其余行为手首部行,第二行定义目标所在的主机
第三行定义了是否使用是否使用持久连接,要求发送完对象立即关闭连接
第四行定义了向服务器发送请求的浏览器类型
第五行定义了那种语法版本
方法字段解释:GET从服务器请求资源,HEAD只发送请求但是不会返回请求的对象,DELETE删除,PUT也用于应用程序向服务器上传对象
2.HTTP响应报文
HTTP/1.1 200 OK
Connection:close
Date:Thu,03 Jul 2003 12:00:15 GMT
Server:Apache/1.3.0(Unix)
Last-Modified:Sun,6 May 2007 09:23:24
Content-Length:6821
Content-Type:text/html
(data data data data...........)
第一行为状态行,其余为首部行,然后是实体主体,状态行指示服务器使用的协议是HTTP1.1,服务器状态码为200,状态为OK
第二行为告诉报文发送后关闭了该TCP连接
第三行服务器产生并发送该响应报文的日期和时间,不是对象创建或者最后修改的时间,而是服务器查到这个对象并发送相应报文的时间
第四行为使用的web服务器信息
第五行为对象创建和最后修改的时间
第六行为发送对象的字节数
第七行为指示实体主体的对象是HTML文本
相应状态码:
200 (OK/正常)
301 (Moved Permanently)
400 (Bad Request/错误请求)
401 (Unauthorized/未授权)
403 (Forbidden/禁止)
404 (Not Found/未找到)
405 (Method Not Allowed/方法未允许)
四.用户与服务器的交互:cookie
Web服务器希望能识别用户,把用户身份和内容关联起来;
组成部分:
1.在HTTP响应报文中有一个首部行
2.在HTTP请求报文中有一个cookie首部行
3.在用户端系统中保留有一个cookie文件,由用户的浏览器管理
4.在web站点有一个后端数据库
五.Web缓存
Web缓存器也叫代理服务器,它是能够代表初始Web服务器来满足HTTP请求的网络实体。Web缓存器有自己的磁盘存储空间,并在该存储空间中保存最近请求过的对象的拷贝。Web缓存器可以大大减少对客户机请求的响应时间,可以大大减少一个机构内部与因特网接入链路的通信量;条件GET方法允许缓存器证实它的对象是最新的,方法GET方法有两个组成条件
1.请求报文中使用GET方法;
2.请求报文包含一个If-modified-since:首部行