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-SinceEtag/If-None-Match
两者区别:
- 会优先使用Etag
- Last-Modified只能精确到秒级,如果在一秒内多次修改服务器资源,则不能保证最新资源加载
- 如果资源被重复生成,而内容不变,在Last-Modified中标识为需要重新加载,但是Etag可以标识资源内容一致,无需服务端加载。
http缓存流程
首次请求
后续请求
浏览器刷新操作,产生不同的缓存策略
- 正常操作(链接跳转、url输入):强制缓存有效,协商缓存有效
- 手动刷新(浏览器f5):强制缓存失效,协商缓存有效
- 强制刷新(Ctrl+f5):强制缓存失效,协商缓存失效