http相关知识(http状态码、Restful、http headers、http缓存策略)

状态码:

  • 1xx:服务器收到请求
  • 2xx:请求成功 200成功
  • 3xx:重定向 301永久重定向; 302临时重定向; 304资源未被修改
  • 4xx:客户端错误 403没有权限; 404资源未找到
  • 5xx:服务端错误 500服务器错误; 504网关超时

Restful API

  • 一种新的API设计方法

  • 传统的API设计:把每个url当作一个功能

  • Restful API设计:把每个url当作一个唯一的资源

http headers

常用的http headers

  • Request Headers中的
    Accept:浏览器可接受的数据格式
    Accept-Encoding:浏览器可接收的压缩算法,如gzip
    Accept-Languange:浏览器可接收的语言
    connection:keep alive 一次TCP连接重复使用
    cookie
    Host: 请求的域名是什么
    User-Agent:简称(UA)浏览器信息
    content-type:发送数据的格式,如application/json

  • Response Headers中的
    content-type:返回数据的格式,如application/json
    content-length:返回数据的大小,多少字节
    content-Encoding:返回数据的压缩算法,如gzip
    Set-Coolie:服务端改cookie

  • 还可以自定义headers

  • 缓存相关的headers
    Cache-Control
    Last-Modified
    Etag

http缓存

什么是缓存:缓存就是数据交换的缓冲区(称作Cache),是存贮数据(使用频繁的数据)的临时地方。

什么是浏览器缓存: 浏览器缓存(Brower Caching)是浏览器对之前请求过的文件进行缓存,以便下一次访问时重复使用,节省宽带,提高访问速度,降低服务器压力。

http缓存机制主要在http响应头部中设定,响应头中相应字段为Expires、Cache-Control、Last-Modified、Etag。

缓存的数据,必须在第一次请求获取到资源后,然后根据返回的信息来告诉如何缓存资源,可能采用的是强制缓存,也可能告诉客户端浏览器是协商缓存,这都需要根据响应的header内容来决定的。

  1. 浏览器在请求某一资源时,会优先获取该资源缓存的header信息,判断是否命中强制缓存(cache-control和expires信息),若命中直接从缓存中获取资源信息,包括缓存header信息;本次请求就避免了和服务器进行通信;

  2. 如果灭有命中强制缓存,浏览器会发出请求到服务器,请求会携带第一次请求返回的有关缓存的header字段信息(Last-Modified/If-Modified-Since和If-None-Match),由服务器根据请求中的相关header信息来对比结果是否协商缓存命中;若命中,则服务器返回新的响应header信息更新缓存中的对应header信息,但是并不返回资源内容,它会告知浏览器可以直接从缓存中获取;否则返回最新的资源内容;

为什么需要缓存:节省资源,节省流量,节省时间,也就是所谓的优化。页面加载更快,网络请求相比CPU计算很慢,为了优化网络请求,所以需要缓存。

哪些资源可以被缓存:静态资源(css,js,img)

http缓存策略(强制缓存+协商缓存)

强制缓存:

image
image
image

Cache-Contral的值

  • max-age 最大缓存时间,以秒为单位(一般半年,一年,两年)

  • no-cache 不用强制缓存

  • no-store 不用服务端缓存

  • no-cache:不使用本地缓存。需要使用缓存协商,先与服务器确认返回的响应是否被更改,如果之前的响应中存在ETag,那么请求的时候会与服务端验证,如果资源未被更改,则可以避免重新下载。

  • no-store:直接禁止游览器缓存数据,每次用户请求该资源,都会向服务器发送一个请求,每次都会下载完整的资源。

  • public:可以被所有的用户缓存,包括终端用户和CDN等中间代理服务器。

  • private:只能被终端用户的浏览器缓存,不允许CDN等中继缓存服务器对其缓存。

协商缓存

  • 协商缓存是服务端缓存策略,不是缓存在服务端
  • 服务器判断客户端资源是否和服务端资源一样,一样就返回304,否则返回200和最新资源

image

资源标识在Response Headers中有两种(两个可以同存,会优先使用Etag)
Last-Modified 资源的最后修改时间 (modified:修改)
Etag资源的唯一标识(一个字符串,类似于人的指纹)

image

image
image

缓存综述!!!

image

image

image

posted @ 2021-04-10 23:19  嘿!那个姑娘  阅读(361)  评论(0编辑  收藏  举报