HTTP 知识点

概览

1.HTTP常用方法
2.Get与POST比较:作用、参数、安全性、幂等型、可缓存
3.HTTP状态码
4.Cookie作用、安全性问题、和Session的比较
5.缓存的 Cache-Control字段,特别是Expire和max-age的区别。ETag验证原理
6.长连接与短链接原理以及使用场景,流水线
7.HTTP存在的安全问题,以及HTTPS的加密,认证,和完整性保护
8.HTTP/1.x的缺陷,以及HTTP/2的特点
9.HTTP/1.1的特性
10.HTTP与FTP的比较

1.HTTP常用方法

1. GET
  • 获取资源
  • 当前网络请求中,绝大部分使用的是 GET 方法。
2. POST
  • 传输实体主体
  • POST 主要用来传输数据,而 GET 主要用来获取资源。
3. HEAD
  • 获取报文首部
  • 和 GET 方法类似,但是不返回 报文实体 主体部分。
  • 主要用于确认 URL 的有效性以及资源更新的日期时间等。
4. PUT
  • 上传文件
  • 由于自身不带验证机制,任何人都可以上传文件,因此存在安全性问题,一般不使用该方法。
5. DELETE
  • 删除文件
  • 与 PUT 功能相反,并且同样不带验证机制。
6. PATCH
  • PUT 也可以用于修改资源,但是只能完全替代原始资源,PATCH 允许部分修改。
7. OPTIONS
  • 查询支持的方法
  • 查询指定的 URL 能够支持的方法。
  • 会返回 Allow: GET, POST, HEAD, OPTIONS 这样的内容。
8. CONNECT
  • 使用 SSL(Secure Sockets Layer,安全套接层)和 TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。

2.Get与POST比较:作用、参数、安全性、幂等型、可缓存

  • 作用:
    • GET 用于获取资源,而 POST 用于传输实体主体。
  • 参数:
    • GET 和 POST 的请求都能使用额外的参数,但是 GET 的参数是以查询字符串出现在 URL 中
    • 因为 URL 只支持 ASCII 码,因此 GET 的参数中如果存在中文等字符就需要先进行编码。例如 中文 会转换为 %E4%B8%AD%E6%96%87,而空格会转换为 %20。POST 参数支持标准字符集。
  • 安全性
    • 安全的 HTTP 方法不会改变服务器状态,也就是说它只是可读的。
    • GET 方法是安全的,而 POST 却不是,因为 POST 的目的是传送实体主体内容,这个内容可能是用户上传的表单数据,上传成功之后,服务器可能把这个数据存储到数据库中,因此状态也就发生了改变。
    • 安全的方法除了 GET 之外还有:HEAD、OPTIONS。
    • 不安全的方法除了 POST 之外还有 PUT、DELETE。
  • 幂等性
    • 幂等的 HTTP 方法,同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的
    • 在正确实现的条件下,GET,HEAD,PUT 和 DELETE 等方法都是幂等的,而 POST 方法不是。
  • 可缓存
    • 如果要对响应进行缓存,需要满足以下条件:
      • 请求报文的 HTTP 方法本身是可缓存的,包括 GET 和 HEAD,但是 PUT 和 DELETE 不可缓存,POST 在多数情况下不可缓存的。
      • 响应报文的状态码是可缓存的,包括:200, 203, 204, 206, 300, 301, 404, 405, 410, 414, and 501。
      • 响应报文的 Cache-Control 首部字段没有指定不进行缓存。

3.HTTP状态码

1xx 信息
  • 100 Continue :表明到目前为止都很正常,客户端可以继续发送请求或者忽略这个响应。
2xx 信息
  • 200 OK
  • 204 No Content :请求已经成功处理,但是返回的响应报文 不包含 实体的主体部分。一般在只需要从客户端往服务器发送信息,而不需要返回数据时使用
  • 206 Partial Content :表示客户端进行了 范围请求 ,响应报文包含由 Content-Range 指定范围的实体内容。
3xx 信息
  • 301 Moved Permanently :永久性重定向
  • 302 Found :临时性重定向
  • 303 See Other :和 302 有着相同的功能,但是 303 明确要求客户端应该采用 GET 方法获取资源。
  • 304 Not Modified :如果请求报文首部包含一些条件,例如:If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since,如果不满足条件,则服务器会返回 304 状态码。
  • 307 Temporary Redirect :临时重定向,与 302 的含义类似,但是 307 要求浏览器不会把重定向请求的 POST 方法改成 GET 方法。
