这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天
今日学习Http的使用指南
- HTTP(Hyper Text Transfer Protocol): 全称超文本传输协议,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
http状态码大全
- 100,接受的请求正在处理,信息类状态码
- 200(成功)服务器已成功处理了请求。
- 302,临时性重定向,表示资源临时被分配了新的 URL
- 303,表示资源存在另一个URL,用GET方法获取资源
- 304,(未修改)自从上次请求后,请求网页未修改过。服务器返回此响应时,不会返回网页内容
- 301,永久性重定向,表示资源已被分配了新的 URL
- 302,临时性重定向,表示资源临时被分配了新的 URL
- 303,表示资源存在另一个URL,用GET方法获取资源
- 304,(未修改)自从上次请求后,请求网页未修改过。服务器返回此响应时,不会返回网页内容
- 400(错误请求)服务器不理解请求的语法
- 401表示发送的请求需要有通过HTTP认证的认证信息
- 403(禁止)服务器拒绝请求
- 404(未找到)服务器找不到请求网页
- 500,(服务器内部错误)服务器遇到错误,无法完成请求
- 503,表示服务器处于停机维护或超负载,无法处理请求
强缓存与协商缓存
浏览器缓存过程
-
浏览器第一次加载资源,服务器返回200,浏览器将资源文件从服务器上请求下载下来,并
把文件、文件的返回时间、response header一并缓存 -
下一次加载资源时,先
比较当前时间和上一次返回200时的时间差,
如果HTTP为1.0时,则用expires判断是否过期
如果HTTP为1.1及其以上时,则查看cache-control,如果值是no-cache,则表示不缓存,则直接去请求数据;如果是max-age,则判断时间差是否大于max-age,若小于max-age,则表示没有过期,命中强缓存,不发请求直接从本地缓存读取该文件;如果时间差大于max-age,则表示资源过期了,则向服务器发送请求,并且header中携带有If-None-Match、If-Modified-Since、Etag值等 -
如果服务器收到的请求头中,有Etag值,
优先根据Etag的值判断被请求的文件有没有做修改,
如果Etag值一致则没有修改,命中协商缓存,返回304,则读取缓存资源;
如果Etag值不一致则有改动,则直接返回新的资源,并带上新的Etag值; -
如果服务器收到的请求头中,没有Etag值,则将
If-Modified-Since和被请求文件的最后修改时间做比对,
如果一致则没有修改,命中协商缓存,返回304;
如果不一致则有修改,则返回新的文件和并在响应头中携带last-modified,下次请求时通过If-Modified-Since携带上last-modified的值;