Skip to content

HTTP知识点总结 #9

@XiaoChengyin

Description

@XiaoChengyin

HTTP知识点总结

HTTP

HTTP报文结构

  • 起始行:GET /home HTTP/1.1(请求) HTTP/1.1 200 OK(响应)
  • 头部
  • 空行:用来区分头部和实体,第一个空行后的内容全部认为是实体
  • 实体

注意事项

  • 字段名不区分大小写
  • 字段名不允许出现空格,不可以出现下滑线_
  • 字段名后面必须紧接着:

Content-Type / Accept

  • text: text/html, text/plain, text/css
  • image: image/gif, image/jpeg, image/png
  • audio: audio/video: audio/mpeg, video/mp4
  • multipart: multipart/form-data
  • application: application/json, application/javascript, application/pdf, application/x-www-form-urlencoded

Content-Encoding / Accept-Encoding

  • gzip
  • deflate
  • br

Content-Language / Accept-Language

// 发送端
Content-Language: zh-CN, zh, en
// 接收端
Accept-Language: zh-CN, zh, en

代理

  • Via: 代理服务器转发记录,多个代理按转发顺序排列,用,隔开
  • X-Forwarded-For: 记录请求方的IP,客户端或代理服务器Ip
  • X-Real-IP: 获取用户真实IP

URI结构

scheme://user:password@host:port/path/to/somewhere?key=value#fragment

状态码

1xx

表示目前是协议处理的中间状态,还需要后续操作
比如post请求一般是先发送head部分,服务器返回100(continue)再发送body

  • 100
  • 101 Switching Protocols: HTTP升级为WebSocket时服务器返回101

2xx

  • 200
  • 204 No Content

3xx

  • 301 永久重定向:当网站从HTTP升级为HTTPS时之前的URL被废弃时应返回301,浏览器会做缓存优化,下次自动访问新地址
  • 302 临时重定向
  • 304 Not Modified 命中协商缓存

4xx

  • 400 Bad Request 请求出错,原因位置
  • 403 Forbidden 服务器禁止访问
  • 404 Not Found 找不到资源
  • 405 Method Not Allowed

5xx

  • 500 Internal Server Error:服务器出错,原因位置
  • 502 Bad Gateway
  • 503 Service Unavailable:服务器当前很忙,暂时无法响应服务

HTTP/2

  • 头部压缩: HTTP/1可以根据Content-Encoding对实体部分压缩,HTTP/2实现了对头部的压缩
  • 多路复用:
    • 同域名下所有通信都在单个连接中完成。
    • 单个连接可以承载任意数量的双向数据流。
    • 数据流以消息的形式发送,而消息又由一个或多个帧组成,多个帧之间可以乱序发送,因为根据帧首部的流标识可以重新组装。
  • 二进制分桢: HTTP/2将报文全部转为二进制,多个二进制帧之间不存在前后关系,因此不会有阻塞问题
  • 服务器推送: TCP连接建立后,服务器可以主动将客户端之后需要的数据直接推送,不需要先等待客户端的请求

HTTPS

证书验证阶段

  • 客户端发起HTTPS请求
  • 服务器返回HTTPS证书(包含公钥)
  • 客户端验证证书是否合法,如果不合法则提示警告

数据传输阶段

  • 验证证书合法后,在本地生成一个随机数
  • 通过公钥将随机数加密后发送至服务器
  • 服务器通过私钥对随机数解密
  • 服务器通过随机数构造对称加密算法,对返回数据加密
  • 客户端通过随机数对数据解密

缓存

强缓存

命中强缓存直接读取本地资源,不会向服务器发请求

  • Expires: 值是一个日期,表示资源过期时间,本地时间可能与服务器时间不一致,优先级最低
  • Cache-Control
    • max-age: 单位是秒,表示缓存有效时间。max-age=10000
    • no-cache: 不使用强缓存
    • no-store: 禁止缓存(包括强缓存和协商缓存)
    • private: 只允许客户端缓存,不允许代理服务器或CDN缓存
    • public: 允许客户端、代理服务器、CDN缓存
    • must-revalidate: 在缓存过期前可以使用,过期后必须向服务器验证
  • Pragma: 只有一个值(no-cache,与Cache-Control的no-cache一致),优先级最高

协商缓存

命中协商缓存返回304

  • ETag/If-None-Match: 值是一串hash,服务器资源发生变化时hash值也会改变
  • Last-Modified/If-Modified-Since: 值代表文件最后的修改时间,前者存在于响应头中,后者存在于请求头中

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions