HTTP实用指南 | 青训营笔记

63 阅读6分钟

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

一. 初识HTTP

1. 输入URL到出现页面发生了什么?

  1. 输入信息 -> 浏览器 -> 浏览器内核(发起请求给Internet网络,读取响应,渲染)-> 页面加载完成
  2. 经过了三个大体过程:browser进程;浏览器内核;Internet网络server服务器。

2. 什么是HTTP

  • 超文本传输协议
  • 应用层协议,基于TCP协议。
  • 请求 响应
  • 简单可扩展
  • 无状态

二. HTTP协议分析

1. 持续发展

  1. HTTP/0.9单行协议:请求只有GET/mypage.html,响应只有HTML文档...
  2. HTTP/1.0构建可扩展性:增加了Header,有了状态码,支持了更多语义,支持多种文档类型...
  3. HTTP/1.1标准化协议:链路复用,缓存,内容协商...
  4. HTTP/2更优异的表现:二进制协议,压缩header,服务器推送...
  5. HTTP/3草案

2. 报文解析

📶 2.1. http1.1

起始行: 请求(Method Path Version)、响应(Version StatusCode StatusMessage)

HTTP Headers: 请求头、响应头

空行

body: 请求体、响应体

🔂 2.1.1. 方法

安全性Safe:不会修改服务器的数据的方法,GET HEAD OPTIONS。

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

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

🔂 2.1.2. 状态码

  1. 常见状态码及含义

状态码含义
200 OK客户端请求成功
301 Moved Permanently资源(网页等)被永久转移到其它URL
302 Found临时跳转
401 Unauthorized请求未经授权
404 Not Found请求资源不存在,可能是输入了错误的URL
500 Internal Server Error服务器内部发生了不可预期的错误
504 Gateway Timeout网关或者代理的服务器无法在规定的时间内获得想要的响应
  1. RESTful API

    RESTful API:一种API设计风格,全称为REST - Representational State Transfer。

  • 每一个URI代表一种资源;
  • 客户端和服务器之间,传递这种资源的某种表现层;
  • 客户端通过HTTP method,对服务器端资源进行操作,实现"表现层状态转化"。
请求返回码含义
GET /zoos200 OK列出所有动物园,服务器成功返回了
POST /zoos201 CREATED新建一个动物园,服务器创建成功
PUT /zoos/ID400 INVALID REQUEST更新某个指定动物园的信息(提供该动物园的全部信息)用户发出的请求有错误,服务器没有进行新建或修改数据的操作
DELETE /zoos/ID204 NO CONTENT删除某个动物园,删除数据成功
  1. 传统API与RESTful API的区别

    传统API:把每个URL当作一个功能

    Restful API: 把每个URL当作一个唯一的资源

    用 URL 定位资源,用 HTTP 动词(GET,POST,DELETE,PUT)描述操作,尽量不用URL参数,用method表示操作类型

    ① url参数

    传统API :/api/list?pageIndex=2

    Restful API :/api/list/2

    ② method表示操作类型

    传统API

    POST请求 /api/create-blog
    
    POST请求 /api/update-blog?id=100
    
    GET请求 /api/get-blog?id=100
    

    Restful API

    POST请求 /api/blog
    
    PATCH请求 /api/blog/100
    
    GET请求 /api/blog/100
    

🔂 2.1.3. 请求头

Header首部和请求方法配合工作,共同决定了客户端和服务器能做什么事情。

  1. 常用请求头

  1. 常用响应头

  1. 缓存相关请求头

和缓存相关的协议首部Header

强制缓存:

Cache-Control (Response Headers)

max-age 设置缓存有效时间

no-cache 不用本地强制缓存,让服务端处理缓存

no-store 不强制缓存,不让服务端处理缓存,直接返回资源

private 只能允许最终用户做缓存

public 允许中间路由、代理做缓存

Expires (Response Headers) 控制缓存过期,已被Cache-Control代替

协商缓存:

Last-Modified [资源标识] 资源最后修改时间

Etag [资源标识] 资源唯一标识(一个字符串,类似人类的指纹)

服务端缓存策略:

服务端判读客户端资源,是否和服务端资源一样

一致返回304,否则返回200和最新的资源

  1. cookie

HTTP是无状态的协议,需要设置cookie保持状态。

📶 2.2. http2

HTTP1.1响应是文本格式,而HTTP2.0把响应划分成了两个帧,HEADERS(首部)和 DATA(消息负载) 是帧的类型。

一条HTTP响应,划分成了两个帧来传输,并且采用二进制来编码。

  • 消息(Message): 与逻辑请求或响应消息对应的完整的一系列帧。特定消息的帧在同一个流上发送,这意味着一个HTTP请求或响应只能在一个流上发送。
  • 数据流(Frame): 已建立的TCP连接内的双向字节流,可以承载一条或多条消息。
  • HTTP/2 连接都是永久的,而且仅需要每个来源一个连接。
  • 流控制:阻止发送方向接收方发送大量数据的机制。

🔂 2.2.1. 多路复用

交错发送,接收方重组织。HTTP2建立一个TCP连接,一个连接上面可以有任意多个流(stream),消息分割成一个或多个帧在流里面传输。帧传输过去以后,再进行重组,形成一个完整的请求或响应。这使得所有的请求或响应都无法阻塞。

🔂 2.2.2. 服务器推送

服务器端推送使得服务器可以预测客户端需要的资源,主动推送到客户端。

📶 2.3. https

HTTPS:Hypertext Transfer Protocol Secure,https是在http基础上进行了一个TSL/SSL加密。

对称加密:加密和解密都是使用同一个密钥。

非对称加密:加密和解密需要使用两个不同的密钥:公钥(public key)和私钥(private key)。