HTTP实用指南 | 青训营笔记

86 阅读5分钟

HTTP实用指南 | 青训营笔记

这是我参与「第四届青训营 」笔记创作活动的第6天

初识HTTP

OSI Reference Model TCP/IP Conceptual Layers Application <--HTTP--> Application

定义: 超文本传输协议

组成:响应+请求

POST/upload HTTP/1.1
Host:www.example.org
Content-Type:application/json
Content-Length:15

{"msg":"hello"}

a.png

特点: 简单可扩展、无状态

协议分析

发展

1、HTTP/0.9单行协议

  • 请求GET/mypage.html
  • 相应只有HTML文档

2、HTTP/1.0构建可扩展性

  • 增加了Header
  • 有了状态码
  • 支持多种文档类型

3、HTTP/1.1标准化协议

  • 链接复用
  • 缓存
  • 内容协议

4、HTTP/2更优异的表现

  • 二进制协议
  • 压缩header
  • 服务器推送

5、HTTP/3草案

报文

Method

  • HTTP/0.9

只有一种方法,GET后跟文档地址和可选的端口地址,并以回车 (CR) 和换行 (LF) 结束

有四个术语:连接、断开连接、请求和响应

  • HTTP/1.0

每个请求都附加了 HTTP 版本,在响应开始时发送状态代码,请求和响应都包含 HTTP 报文头

内容类型能够传输 HTML 文件以外的文档

支持三种请求方法:GET,Head,和POST。它还有其他术语:消息、资源、实体、客户端、用户代理、服务器、源服务器、代理、网关、隧道和缓存

  • HTTP/1.1

使用TCP长连接的方式改善了 HTTP/1.0 短连接造成的性能开销;

支持管道(pipeline)网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间

  • HTTP/2

HTTP/2 构建了对流量的并行化、优先化和流量控制,通信是通过单个 TCP 连接与任意数量的双向流进行的

是一个多路复用协议,并行请求通过同一连接处理

提供了将一种资源优先于另一种资源的能力,从而将其置于响应行的头部,它允许主动将表示从服务器推送到客户端

使用二进制协议而不是文本。这使其成为机器可读的并提高了性能。它还提高了整体的安全性 请求和响应头被压缩,帧在流上传送,数据帧有效载荷受流控制。

状态码

5.png

  • 200 OK - 客户端请求成功

  • 301 - 资源(网页等) 被永久转移到其它 URL

  • 302 - 临时跳转

  • 401 Unauthorized - 请求未经授权

  • 404-请求资源不存在,可能是输入了错误的 URL

  • 500-服务器内部发生了不可预期的错误

  • 504 Gateway Timeout-网关或者代理的服务器无法在规 定的时间内获得想要的响应。

常见请求头

  • Accept 接收类型,表示浏览器支持的MIME类型(对标服务端返回的Content-Type)

  • Content-Type 客户端发送出去实体内容的类型

  • Cache-Control 指定请求和响应遵循的缓存机制,如no-cache

  • If-Modified-Since 对应服务端的Last-Modified, 用来匹配看文件是香变动,只能精确到1S之内

  • Expires 缓存控制,在这个时间内不会请求,直接使用缓存.服务端时间

  • Max-age 代表资源在本地缓存多少秒,有效时间内不会请求,而是使用缓存

  • If-None-Match 对应服务端的ETag,用来匹配文件内容是否改委(非常精确)

  • Cookie 有cookie并且同域访问时会自动带上

  • Referer 该页面的来源URL(适用于所有类型的请求,会精确到详细页面地址,csr拦截常用到这个字段)

  • Origin 最初的请求是从哪里发起的 (只会精确到端口)Origin比Referer更尊重隐私

  • User-Agent 用户客户端的一些必要信息,如UA头部等

常见响应头

  • Content-Type 服务端返回的实体内容的类型

  • Cache-Control 指定请求和响应遵循的缓存机制.如no-cache

  • Last-Modified 请求资源的最后修改时间

  • Expires 应该在什么时候认为文档巴经过期从而不再缓存它

  • Max-age 客户端的本地资源应该缓存多少秒.开启了 Cache -Control后有效

  • ETag 资源的特定版本的标识符,Etags类似于指纹

  • Set-Cookie 设置和页面关联的cookie,服务器通过这个头部把cookie传给客户端

  • Server 服务器的一些相关信息

  • Access-Control-Allow-Origin 服务器端允许的请求Origin头部(譬如为*)

缓存

缓存分为强缓存 和协商缓存两种

强缓存相关Header

  • Expires时间戳,到期时间
  • Cache-Control
    • 可缓存性
      • no-cache:协商缓存验证
      • no-store:不使用任何缓存
    • 到期
      • max-age:单位是秒,存储的最大周期,相对于请求的时间
  • 重新验证,重新加载
    • must-revalidate:一旦资源过期,在成功向原始服务器验证之前,不能使用

协商缓存

  • Etag/if-None-Match :资源的特定版本的标识符,类似于指纹
  • Last-Modified/if-Modified-Since:最后修改时间

场景分析

跨域

  • CORS 设置相关跨域的响应头来解决跨域

  • 代理服务器 

    • 同源策略是服务器对于浏览器的安全策略,不是对HTTP的,服务器之间没有同源策略
    • 部署一台和当前浏览器域名相同的服务器,然后浏览器通过发送给代理服务器来转发请求给服务器