HTTP协议(Hypertext Transfer Protocol)是基于TCP/IP协议的应用层协议,默认采用80端口,是Web开发的最基础最重要的知识。
一、报文结构
1、请求报文
1.1 请求行:
(1) Request Method -- 请求方法
- GET : 请求获取Request-URI所标识的资源
- POST : 在Request-URI所标识的资源后附加新的数据
- HEAD : 请求获取由Request-URI所标识的资源的响应消息报头
- PUT : 请求服务器存储一个资源,并用Request-URI作为其标识
- DELETE : 请求服务器删除Request-URI所标识的资源
- TRACE : 请求服务器回送收到的请求信息,主要用于测试或诊断
- CONNECT : 保留将来使用
- OPTIONS : 请求查询服务器的性能,或者查询与资源相关的选项和需求
(2) Request URL : 请求地址(Uniform Resoure Locator)
(3) 协议版本:格式为HTTP/主版本号.次版本号,如HTTP/1.0和HTTP/1.1
1.2 Request Headers -- 请求头:
(1) Accept : 告诉WEB服务器自己接受什么MIME类型,/ 表示任何类型,type/* 表示该类型下的所有子类型。常见MIME类型如:text/plain; text/html; text/css; application/javascript; application/json;
(2) Accept-Charset : 通知服务端可以发送的编码格式。如:gb2312,utf-8。
(3) Accept-Language:浏览器申明自己接收的语言。如:zh-CN; zh; en-US; en。
(4) Accept-Encoding:浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法。 如:gzip,deflate。
(5) HOST : 接受请求的服务器地址,可以是IP:端口号,也可以是域名。如: Host:www.cnblogs.com。
(6) User-Agent : 发送请求的应用程序名称。如:Chrome/57.0.2987.133
(7) Cache-Control:
请求:
- no-cache : 不要缓存的实体,要求现在从WEB服务器去取
- max-age : 只接受 Age 值小于 max-age 值,并且没有过期的对象
- max-stale : 可以接受过去的对象,但是过期时间必须小于 max-stale 值
- min-fresh:接受其新鲜生命期大于其当前 Age 跟 min-fresh 值之和的缓存对象
- no-store : 不允许缓存
响应:
- public : 可以用 Cached 内容回应任何用户
- private : 只能用缓存内容回应先前请求该内容的那个用户
- no-cache : 可以缓存,但是只有在跟WEB服务器验证了其有效后,才能返回给客户端
- max-age:本响应包含的对象的过期时间
- no-store : 不允许缓存
(8) Connection :
请求:
- close :告诉WEB服务器或者代理服务器,在完成本次请求的响应后,断开连接,不要等待本次连接的后续请求了。
- keepalive : 告诉WEB服务器或者代理服务器,在完成本次请求的响应后,保持连接,等待本次连接的后续请求。
响应:
- close : 连接已经关闭。
- keepalive : 连接保持着,在等待本次连接的后续请求。
- Keep-Alive:如果浏览器请求保持连接,则该头部表明希望 WEB 服务器保持连接多长时间(秒)。例如:Keep-Alive:300
1.3 Request Payload -- 请求正文(可选):
GET请求:没有请求正文,将传输数据附加到URL中。
POST请求: 将传输数据放到请求正文中。
2、响应报文
2.1 响应行:
(1) 协议版本:格式为HTTP/主版本号.次版本号,如HTTP/1.0和HTTP/1.1
(2) 状态码、状态码描述: 状态代码为3位数字。
- 100~199的状态码用于指定客户端应相应的某些动作。
- 200~299的状态码表示成功。
- 300~399的状态码指资源重定向。
- 400~499的状态码指客户端请求出错。
- 500~599的状态码指服务端出错。
常用状态码:
2.2 Response Headers -- 响应头:
(1) Content-Type : 响应正文的类型。如: text/html; text/css; application/javascript; application/json;
(2) Content-Charset : 响应正文的编码格式。如:gb2312,utf-8。
(3) Content-Language:响应正文使用的语言。如:zh-CN; zh; en-US; en。
(4) Content-Encoding:响应正文的编码方法。 如:gzip,deflate。
(5) Content-Length: 响应正文的长度。
2.3 响应正文:
服务器返回给浏览器的数据。