一、 简介
1. HTTP(HyperText Transfer Protocol)
- 是Web的应用层协议,是Web的核心,由两个程序——服务器程序和客户程序实现。
- HTTP定义了Web客户向Web服务器发送请求Web页面的方式,以及服务器向客户传送Web页面的方式。
- HTTP运行在TCP上,由HTTP客户发起一个与服务器的TCP连接,一旦连接建立,该浏览器和服务器进程可通过套接字接口访问TCP。
- HTTP是一个无状态协议,服务器不会保存客户的任何信息。
2. Web
- Web使用了客户/服务器应用程序体系结构,其服务器总是打开的,并且有固定的IP地址,服务于来自数以百万计的不同浏览器的请求
- Web页面由对象组成,一个对象只是一个文件,可以是HTML、JPEG等,每个对象有一个URL(统一资源定位符),由存放文件的服务器主机名和文件路径名组成。
- Web浏览器实现了HTTP的客户端,Web服务器实现了服务端,用于存储Web对象,每个对象由URL寻址。
二、 非持续连接和持续连接
1. 非持续连接
- 每个请求/响应对经一个单独的TCP连接发送,即每发送一次报文就要建立一次TCP连接,涉及“三次握手”,每一个对象经受两倍的RTT交付时延,即一个用于TCP创建,另一个用于请求和接收对象,效率低下。
RTT:往返时间,指一个分组从客户端发送到服务器,然后再返回到客户端所需的时间,包括分组传播时延、分组在中间路由器和交换机上的排队时延以及分组处理时延。
- HTTP/1.0 为非持续连接,可在请求报文头部添加如下字段来选择持续连接,服务器回应时同样需要回复该字段
Connection : close
2. 持续连接
- 所有的请求和响应经过同一个TCP连接发送,且由于管道机制,浏览器可在相同的TCP连接上同时对服务器发出多个请求而不必等待对未决请求的回答,而服务器按序对请求进行响应。
- HTTP/1.1 默认为持续连接,若浏览器和服务器双方发现对方一段时间未有活动,可主动关闭连接。较为规范的做法是客户端发送最后一个请求时在头部添加字段,明确要求服务器关闭连接。
Connection : close
三、HTTP报文格式
1. 请求报文
- 第一行为请求行,包括方法、URL、协议版本字段
- 方法:包括GET,POST,PUT,HEAD,DELETE
GET:最为常用,用于请求服务器的一个对象
POST:提交表单时使用,右图请求数据中包含了用户在表单字段中的输入值
PUT:向服务器上传对象,与POST有些相似,但PUT是幂等性的,即若两个请求相同,后者会把前者覆盖,常用于修改资源,而POST不是幂等性的,后一个请求不会把前一个的覆盖,常用于增加资源
HEAD:类似于GET,服务器收到HEAD请求时不返回请求对象,常用于调试跟踪。
DELETE:用于删除服务器的资源
- 后继行为首部行,其中Host字段指明请求对象所在主机,为Web代理高速缓存所要求;User-agent指明用户代理,以便服务器能有效地为不同类型的用户代理实际发送相同对象的不同版本。
2. 响应报文
- 第一行为状态行,包括版本、状态码、短语
- 其后为首部行,其中Content-Type指明服务器回应的类型,Content-Length指明被发送对象中的字节数
- 实体主体即为请求对象本身,是报文的主要部分