这是我参与「第五届青训营 」笔记创作活动的第4天。
本堂课重点内容
本节课介绍了HTTP协议内容和HTTP协议的应用场景。
详细知识点介绍
HTTP基础
从输入网址到展示网页的全过程:
- browser进程处理输入信息
- 浏览器内核发起请求
- 通过Internet到服务器返回响应
- 浏览器内核读取响应
- 浏览器内核进行渲染
协议发展过程
-
HTTP/0.9 单行协议
- 只有GET请求
- 响应只有HTML文档
-
HTTP/1.0 构建可拓展性
- 增加了Header
- 有了状态码
- 支持多种文档类型
-
HTTP/1.1 标准化协议
- 链接复用
- 缓存
- 内容协商
-
HTTP/2 更优异的表现
- 二进制协议
- 压缩header
- 服务器推送
方法总览
方法的特性:
- 安全性:不会修改服务器数据(GET HEAD OPTIONS)
- 幂等性:同样请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的(GET HEAD OPTIONS PUT DELETE)
状态码
- 200:客户端请求成功
- 301:资源被永久转移到了其他URL
- 302:临时跳转
- 401:未授权
- 404:请求资源不存在
- 500:服务器内部错误
- 504:网关或代理服务器无法在规定时间内得到响应
RESTful API
一种API设计风格。REST指的是表现状态转化
- 每个URI代表一种资源
- 客户端和服务器间传递这种资源的某种表现层
- 客户端通过HTTP method对服务器端资源进行操作,实现“表现层状态转化”
其实就是1码1事,和很多公司把成功的状态码都使用200来表示有所不同。
常用请求头
- Accept:接收类型,表示浏览器支持的MIME类型。(关于MIME可以参考计网)
- Content-Type:客户端发送出去实体内容的类型
- Cache-Control:指定请求和响应遵循的缓存机制,如no-cache
- If-Modified-Since:对应服务器端的Last-Modified,用来匹配查看文件变动情况
- Expires:缓存控制,在这个时间内不会请求而是直接使用缓存
- Max-age:资源在本地缓存使用的时间,时间内不会请求,而是使用缓存
- If-None-Match:对应服务器端的ETag,用来匹配文件内容是否改变(非常精确)
- Cookie:由cookie并且同域访问时自动带上
- Referer:页面的来源URL(精确到详细页面地址)
- Origin:请求从哪里发起(只精确到端口),比Referer更尊重隐私
- User-Agent:用户客户端的一些必要信息
常用响应头
- Content-Type:服务端返回的实体内容的类型
- Cache-Control:指定请求和响应遵循的缓存机制,如no-cache
- Last-Modified:资源最后修改时间
- Expires:应该在何时认为文档以及过期从而不再缓存
- Max-age:客户端本地资源应该缓存多少秒,开启Cache-Control后有效
- ETAg:资源的特定版本标识符
- Set-Cookie:设置和页面关联的cookie,服务器通过这个头部将cookie传给客户端
- Server:服务器相关信息
- Access-Control-Allow-Origin:服务器端允许的请求Origin头部
缓存
-
强缓存:不会向服务器发送请求,直接从缓存中读取资源,返回200状态码
- Expires:过期时间,如果设置了时间,则浏览器会在设置的时间内直接读取缓存,不再请求
- Cache-Control:当值设为max-age=300时,则代表在这个请求正确返回时间(浏览器也会记录下来)的5分钟内再次加载资源,就会命中强缓存
- public:指示响应可被任何缓存区缓存
cache-control是http/1.1的头字段,expires是http/1.0的头字段,如果expires和cache-control同时存在,cache-control会覆盖expires,建议两个都写。
-
协商缓存:向服务器发送请求,服务器会根据这个请求的request header的一些参数(If-None-Match,If-Modified-Since)来判断是否命中协商缓存,如果命中,则返回304状态码并带上新的response header通知浏览器从缓存中读取资源
-
Etag/If-None-Match
- Etag是属于HTTP 1.1属性,它是由服务器(Apache或者其他工具)生成返回给前端,用来帮助服务器控制Web端的缓存验证。Apache中,ETag的值,默认是对文件的索引节(INode),大小(Size)和最后修改时间(MTime)进行Hash后得到的。
- 当资源过期时,浏览器发现响应头里有Etag,则再次向服务器请求时带上请求头if-none-match(值是Etag的值)。服务器收到请求进行比对,决定返回200或304
-
Last-Modifed/If-Modified-Since
- Last-Modified是浏览器向服务器发送资源最后的修改时间
- 当资源过期时(浏览器判断Cache-Control标识的max-age过期),发现响应头具有Last-Modified声明,则再次向服务器请求时带上头If-Modified-Since,表示请求时间。服务器收到请求后发现有If-Modified-Since则与被请求资源的最后修改时间进行对比(Last-Modified),若最后修改时间较新(大),说明资源又被改过,则返回最新资源,HTTP 200 OK;若最后修改时间较旧(小),说明资源无新修改,响应HTTP 304 走缓存。
-
cookie
Response中的Set-Cookie
HTTPS
在HTTP基础上进行了TSL/SSL加密
- 对称加密:加密解密使用同一密钥
- 非对称加密:加密和解密需要使用公钥私钥两个不同密钥
HTTPS在证书验证阶段使用非对称加密。数据传输阶段使用对称加密。