4xx 信息
  • 400 Bad Request :请求报文中存在语法错误。
  • 401 Unauthorized :该状态码表示发送的请求需要有认证信息(BASIC 认证、DIGEST 认证)。如果之前已进行过一次请求,则表示用户认证失败。
  • 403 Forbidden :请求被拒绝。(服务器端收到请求,但是拒绝进行处理)
  • 404 Not Found
5xx 信息
  • 500 Internal Server Error :服务器正在执行请求时 发生错误
  • 503 Service Unavailable :服务器暂时处于 超负载 或正在进行 停机维护 ,现在无法处理请求

4.Cookie作用、安全性问题、和Session的比较

Cookie

Cookie 是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器之后向同一服务器再次发起请求时被携带上,用于告知服务端两个请求是否来自同一浏览器

作用
  • 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
  • 个性化设置(如用户自定义设置、主题等)
  • 浏览器行为跟踪(如跟踪分析用户行为等)
安全性问题

标记为 Secure 的 Cookie 只能通过被 HTTPS 协议加密过的请求发送给服务端。但即便设置了 Secure 标记,敏感信息也不应该通过 Cookie 传输,因为 Cookie 有其固有的不安全性,Secure 标记也无法提供确实的安全保障。

Session 创建过程
  • 用户进行登录时,用户提交包含用户名和密码的表单,放入 HTTP 请求报文中;
  • 服务器验证该用户名和密码,如果正确则把用户信息存储到 Redis 中,它在 Redis 中的 Key 称为 Session ID;
  • 服务器返回的响应报文的 Set-Cookie 首部字段包含了这个 Session ID,客户端收到响应报文之后将该 Cookie 值存入浏览器中;
  • 客户端之后对同一个服务器进行请求时会包含该 Cookie 值,服务器收到之后提取出 Session ID,从 Redis 中取出用户信息,继续之前的业务操作。
Cookie 与 Session 的比较
  • Cookie 只能存储 ASCII 码 字符串,而 Session 则可以存取 任何类型 的数据,因此在考虑数据复杂性时首选 Session;
  • Cookie 存储在浏览器中,容易被 恶意查看 。如果非要将一些隐私数据存在 Cookie 中,可以将 Cookie 值进行加密,然后在服务器进行解密;
  • 对于大型网站,如果用户所有的信息都存储在 Session 中,那么开销是非常大的,因此不建议将所有的用户信息都存储到 Session 中。

5.缓存的 Cache-Control字段,特别是Expire和max-age的区别。ETag验证原理

缓存优点
  • 缓解服务器的压力
  • 降低客户端获取资源的延迟:缓存通常位于内存中,读取缓存的速度更快。并且缓存在地理位置上也有可能比源服务器来得近,例如浏览器缓存。
缓存的实现
  • 浏览器缓存
  • 代理服务器缓存
Cache-Control 字段
  1. 禁止进行缓存—— no-store

    no-store 指令规定不能对请求或响应的任何一部分进行缓存。
    Cache-Control: no-store

  2. 强制确认缓存——no-cache

    no-cache 指令规定缓存服务器需要先向源服务器 验证 缓存资源的 有效性 ,只有当缓存资源有效才将能使用该缓存对客户端的请求进行响应。
    Cache-Control: no-cache

  3. 私有缓存和公共缓存——private

    private 指令规定了将资源作为私有缓存,只能被单独用户所使用,一般存储在 用户浏览器中。
    Cache-Control: private

  4. 缓存过期机制.

    max-age 指令出现在 请求报文 中,并且缓存资源的缓存时间小于该指令指定的时间,那么就能接受该缓存
    max-age 指令出现在 响应报文 中,表示缓存资源在缓存服务器中保存的时间。

    Expires 首部字段也可以用于告知缓存服务器该资源什么时候会过期。

ETag 验证原理
  • 需要先了解 ETag 首部字段的含义,它是资源的唯一标识。URL 不能唯一表示资源,例如 http://www.google.com/ 有中文和英文两个资源,只有 ETag 才能对这两个资源进行唯一标识。
  • 可以将缓存资源的 ETag 值放入 If-None-Match 首部,服务器收到该请求后,判断缓存资源的 ETag 值和资源的最新 ETag 值是否一致,如果一致则表示 缓存资源 有效,返回 304 Not Modified。

6.长连接与短链接原理以及使用场景,流水线

