HTTP 详解

参考地址: https://developer.mozilla.org/zh-CN/docs/W...


版本区别

  • HTTP/0.9 : 单行协议
  • HTTP/1.0 : 构建可扩展性
  • HTTP/1.1 标准协议
    • 连接可以复用,节省了多次打开TCP连接加载网页文档资源的时间。
    • 增加流水线操作,允许在第一个应答被完全发送之前就发送第二个请求,以降低通信延迟。
    • 支持响应分块。
    • 引入额外的缓存控制机制。
    • 引入内容协商机制,包括语言,编码,类型等,并允许客户端和服务器之间约定以最合适的内容进行交换。
    • 感谢Host头,能够使不同域名配置在同一个IP地址的服务器上。
  • HTTP2/
    • HTTP/2是二进制协议而不是文本协议。不再可读,也不可无障碍的手动创建
    • 这是一个复用协议。并行的请求能在同一个链接中处理,移除了HTTP/1.x中顺序和阻塞的约束。
    • 压缩了headers。因为headers在一系列请求中常常是相似的,其移除了重复和传输重复数据的成本。
    • 其允许服务器在客户端缓存中填充数据,通过一个叫服务器推送的机制来提前请求。

缓存

  • 禁止缓存: 不得存储客户端或服务端响应的内容
    Cache-Control: no-store
    Cache-Control: no-cache, no-store, must-revalidate
  • 强制确认缓存:使用副本之前服务器端都会验证请求中所描述的缓存是否过期
    Cache-Control: no-cache
  • 公共缓存: 响应可以被任何中间人缓存 :例如 (中间代理,CDN)
    Cache-Control: public
  • 私有缓存:响应是专用于某单个用户的 (默认私有)
    Cache-Control: private
  • 缓存过期:响应时间 + 缓存时间 是否大于 当前时间
    Cache-Control: max-age=31536000
  • 确认缓存:本地未过期使用本地副本。过期则去服务器端校验
    Cache-Control: must-revalidate

Cookie

  • 会话期: 浏览器关闭之后它会被自动删除
    Cookie: yummy_cookie=choco; tasty_cookie=strawberry
  • 持久期: 指定一个特定的过期时间
    Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;
  • Secure 和 HttpOnly 标记 :secure -> 只能通过HTTPS协议发送 ; HttpOnly -> 无法通过脚本(javascirpt)访问
    Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly
  • 作用域 : Domain 和 Path 标识定义了Cookie的作用域:即Cookie应该发送给哪些URL

访问控制(CORS)

  • 跨网站请求 : https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS

