0%

HTTP协议

HTTP协议.png

HTTP协议

相关概念

报文

  • 请求

    • 第一行

      • 请求方法
      • URL
      • 协议版本
    • Header

    • 空行

    • 请求的内容主体

  • 响应

    • 第一行

      • 协议版本
      • 状态码
      • 描述
    • Header

    • 空行

    • 响应的内容主体

URL

U niform Resource Locator

  • URI唯一标识一个资源,但可能未定义找的办法
  • URL 在 URI 的基础上增加了定位能力

HTTP方法

分类

  • GET

    • 获取资源
  • HEAD

    • 获取报文首部
    • 和 GET 方法类似,但不返回报文body部分
  • POST

    • 传输实体主体
    • POST 主要用来传输数据,而GET 主要用来获取资源
  • PUT

    • 上传文件
  • PATCH

    • 对资源进行部分修改
  • DELETE

    • 删除文件
  • OPTIONS

    • 查询服务器支持的方法
  • CONNECT

    • 要求在与代理服务器通信时建立隧道
  • TRACE

    • 发送请求时,在 Max-Forwards 首部字段中填入数值,每经过一个服务器就会减 1,当数值为 0 时就停止传输

GET VS POST

  • 作用

    • GET 用于获取资源,而 POST 用于传输实体主体
  • 参数

    • GET 的参数是以查询字符串出现在 URL

      非ASCII需要编码

    • POST 的参数存储在实体主体中

  • 幂等性

    一般来说,服务器不应该因为GET请求而改动(如数据库)

    • GET幂等,不具有副作用
    • POST不幂等
  • 缓存需要满足的条件

    • 方法本身可缓存
    • 状态码可缓存
    • Header的Cache-Control允许缓存
  • XMLHttpRequest

    • 概念

      • 提供了一个通过 URL 来获取数据的简单方式
      • 在 AJAX 中被大量使用
      • 不会使整个页面刷新
    • GET和POST的区别

      • GET的HEADER和DATA一次性发送
      • POST先后发送

状态码

响应报文的状态码

  • 1XX

    • Information
    • 正在处理
  • 2XX

    • Success
    • 正常处理完毕
  • 3XX

    • Redirection
    • 需要额外操作以完成请求
  • 4XX

    • Client Error
    • 服务器无法处理请求
  • 5XX

    • Sever Error
    • 服务器处理请求时发生错误

常见状态码

  • 200(OK)

  • 3XX

    • 301(永久重定向)
    • 302(临时重定向)
  • 4XX

    • 400(语法错误)
    • 401(Unauthorized)
    • 403(Forbidden)
    • 404(Not Found)

应用问题

连接

  • 短连接

    • HTTP 1.0
    • 一次连接一次请求
  • 长连接

    • HTTP 1.1
    • 一次连接多次请求
  • 流水线

    • 长连接上不等到收到回复就发送新的请求
  • 作用

    • 会话状态管理
    • 浏览器行为跟踪
  • 创建过程

    • 服务器发送的响应报文包含 Set-Cookie 首部字段
    • 客户端之后对同一个服务器发送请求时,会从浏览器中取出 Cookie 信息并通过 Cookie 请求首部字段发送给服务器
  • 分类

    • 会话期Cookie
    • 持久性Cookie
  • 作用域

    • Domain 标识指定了哪些主机可以接受 Cookie
    • Path 标识指定了主机下的哪些路径可以接受 Cookie
  • HTTP ONLY

    • 标记为 HttpOnly 的 Cookie 不能被 JavaScript 脚本调用
  • Cookie VS Session

    • Session

      • 概念

        • 用户信息通过 Cookie 存储在用户浏览器,利用 Session 存储在服务器端
      • 过程

        • 浏览器端存储Session ID,再次请求时Cookie中携带Session ID
    • 禁用Cookie

      • 将Session ID作为URL参数传递
    • Session更安全,但服务器开销更大

缓存

  • 作用

    • 降低服务器压力
    • 提高客户端获取资源的速度
  • 位置

    • 客户端浏览器缓存
    • 代理服务器缓存
  • Cache-Control

    • 禁止缓存

      • Cache-Control: no-store
    • 强制确认缓存

      • Cache-Control: no-cache
    • 私有缓存和公有缓存

      • Cache-Control: private(浏览器)
      • Cache-Control: public(代理服务器)
    • 过期机制

      • max-age

        • 在请求报文中表示能接受的最大缓存时间
        • 在响应报文中表示缓存在服务器中存在的时间
      • expires

内容

  • 内容协商

    • 类型

      • 服务端驱动型

        • 概念

          • 服务端根据请求的首部字段Accept-Charset、Accept-Encoding等返回最合适的内容
        • 存在的问题

          • 需要额外的冗长的信息
          • 缓存效率低
      • 代理驱动型

        • 300 Multiple Choices
        • 406 Not Acceptable
    • Vary

      • 格式

        • Vary: Accept-Language
      • 作用

        • 只有当缓存服务器中的缓存满足内容协商条件时,才能使用该缓存,否则应该向源服务器请求该资源
  • 内容编码

    • 作用

      • 将实体主体进行压缩,减少传输数据量
    • 常见编码方式

      • gzip
      • compress
      • deflate
      • identity
  • 范围请求

    • 概念

      • 客户端只请求一部分数据
    • 字段

      • Range

        GET /z4d4kWk.jpg HTTP/1.1
        Host: i.imgur.com
        Range: bytes=0-1023

      • Accept-Range

        Accept-Ranges: bytes

    • 服务端的响应

      • 206 Partial Content
      • 416 Requested Range Not Satisfiable
      • 200 OK(不支持范围请求)

Chunked Transfer Encoding

  • 可以把数据分割成多块,让浏览器逐步显示页面

多部分对象集合

  • 报文主体内可含有多种类型的实体同时发送

虚拟主机

  • HTTP/1.1 使用虚拟主机技术,使得一台服务器拥有多个域名

通信数据转发

  • 代理

    • 作用

      • 缓存
      • 负载均衡
      • 网络访问控制
      • 访问日志记录
    • 分类

      • 正向代理

        • 客户端可以感知代理的存在
        • 代理客户端
      • 反向代理

        • 客户端难以感知代理的存在
        • 代理服务端
  • 网关

    • 网关服务器会将 HTTP 转化为其它协议进行通信
  • 隧道

    • 使用 SSL 等加密手段,在客户端和服务器之间建立一条安全的通信线路

HTTPS

HTTP的安全问题

  • 明文通信(被窃取)
  • 不验证对方身份(身份伪装)
  • 无法验证报文完整性(被篡改)

HTTPS的通信方式

  • HTTP–>SSL–>TCP

功能

  • 加密(防窃取)

    • 对称密钥

      • 速度快
      • 无法把密钥安全的发送到对方手里
    • 非对称密钥

      • 速度慢
      • 可以把公钥安全的发送到对方手里
    • 两种加密方式结合

      • 只用非对称加密方式传对称加密的密钥
  • 认证(防伪装)

    • 作用

      • 向用户保证服务器的身份
      • 向服务器保证用户的身份
  • 完整性保护(防篡改)

    • SSL报文摘要

HTTP 1.1/2.0

HTTP 1.x的缺陷

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

HTTP 2.0

  • 二进制分帧层

    • HEADERS 帧
    • DATA 帧
  • 服务端推送附带相关资源

  • Header压缩避免重复传输