HTTP | 青训营笔记

83 阅读6分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天

HTTP| 青训营笔记

本堂课重点内容:

  1. 什么是HTTP?
  2. HTTP协议方法
  3. 状态码
  4. 常用请求头
  5. 常用响应头
  6. 缓存
  7. HTTP2.0
  8. HTTPS

1.什么是HTTP

  • 概念:HTTP:Hyper Text Transfer Protocol,超文本传输协议,使用明文方式传输内容,不进行任何加密。
    特点
  • 应用层协议,基于TCP协议
  • 简单可拓展: 增加了headers,客户端和服务端保持一致的headers即可加入。
  • 无状态: 对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传。这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

2.HTTP协议方法

方法解释
get请求一个资源,使用get请求应该只被用于获取数据
post将实体提交到指定的资源,通常导致服务器上的状态变化
put使用请求中的负载创建或者替换目标资源。
delete删除指定的资源
head请求资源的头部信息,并且这些头部与 get 方法请求时返回的一致
connect建立一个到目标资源标识的服务器的隧道
options描述目标资源的通信通道
trace 实现沿通向目标资源的路径的消息环回(loop-back)测试,提供了一种实用的 debug 机制。
patch 请求方法 PATCH 用于对资源进行部分修改。

PUT 与 POST 方法的区别:PUT 方法是幂等的(调用一次与连续调用多次是等价的(即没有副作用),而连续调用多次 POST 方法可能会有副作用,比如将一个订单重复提交多次。)

3.状态码

2开头 (请求成功)表示成功处理了请求的状态代码。
200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。
201 (已创建) 请求成功并且服务器创建了新的资源。
202 (已接受) 服务器已接受请求,但尚未处理。
203 (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。
204 (无内容) 服务器成功处理了请求,但没有返回任何内容。
205 (重置内容) 服务器成功处理了请求,但没有返回任何内容。(重置页面)
206 (部分内容) 服务器成功处理了部分 GET 请求。

3开头 (请求被重定向)表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。
301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。

4开头 (请求错误)这些状态代码表示请求可能出错,妨碍了服务器的处理
401 (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
403 (禁止) 服务器拒绝请求。
404 (未找到) 服务器找不到请求的网页。

5开头(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。
500 (服务器内部错误) 服务器遇到错误,无法完成请求。

4.常用请求头

响应头解释
Accept请求头用来告知(服务器)客户端可以处理的内容类型。
Content-Type客户端发出去实体内容的类型
Cache-Control指定请求和响应遵循的缓存机制
if-Modified-Since对应服务端的Last-Modified,用来匹配文件是否变动,精确为1S之内
Expires缓存控制,这个时间内不会请求,直接使用缓存,
Max-age代表资源在本地缓存多少秒,有效时间内不会请求
if-Node-Match对应服务端的ETag,用来匹配文件内容是否改变(精确度高)
Cookie有cookie并且同域访问时会自动带上 
Referer该页面来源的URL(适用所有类型的请求,精确到详情页面地址,csrf拦截常用这个字段) 
Origin 最初的请求是从哪里发起的
User-Agent 用户客户端的一些必要信息

5.常用响应头

响应头解释
Content-Type服务端返回的实体内容的类型
Cache-Control指定请求和响应遵循的缓存机制
Last-Modified请求资源的最后修改时间
Expires什么时候认为文档过期,不再使用
Max-age代表资源在客户端缓存多少秒,开启Cache-Control后有效
ETag资源特定版本的标识符
Set-Cookie设置和页面关联的cookie,服务器通过这个头部把cookie传给客户端
Server服务器的一些相关信息
Access-Control-Allow-Origin 服务端允许的请求Origin头部

6.缓存

image.png(来源于字节跳动)
Etag和Last-Modified
优先使用Etag

  1. Last-Modified只精确到秒级、
  2. 文件如果隔一段时间重复生成,内容不变,Last-Modified每次都返回资源文件,即使内容相同,Etag自己会判断出内容相同,就直接返回304,使用缓存

选择合适的缓存策略
大部分场景使用协商和强缓存配合,但是在特殊的地方使用特殊的方式。

  • 对于不需要缓存的资源,使用Cache-Control:no-store
  • 频繁变动的资源,使用Cache-Control:no-cache并配合Etag使用,表示已经缓存,但是每次都会发送请求询问是否更新

缓存流程

image.png(来源于字节跳动)

7.HTTP2.0

特点

  • 采用二进制格式,以帧为单位
  • 交错发送,接收方重组织
  • 完全多路复用,而非有序并阻塞的,只需要一个连接
  • 流控制:阻止发送方向接收方发送大量数据的机制
  • 服务器推送
  • 使用报头压缩,降低开销

8.HTTPS

HTTP传递信息是以明文的形式发送内容,这并不安全,让HTTP经过TSL/SSL加密,出现了今天的HTTPS。

image.png(来源于字节跳动)

  • 对称加密:加密和解密都是一个密钥
  • 非对称加密: 加密和解密需要使用两个不同的密钥:公钥和私钥。