「网络」HTTP拾零

  • HTTPS

    1. 中间人攻击, 攻击者分别与通讯两端建立单独联系, 并交换其收到的数据, 使两端认为会话是私密的, 其实全被中间人控制, 防御为HTTPS

    2. HTTPS = HTTP + TLS/SSL, HTTP包传递给TLS, 再传递给TCP. HTTPS融合了非对称加密与对称加密, 非对称加密通信仅用于首次交换对称密钥, 之后通信均使用对称加密, 提升速度

    3. RSA非对称加密, 私钥自己持有, 公钥所有人持有; 公钥加密, 仅私钥可解密; 私钥加密, 仅公钥可解密

    4. 如何获取证书: 服务器预先将公钥和网站域名等发给"证书发布机构CA", CA机构也会有自己的公钥和私钥, 其制作出证书(包含服务器公钥), 并用CA自己的私钥加密该证书, 然后再返还给服务器

    5. 服务器会将自己的证书传递给客户端, 证书中有"证书发布机构CA"+"证书有效期"+"服务器公钥"+"签名"

    6. 客户端的操作系统存有所有证书发布机构的名称和公钥, 客户端收到服务器证书后, 用对应证书发布机构的公钥解密证书并核实. 通过则使用证书中的公钥加密客户端自己生成的密码key, 用服务器公钥加密后传给服务器

    7. 服务器用私钥解密, 获得客户端密码key, 后续客户端和服务器间用该key加/解密通信

    8. HTTPS可用于数字签名, 具有不可抵赖性(私钥只有客户拥有)与一致性

  • HTTP状态码

    1. 1XX 接收到请求, 正在处理

    2. 2XX 成功

    3. 3XX 重定向, 301永久重定向, 302暂时重定向, 304未修改, 客户端可使用缓存

    4. 4XX 客户端错误, 403客户端无权限访问, 405访问方法不被允许, 408: 客户端关闭了连接

    5. 5XX 服务器错误, 504网关超时, 500应用服务器异常, 502: web服务器代理至应用服务器异常

  • HTTP1.0/1.1/2.0区别

    1. HTTP1.1

      1. 头部增加HOST域, 以支持虚拟主机

      2. 支持长连接, 一个TCP连接上可以依次传输多个HTTP请求与响应, connection: keep-alive默认开启

      3. 管线化, 客户端在发送请求后, 不必等待收到响应后再发送下个请求, 而是一次性发送多个请求, 但客户端还是要按序接收响应, 等待时会产生队头阻塞

    2. HTTP2.0

      1. 多路复用, 一个TCP连接上可以同时传输多个HTTP请求与响应

      2. header压缩

      3. 服务端推送, 客户端一次请求, 服务器响应一并返回页面中需要的图片/js等资源, 避免客户端多次请求

      4. 基于HTTPS协议加密传输

      5. 协议解析使用二进制, 之前是文本

    3. HTTP3.0 (制定中)

  • HTTP概述

    1. HTTP方法幂等性: 幂等是指无论执行多次, 都有相同的副作用. GET/PUT/DELETE为幂等, POST为非幂等

  • HTTP缓存

    1. 我们可以认为浏览器中有一缓存数据库, 客户端会先访问缓存数据库, 再访问服务器

    2. 强制缓存

      1. 获取数据, 无缓存

        1. 客户端向缓存数据库请求数据

        2. 缓存数据库返回未找到数据

        3. 客户端向服务器请求数据

        4. 服务器返回响应数据以及缓存规则

        5. 客户端将响应数据与缓存规则存入缓存数据库

      2. 获取数据, 有缓存

        1. 客户端向缓存数据库请求数据

        2. 缓存数据库返回未失效的数据

      3. [响应字段] Cache-Control: 值, 该字段用于响应字段中, 用于服务器通知客户端缓存

        1. 值为private或public

        2. 值为max-age=xxx, 缓存内容在xxx秒后失效

        3. 值为no-cache, 用对比缓存

        4. 置为no-store, 不使用缓存

    3. 对比缓存

      1. 获取数据, 无缓存

        1. 客户端向缓存数据库请求数据

        2. 缓存数据库返回缓存数据对应的标识

        3. 客户端向服务器验证标识对应的数据是否失效

        4. 已失效, 服务器响应数据以及缓存规则

        5. 客户端将数据以及缓存规则存入缓存数据库

      2. 获取数据, 有缓存

        1. 客户端向缓存数据库请求数据

        2. 缓存数据库返回缓存数据对应的标识

        3. 客户端向服务器验证标识对应的数据是否失效

        4. 未失效, 服务器响应客户端缓存未失效

        5. 客户端获取该标识对应的数据

      3. Last-Modified与If-Modified-Since

        1. [响应字段] Last-Modified: 时间, 该资源最后的修改时间

        2. [请求字段] If-Modified-Since: 时间, 客户端向服务器请求资源时, 会携带该字段, 服务器会获取请求头中的该字段, 检查如果资源的最后修改日期大于该时间, 则状态码为200, 响应体中有资源的具体数据. 反之, 状态码为304, 响应体为空

      4. Etag与If-None-Match (优先级高于Last-Modified与If-Modified-Since)

        1. [响应字段] Etag: 字符串, 该资源在服务器的唯一标识

        2. [请求字段] If-None-Match: 字符串, 客户端向服务器请求资源时, 会携带该字段. 服务器会检查该字段与资源的标识, 如果不同, 则状态码为200, 响应体中有资源的具体数据. 反之, 状态码为304, 响应体为空

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值