HTTP协议|青训笔记

76 阅读3分钟

这是我参与 [第五届青训营] 笔记创作活动的第五天。

初识HTTP

HTTP协议是属于应用层的基于TCP的协议,是一种超文本传输协议。有请求和响应报文,协议简单可以扩展,是一种无状态的协议,使用cookie来跟踪用户状态和存储信息。

QQ图片20230120182109.png

协议分析

Method字段:

GET请求一个指定资源的表示形式。使用GET的请求应该只被用于获取数据。
POST用于将实体提交到指定的资源,通常导致在服务器上的状态变化或副作用
PUT用请求有效载荷替换目标资源的所有当前表示
DELETE删除指定的资源
HEAD请求一个与GET请求的响应相同的响应,但没有响应体
CONNECT建立一个到由目标资源表示的服务器的隧道
OPTIONS用于描述目标资源的通信选项
TRACE沿着到目标资源的路径执行一个消息换回测试
PATCH用于对资源应用部分修改

safe(安全的):不修改服务器的数据的方法。(GET HEAD OPTIONS)

Idempotent(幂等):同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的所有safe的方法都是Idempotent的。(GET HEAD OPTIONS PUT DELETE)

状态码:

  • 1XX:指示信息,表示请求已接收,继续处理
  • 2XX:成功,表示请求已被成功接收、理解、接受
  • 3XX:重定向,要完成请求必须进行更进一步的操作
  • 4XX:客户端错误,请求有语法错误或请求无法实现
  • 5XX:服务器错误,服务器未能实现合法的请求

RESTful API:一种API设计风格;

  1. 每一个URI代表一种资源
  2. 客户端与服务器之间,传递这种资源的某种表现层
  3. 客户端通过HTTP method,对服务器端资源进行操作,实现“表现层状态转化“

常用请求头:

QQ图片20230120203823.png

常用响应头:

QQ图片20230120204132.png

缓存:分为强缓存和协商缓存

强缓存:

  • Expires,时间戳

Cache-Control

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

协商缓存:

  • Etag/If-None-Match:资源的特定版本的标识符,类似于指纹

  • Last-Modified/If-Modified-Since:最后修改时间

流程图:

QQ图片20230120205007.png

cookie:

Set-Cookie-response字段中的信息:

Name=value各种cookie的名称和值
Expires=DateCookie的有效期,缺省时Cookie仅在浏览器关闭之前有效
Path=Path限制指定Cookie的发送范围的文件目录,默认为当前
Domain=domain限制cookie生效的域名,默认为创建cookie的服务域名
secure仅在HTTPS安全连接时,才可以发送Cookie
HttpOnlyJavaScript脚本无法获得Cookie
SameSite=[None、Strict、Lax]None同站、跨站请求都可以发送;Strict仅在同站发送;允许与顶级导航一起发送,并将与第三方网站发起的GET请求一起发送

HTTP/2概述:更快、更稳定、更简单

  • 帧:HTTP/2 通信的最小单位,每个帧都包含帧头,至少也会标识出当前帧所属的数据流
  • 二进制
  • 消息:与逻辑请求或响应消息对应的完整的一系列帧
  • 数据流:已建立的连接内的双向字节流,可以承载一条或多条消息
  • 交错发送,接收方重组织
  • 连接都是永久的,而且仅需要每个来源一个连接
  • 流控制:阻止发送方向接收方发送大量数据的机制
  • 服务器推送

场景分析

静态资源方案:缓存 + CDN + 文件名hash