什么是http
- http ,即Hyper text Transfer Protocol,超文本传输协议;
- 它是一种应用层协议,基于TCP协议;
- 特征:请求,响应,简单可扩展,无状态(意为每次请求都需要重新建立连接,而不会保留上次的连接信息);
发展史
-
http/0.9 ,单行协议;
通过GET请求方式请求服务器数据,响应的一般也为HTML文档。 -
http/1.0 ,构建可扩展性;
增加了Header,有了状态码,支持多种文档类型。 -
http/1.1 ,标准化协议;
链接复用,增加了缓存,内容协商; -
http/2 ,更优异的表现;
产生了二进制协议,压缩了Header,服务器推送; -
http/3 ,即将推出;
协议分析:报文
1.安全的请求类型:get,head,options,这些是不会修改服务器数据的方式。
Indempotent(幂等),同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的,所有安全的请求方式都是幂等的,类型有:get,head,options,put,delete;
2.状态码,常见状态码,1开头表示请求已接受,可以继续处理;2开头表示客户端请求成功;3开头表示重定向,如301表示请求地址变更,请求资源永久转移,302表示请求地址临时变更,304表示走缓存数据;4开头表示客户端错误,如401表示未授权(Unauthorized),403表示用户无权限访问(Forbidden),404表示客户端请求资源不存在(Not Found),也常发生在用户的请求地址输入有误。5开头表示服务器错误,500表示未知错误,504表示请求超时或服务器宕机等原因。
常见请求头
Accept | 接受类型,表示浏览器支持的MIME类型(对服务端返回的Content-Type) |
---|---|
Content-Type | 客户端发送出去的实体内容的类型 |
Cache-Control | 指定请求和响应遵循的缓存机制,如no-cache |
If-Modified-Since | 对应服务端的last-Modified,用来匹配文件是否变动,只能精确到1s之内 |
Expries | 缓存控制,在这个时间内不会请求,直接使用缓存,服务端时间 |
Max-Age | 代表资源在本地缓存多少秒,有效时间内不会请求,而是使用缓存 |
If-None-Match | 对应服务端Etag,用来匹配文件内容是否改变(很精确) |
Cookie | 有cookie并且同域访问时会自动带上 |
Referer | 该页面的来源URL |
Origin | 最初的请求是从哪里发起的(精确到端口),比referer注重隐私 |
User-Agent | 用户客户端的一些必要信息 |
常用响应头
Content-Type | 服务端返回的实体内容的类型 |
---|---|
Cache-Control | 指定请求和响应遵循的缓存机制,如no-cache |
If-Modified | 请求资源的最后修改时间 |
Expries | 应该在什么时候认为文档已经过期,从而不再缓存它 |
Max-Age | 客户端的资源在本地缓存多少秒,开启了Cache-Control后有效 |
Etag | 资源的待定版本的标识符,类似指纹 |
Set-Cookie | 设置和页面关联的Cookie,服务器通过这个头部把cookie传给客户端 |
Server | 服务器的一些相关信息 |
Acess-Control-Allow-Origin | 服务器端允许的请求头部如(*) |
缓存
强缓存
Expires表示时间戳,开启Cache-Control即代表可缓存性,no-cache参数表示协商缓存验证,no-store不使用任何缓存;
max-age:单位s,存储的最大周期,相对于请求的时间;
协商缓存
Etag/If-None-Match:资源的特定版本的标识符,类似于指纹
Last-Modified/If-Modified-Since:最后修改时间