一、HTTP协议简介
HTTP协议是一个基于TCP的应用层协议,1991发布的HTTP 0.9是第一个版本,主要用于应用数据的传输。
1.1 HTTP URL格式
HTTP使用URL定位网络资源,HTTP URL的格式如下所示:
http://host[:port][path]
- http:表示要通过HTTP协议来定。
- host:服务器的域名或IP地址。
- port:服务在服务器中的端口号,默认为80端口。
-
1.2 HTTP请求方法
HTTP常用请求方法及其作用如下:
GET:请求获取URI标识的资源。
- POST:向URI标识的资源添加新的数据。
- HEAD:请求获取URI标识的资源的响应消息的报头。
- PUT:请求服务器存储一个资源,该资源使用URI作为标识。
- DELETE:请求服务器URI标识的资源。
- OPTIONS:请求查询服务器性能。
二、HTTP协议的主要特点
HTTP协议具有以下特点:
- 支持C/S模式广泛应用于客户端服务器之间的通信。
- 简单快速,客户端向服务器请求数据的时候,只需要传输请求方法和路径。
- 使用灵活,可以传输任意类型的数据,传输类型由Content-Type头进行指定。
- 无连接,每次连接只处理一个请求。
- 无状态,在不使用Cookie的情况下无法保存数据。
- 使用文本作为报文。
三、HTTP协议请求报文
一个HTTP请求报文由请求行、 请求报头、 空行和请求数据4个部分组成
请求行
请求行由请求方法、 URL字段和HTTP协议的版本
比如请求百度首页的数据的请求行为:
GET https://www.baidu.com HTTP/1.1
请求报头
请求数据四、HTTP协议响应报文

HTTP的响应报文由状态行、 响应报头、 响应正文组成。
状态行包括HTTP协议版本、状态码、状态码的描述,请求成功的状态行如下所示:
HTTP/1.1 200 OK
状态码由3位数字组成, 第一个数字定义了响应的类别。
- 100-199: 指示信息, 收到请求, 需要请求者继续执行操作。
- 200-299: 请求成功, 请求已被成功接收并处理。
- 300-399: 重定向, 要完成请求必须进行更进一步的操作。
- 400-499: 客户端错误, 请求有语法错误或请求无法实现。
- 500-599: 服务器错误, 服务器不能实现合法的请求。
常见的状态码:
- 200 OK: 客户端请求成功。
- 400 Bad Request: 客户端请求有语法错误, 服务器无法理解。
- 401 Unauthorized: 请求未经授权, 这个状态码必须和WWW-Authenticate报头域一起使用。
- 403 Forbidden: 服务器收到请求, 但是拒绝提供服务。
- 500 Internal Server Error: 服务器内部错误, 无法完成请求。
503 Server Unavailable: 服务器当前不能处理客户端的请求, 一段时间后可能恢复正常。
五、HTTP协议报头
5.1 通用报头
Date:表示消息产生的时间。
- Connection: 允许发送指定连接的选项。 例如指定连接是连续的; 或者指定“close”选项, 通知服务
器, 在响应完成后, 关闭连接。
Cache-Control: 用于指定缓存指令, 缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现) , 且是独立的(一个消息的缓存指令不会影响另一个消息处理的缓存机制) 。
5.2 请求报头
请求报头通知服务器关于客户端请求的信息。 典型的请求报头如下所示。
Host: 请求的主机名, 允许多个域名同处一个IP地址, 即虚拟主机。
- User-Agent: 发送请求的浏览器类型、 操作系统等信息。
- Accept: 客户端可识别的内容类型列表, 用于指定客户端接收哪些类型的信息。
- Accept-Encoding: 客户端可识别的数据编码。
- Accept-Language: 表示客户端支持的语言。
- Connection: 允许客户端和服务器指定与请求/响应连接有关的选项。 例如, 这时为Keep-Alive则表示保持连接。
Transfer-Encoding: 告知接收端为了保证报文的可靠传输, 对报文采用了什么编码方式。
5.3 响应报头
用于服务器传递自身信息的响应。 常见的响应报头如下所示。
Location: 用于重定向接收者到一个新的位置, 常用在更换域名的时候。
Server: 包含服务器用来处理请求的系统信息, 与User-Agent请求报头是相对应的。
5.4 实体报头
实体报头用来定义被传送资源的信息, 其既可用于请求也可用于响应。 请求和响应消息都可以传送一
个实体。 常见的实体报头如下所示。Content-Type: 发送给接收者的实体正文的媒体类型。
- Content-Lenght: 实体正文的长度。
- Content-Language: 描述资源所用的自然语言。
- Content-Encoding: 实体报头被用作媒体类型的修饰符。 它的值指示了已经被应用到实体正文的附加内容的编码, 因而要获得Content-Type报头域中所引用的媒体类型, 必须采用相应的解码机制。
- Last-Modified: 实体报头用于指示资源的最后修改日期和时间。
- Expires: 实体报头给出响应过期的日期和时间。