[外链图片转存失败(img-RdHRKYzY-1564908577666)(https://camo.githubusercontent.com/c1fa8dd7ae50bb192fc86e747016887e91326fc9/68747470733a2f2f67697465652e636f6d2f437943323031382f43532d4e6f7465732f7261772f6d61737465722f646f63732f706963732f48545450315f785f436f6e6e656374696f6e732e706e67)]

1. 短连接与长连接

当浏览器访问一个包含多张图片的 HTML 页面时,除了请求访问 HTML 页面资源,还会请求图片资源。如果每进行一次 HTTP 通信就要新建一个 TCP 连接,那么开销会很大。
长连接只需要建立 一次 TCP 连接就能进行 多次 HTTP 通信。

  • 从 HTTP/1.1 开始默认是长连接的,如果要断开连接,需要由客户端或者服务器端提出断开,使用 Connection : close;
  • 在 HTTP/1.1 之前默认是短连接的,如果需要使用长连接,则使用 Connection : Keep-Alive。
2. 流水线
  • 流水线是在同一条长连接上发出连续的请求,而不用等待响应返回,这样可以避免连接延迟。

7.HTTP存在的安全问题,以及HTTPS的加密,认证,和完整性保护

HTTP 安全性问题:

  • 使用 明文 进行通信,内容可能会被窃听;
  • 不验证 通信方的 身份 ,通信方的身份有可能遭遇伪装;
  • 无法证明 报文的 完整性 ,报文有可能遭篡改。

HTTPS 并不是新协议,而是让 HTTP 先和 SSL(Secure Sockets Layer)通信,再由 SSL 和 TCP 通信,也就是说 HTTPS 使用了隧道进行通信。

HTTPS 的加密
  • 使用对称密钥和非对称密钥组合的方式进行加密(利用了非对称密钥的安全性和对称密钥的高效性)
  • 先使用非对称密钥:服务器端保存了 私钥, 把 公钥 发送给客户端。
  • 客户端生成对称密钥,然后利用服务器端发送过来的公钥(非对称)进行加密,再把加密完的对称密钥发送给服务器端
  • 客户端和服务器端利用 对称密钥 进行加密。
HTTPS 的认证

通过使用 证书 来对通信方进行认证。

数字证书认证机构(CA,Certificate Authority)是客户端与服务器双方都可信赖的第三方机构。
服务器的运营人员向 CA 提出 公开密钥的申请 ,CA 在判明提出申请者的身份之后,会对已申请的公开密钥做 数字签名 ,然后分配这个已签名的公开密钥,并将该公开密钥放入 公开密钥证书 后绑定在一起。

进行 HTTPS 通信时,服务器会把证书发送给客户端。客户端取得其中的公开密钥之后,先使用 数字签名 进行验证,如果验证通过,就可以开始通信了。

HTTPS完整性保护

SSL 提供 报文摘要 功能来进行完整性保护。

HTTP 也提供了 MD5 报文摘要功能
HTTPS 的报文摘要功能之所以安全,是因为它结合了加密和认证这两个操作。试想一下,加密之后的报文,遭到篡改之后,也很难重新计算报文摘要,因为无法轻易获取明文。

HTTPS 的缺点

CA 认证整数昂贵
因为要涉及到加密解密过程,所以速度比 HTTP 慢

8.HTTP/1.x的缺陷,以及HTTP/2的特点

HTTP/1.x 的缺陷:

  • 客户端需要使用 多个连接 才能实现并发和缩短延迟;
  • 不会压缩请求和响应首部,从而导致不必要的网络流量;
  • 不支持有效的资源优先级,致使底层 TCP 连接的利用率低下。

HTTP/2 的特点:

  • HTTP/2.0 将报文分成 HEADERS 帧和 DATA 帧,它们都是二进制格式的。
  • 服务端推送——HTTP/2.0 在客户端请求一个资源时,会把相关的资源一起发送给客户端,客户端就不需要再次发起请求了。例如客户端请求 page.html 页面,服务端就把 script.js 和 style.css 等与之相关的资源一起发给客户端。
  • 首部压缩——客户端和服务器端都维护一个之前见过的首部字段表,而且HTTP/2.0 也使用 Huffman 编码对首部字段进行压缩。

9.HTTP/1.1的特性

  • 默认是长连接
  • 支持流水线
  • 新增 100 状态码
  • 支持同时打开多个 TCP 连接
  • 支持虚拟主机
  • 新增缓存处理指令 max-age
  • 支持分块传输编码

10.HTTP与FTP的比较

传输内容:

  • HTTP 是 Hyper Text Transfer Protocol,超文本传输协议;
  • FTP 是 File Transfer Protocol, 文件传输协议;

复杂程度:

  • HTTP 只有一条 TCP 连接
  • 相比于 HTTP,FTP 协议要复杂得多。复杂的原因,是因为 FTP 协议要用到两个 TCP 连接,一个是命令链路,用来在 FTP 客户端与服务器之间传递命令;另一个是数据链路,用来上传或下载数据。

参考资料

1.CyC2018 大佬的 Github
2.苹果园

  • 10
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值