HTTP协议相关
状态码
1xx
:指示信息-表示请求已接收,继续处理2xx
:成功-表示请求已被成功接收3xx
:重定向-要完成请求必须进行更进一步的操作4xx
:客户端错误-请求有语法错误或请求无法实现5xx
:服务器错误-服务器未能实现合法的请求
常见的http状态码
200
:客户端请求成功206
:客户发送带有range
头的GET请求,服务器完成了它301
:重定向(永久)302
:重定向(临时)304
:资源未被修改,有缓存403
:请求被拒绝404
:资源未找到500
:服务器错误504
:网关超时
HTTP方法
- GET:获取资源
- POST:传输资源
- put/patch:更新资源
- DELETE:删除资源
- HEAD:获得报文首部
Restful API
- 传统的API设计:把每个url当做一个功能
- restful API:把每个url当做一个唯一资源
http headers
Request Headers
Request Header | 说明 |
---|---|
Accept | 浏览器可接收的数据格式(如:*/*) |
Accept-Language | 客户端接收的语言类型(如:zh-CN,en-US) |
Connection | 维护客户端和服务端的连接关系(如:Keep-Alive) |
Host | 连接的目标主机和端口号(如:localhost:8080) |
User-Agent | 客户端版本号的名字 |
Accept-Encoding | 客户端能接收的压缩数据的类型(如:gzip) |
Cookie | 客户端暂存服务端的信息 |
Content-type | 发送数据的格式,get请求没有(如:application/json) |
Response Headers
Response Headers | 说明 |
---|---|
Content-Type | 服务端发送的类型及采用的编码方式(如:text/html; charset=utf-8) |
Content-Encoding | 服务端能够发送压缩编码类型(如:gzip) |
Content-Length | 服务端发送的压缩数据的长度(如:128) |
Set-Cookie | 服务端发送到客户端的暂存数据 |
Cache-Control | 缓存相关 |
Last-Modified | 缓存相关 |
Etag | 缓存相关 |
HTTP 缓存
概念
:通过复用以前获取的资源,可以显著提高网站和应用程序的性能。Web 缓存减少了等待时间和网络流量,因此减少了显示资源表示形式所需的时间。通过使用 HTTP缓存,变得更加响应性。
哪些文件可以被缓存
:静态资源(js、css、img)
强制缓存
强制缓存
就是直接从浏览器缓存查找该结果,并根据结果的缓存规则来决定是否使用该缓存的过程。
控制强制缓存的字段分别是**Expires
和Cache-Control
**,其中Cache-Control
优先级比Expires
高。
Cache-Control
public
:所有内容都将被缓存(客户端/代理服务器/CDN等)private
:只有客户端可以缓存,Cache-Control
默认值no-cache
:客户端缓存内容,但是是否使用缓存则需要经过协商缓存来验证决定no-store
:所有内容都不会被缓存,即不使用强制缓存,也不使用协商缓存max-age=xxx
:缓存时效,在缓存过期后,需要重新向服务器发起请求
协商缓存
协商缓存
就是强制缓存失效后,浏览器携带缓存标识向服务器发起请求,有服务器根据缓存标识决定是否使用缓存的过程。
-
服务器端缓存策略
-
服务器判断客户端资源,是否和服务器端资源一样
-
一致则返回304,否则返回200和最新的资源
控制协商缓存的字段分别有:
Last-Modified/If-Modified-Since
Etag/If-None-Match
两者区别:
- 会优先使用Etag
- Last-Modified只能精确到秒级,如果在一秒内多次修改服务器资源,则不能保证最新资源加载
- 如果资源被重复生成,而内容不变,在Last-Modified中标识为需要重新加载,但是Etag可以标识资源内容一致,无需服务端加载。
http缓存流程
首次请求
后续请求
浏览器刷新操作,产生不同的缓存策略
- 正常操作(链接跳转、url输入):强制缓存有效,协商缓存有效
- 手动刷新(浏览器f5):强制缓存失效,协商缓存有效
- 强制刷新(Ctrl+f5):强制缓存失效,协商缓存失效