HTTP 必备基础

504 阅读5分钟

HTTP 必备基础

一、HTTP 常见状态码

1. 状态码分类

  • 1xx 服务器收到请求
  • 2xx 请求成功,如 200
  • 3xx 重定向,如 302
  • 4xx 客户端错误,如 404
  • 5xx 服务端错误,如 500

2. 常见状态码

  • 200 成功
  • 301 永久重定向(配合 location, 浏览器自动处理)
  • 302 临时重定向(配合 location, 浏览器自动处理)
  • 304 资源未被修改(已经请求过资源,资源未过期)
  • 404 资源没找到
  • 403 没有权限
  • 500 服务器错误
  • 503 服务器不可访问
  • 504 网关超时

二、HTTP Methods

1. 传统的 methods

  • get 获取服务器的数据
  • post 像服务器提交数据
  • 简单的网页功能,就这两个操作

2. 现在的 methods

  • get 获取数据
  • post 新建数据
  • patch / put 更新数据
  • delete 删除数据

3. Restful API

  • 一种新的 API 设计方法(早已推广使用)
  • 传统 API 设计:把每个 url 当作一个功能
  • Restful API 设计:把每个 url 当作一个唯一的资源

4. 如何设计成一个资源?

4.1 不用 url 参数

  • 传统 API 设计: /api/list?pageIndex = 2
  • Restfux API: /api/list/2

4.2 用 method 表示操作类型

传统 API 设计

  • post 请求 /api/create-blog
  • post 请求 /api/update-blog?id=100
  • get 请求 /api/get-blog?id=100

Restfux API 设计

  • post 请求 /api/blog
  • patch 请求 /api/blog/100
  • get 请求 /api/blog/100

三、HTTP Headers

1. Request Headers(常见请求头)

  • Accept 浏览器可接收的数据格式
  • Accept-Encoding 浏览器可接收的压缩算法,如 gzip
  • Accept-Languange 浏览器可接收的语言,如 zh-CN
  • Connection: keep-alive 一次 TCP 连接重复使用
  • cookie
  • Host 域名
  • User-Agent(简称 UA) 浏览器信息
  • Content-type 发送数据的格式,如 application/json

2. Response Headers(常见响应头)

  • Content-type 返回数据的格式,如application/json
  • Content-length 返回数据的大小,多少字节
  • Content-Encoding 返回数据的压缩算法,如 gzip
  • Set-Cookie 服务端设置 cookie

3. 自定义 Headers

headers: { 'X-Requested-With': 'XMLHttpRequest' }

4. 缓存 headers

强制缓存

Cache-Control

Expires

协商缓存

Last-Modified

If-Modified-Since

Etag

If-None-Match

四、http 缓存

1. 强制缓存

1.1 Cache-Control

在 Response Headers 中,控制强制缓存的逻辑

例:Cache-Control: max-age=31536000(单位是秒)

Cache-Control 的值

  • max-age 过期时间
  • no-cache 不做强制缓存交给服务端处理
  • no-store 不让强制缓存也不让服务端做缓存
  • private 允许最终用户做缓存
  • public 允许中间一些路由和代理做一些缓存
  • must-revalidate 必备

image-20210318212628422.png

Cache-Control 过期之后还会再次请求服务端

1.2 关于 Expires

  • 同在 Response Headers 中
  • 同为控制缓存过期
  • 已被 Cache-Control 代替
  • 替代原因返回的到期时间是服务器端的时间,这样存在一个问题,如果浏览器所在机器的时间与服务器的时间相差很大,那么误差就很大

2. 协商缓存(对比缓存)

  • 服务端缓存策略(服务端来判断一个资源是否被缓存,不是在服务端缓存)
  • 客户端向服务器发送请求,服务器来判断客户端资源,是否和服务端资源一样
  • 一致则返回 304,否则返回 200 和最新的资源

image-20210318213210934.png

2.1 资源标识

  • 在 Response Headers 中,有两种
    • Last-Modified 资源的最后修改时间
    • Etag 资源的唯一标识(一个字符串,类似人类的指纹)

image-20210318213555036.png

再次请求的 If-Modifed-Since 的值就是出次请求的 Last-Modified 的值

image-20210318214153535.png

再次请求的 If-None-Match 的值就是初次请求的 Etag 的值

2.2 Last-Modified 和 Etag

  • 会优先使用 Etag
  • Last-Modified 只能精确到秒级
  • 如果资源被重复生成,而内容不变,则 Etag 更精确

五、三种刷新操作

  • 正常操作: 地址栏输入 url, 跳转连接,前进后退等
  • 手动刷新: F5,点击刷新按钮,右击菜单刷新
  • 强制刷新: ctrl + F5

1. 不同刷新操作,不同的缓存策略

  • 正常操作: 强制缓存有效,协商缓存有效

  • 手动刷新: 强制缓存失效,协商缓存有效

  • 强制刷新:强制缓存失效,协商缓存失效

六、HTTP 与 HTTPS 的区别

区别HTTPHTTPS
协议运行在 TCP 之上,明文传输,客户端与服务器端都无法验证对方的身份身披 SSL( Secure Socket Layer )外壳的 HTTP,运行于 SSL 上,SSL 运行于 TCP 之上, 是添加了加密和认证机制的 HTTP。
端口80443
资源消耗较少由于加解密处理,会消耗更多的 CPU 和内存资源
开销无需证书需要证书,而证书一般需要向认证机构购买
加密机制共享密钥加密和公开密钥加密并用的混合加密机制
安全性由于加密机制,安全性强

1. 对称加密与非对称加密

HTTPS 采用对称加密与非对称加密的混合加密机制。

对称密钥加密是指加密和解密使用同一个密钥的方式,这种方式存在的最大问题就是密钥发送问题,即如何安全地将密钥发给对方; 而非对称加密是指使用一对非对称密钥,即公钥和私钥,公钥可以随意发布,但私钥只有自己知道。发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用自己的私钥进行解密。 由于非对称加密的方式不需要发送用来解密的私钥,所以可以保证安全性;但是和对称加密比起来,非常的慢。

综上:为了时效性我们还是需要选择对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。