消息头

  • 一般消息头 : 同时适用于请求和消息的响应, 但与最终消息主体中传输的数据无关
    • Remote Address : 请求的远程地址
    • Referrer Policy : 来源请求信息
      • no-referrer : 不传递 Referrer 报头的值
      • no-referrer-when-downgrade : 当发生降级( 比如从 https:// 跳转到 http:// )时
      • same-origin : 同源,即当协议、域名和端口(如果有一方指定的话)都相同
      • origin : 将当前页面过滤掉参数及路径部分,仅将协议、域名和端口传递
      • unsafe-url : 任意情况下,都发送当前页的全部地址到 Referrer
      • Keep-Alive : 暗示请求者连接状态。 超时时长和最大连接数
  • 请求头 : 包含更多有关获取的资源和客户端本身信息的消息头
    • Accept : 告知服务器 ,客户端能处理的内容类型
    • Accept-Encoding : 告知服务器, 传输数据应采用那种加密方式
    • Accept-Language : 客户端声明它可以理解的自然语言
    • Accept-Charset : 客户端声明可以处理的字符集类型
    • Pragma : 用于向后兼容 HTTP1.0协议的服务器
    • Connection : 决定当前的事务完成后,是否会关闭网络连接
      • keep-alive : 持久
      • close : 关闭
    • Referer : 当前请求页面的来源页面的地址
    • Upgrade-Insecure-Requests : 客户端优先选择加密及身份验证
    • User-Agent : 发起请求的用户代理信息
    • Content-Location : 返回数据的实际地址 ( 不需要协商 )
    • Access-Control-Request-Headers: 预检请求 (真正的请求采用哪些首部字段)
    • From : 发送方联系方式
    • Proxy-Authorization : 用户代理提供给代理服务器的用于身份验证的凭证
    • If-Range : 用于断点续传的下载过程中
  • 响应头 : 包含有关响应的补充信息, 位置信息,版本
    • Content-Type : 告诉客户端实际发送的数据类型
    • Transfer-Encoding : 告诉客户端安全传递采用的编码格式
      • chunked : 数据以一系列分块的形式进行发送
      • deflate : 采用 zlib 结构
      • gzip : 表示采用 Lempel-Ziv coding 压缩算法
      • identity : 未经过压缩和修改
    • Vary : 告诉客户端如何进行筛选, 缓存是否可用
    • Expires : 响应的过期时间
    • X-Ua-Compatible : 以哪个低版本的IE浏览器来渲染页面
    • Location : 告知客户端页面重新定向至新的地址
    • Access-Control-Allow-Headers : 预检请求 (列出真正请求的首部信息)
    • Access-Control-Allow-Credentials : 是否可将请求的响应暴露给页面
    • Access-Control-Allow-Origin : 响应资源是否共享
    • Content-Range : 显示的是一个数据片段在整个文件中的位置
    • WWW-Authenticate : 定义了使用何种验证方式去获取对资源的连接
    • ETag : 资源的特定版本的标识符 (加密) 避免缓存碰撞
    • Retry-After : 用户代理需要等待多长时间之后才能继续发送请求
    • Clear-Site-Data : 清除当前游览网站的数据 ( cookie, 存储, 缓存 )
      • cache : 删除响应的本地缓存数据
      • cookies : 删除响应的本地所有cookie
      • storage: 删除响应的所有DOM存储
      • executionContexts : 服务端希望浏览器重新加载本请求
      • *
    • Server : 服务器的版本信息
    • X-Content-Type-Options : 提醒游览器遵循 Content-Type 的设定
  • 实体头 : 包含更多主体信息
    • Content-Length : 用来指定发送方和接收方消息主体大小
    • Content-Disposition : 内容以何种形式展示
      • inline : 消息体会以页面的一部分或者整个页面的形式展示
      • attachment : 消息体应该被下载到本地
        • filename : 指定名称

状态码

  • 信息响应
    • 100 : 迄今为止的所有内容都是可行的
    • 102 : 服务器已收到并正在处理该请求,但没有响应可用
  • 成功响应
    • 200 : 请求成功
    • 201 : 请求成功, 并创建一个新的资源 ( PUT请求之后发送的响应 )
    • 202 : 请求已经接受到, 但还未响应
    • 204 : 服务器成功处理了请求,但不需要返回任何实体内容
    • 205 : 服务器成功处理了请求, 不返回任何实体内容。 但需要请求者重置文档视图
    • 206 : 实现断点续传,大文件分段下载的响应
  • 重定向
    • 300 : 用户或浏览器能够自行选择一个首选的地址进行重定向
    • 301 : 被请求的资源已永久移动到新位置
    • 302 : 请求的资源现在临时从不同的 URI 响应请求
    • 304 : 自上次访问以来或者根据请求的条件并没有改变
  • 客户端响应
    • 400 : 语义有误,当前请求无法被服务器理解
    • 401 : 当前请求需要用户认证
    • 403 : 服务器已经理解请求,但是拒绝执行它
    • 404 : 资源未在服务器上找到
    • 405 : 请求行中指定的请求方法不能被用于请求相应的资源
    • 406 : 请求的资源的内容特性无法满足请求头中的条件,因而无法生成响应实体。
    • 408 : 请求超时
    • 410 : 请求的资源在服务器上已不可用
    • 411 : 服务器拒绝在没有定义 Content-Length 头的情况下接受请求
    • 413 : 请求提交的实体数据大小超过了服务器愿意或者能够处理的范围
    • 414 : 请求的URI 长度超过了服务器能够解释的长度
    • 415 : 请求中提交的实体并不是服务器中所支持的格式
    • 416 : 请求头包含Range 请求头, 同时请求中又没有定义 If-Range 请求头
    • 429 : 用户在给定的时间内发送了太多请求(“限制请求速率”)
    • 451 : 用户请求非法页面
  • 服务端响应
    • 500 : 服务器故障
    • 503 : 服务器没有准备好处理请求
    • 504 : 服务器作为网关,不能及时得到响应时返回此错误代码
    • 505 : 服务器不支持请求中使用的HTTP协议
    • 507 : 服务器有内部配置错误
    • 508 : 服务器在处理请求时检测到无限循环。
    • 510 : 服务器需要对请求进一步扩展才能实现它。
    • 511 : 客户端需要进行身份验证才能获得网络访问权限
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!