HTTP使用指南 笔记 | 青训营

114 阅读7分钟

初始HTTP

HTTP,Hyper Text Transfer Protocol 超文本传输协议,是一个应用层(Application) 的协议,其基于传输层的TCP协议。

  • 每个HTTP的请求/报文可分为 请求Request响应Response 两部分

  • 简单的可扩展协议

  • 无状态(stateless)协议

    • 请求之间相互独立

1、HTTP请求方法

Method定义
GET请求一个指定资源的表示形式,只被用于获取数据
POST用于被实体 提交到 指定资源,通常导致在服务器上的状态变化
PUT用请求有效载荷 替换 目标资源的所有当前表示,即从客户端向服务器传送的数据取代指定的文档的内容
DELETE删除指定的资源
HEAD请求一个与GET请求的响应相同的响应,但没有响应体
CONNECT建立一个到由目标资源标识的服务器的隧道
OPTIONS用于描述目标资源的通信选项
TRACE沿着到目标资源的路径执行一个消息环回测试
PATCH用于对资源应用进行局部修改,是对PUT请求的补充
  • Method分类:

  • Safe(安全):

    不会修改服务器的数据的方法,如 GET HEAD OPTIONS

  • Idempontent(幂等):

    同样的请求被执行一次与连续执行多次的效果时一样的,服务器的状态也是一样的

    所有safe的方法都是idempotent的,如GET HEAD OPTIONS PUT DELETE

2、状态码

状态码.bmp

2.1 常见状态码

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

3、RESTful API

  • 一种API设计风格

  • RESTful:用 URL 定位资源、用HTTP动词(GET、POST、PUT、DELETE) 描述操作

  • REST,Representational State Transfer

    1、每一个URI代表一种资源(资源的唯一标识)

    2、客户端和服务器之间,传递这种资源的某种表现层;

    3、客户端通过HTTP method,对服务器端资源进行操作,实现"表现层状态转化"。

请求返回码含义
GET /zoos200 OK列出所有动物园,服务器成功返回了
POST /zoos201 CREATED新建一个动物园,服务器创建成功
PUT /zoos/ID400 INVALID REQUEST更新某个指定动物园的信息(提供该动物园的全部信息)用户发出的请求有错误,服务器没有进行新建或修改数据的操作,需修改请求的内容后再次发送请求
DELETE /zoos/ID204 NO CONTENT删除某个动物园,删除数据成功

4、采用请求头

请求头定义
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(适用于所有类型的请求,会精确到详细页面地址,csrf拦截常用到这个字段)
Origin最初的请求是从哪里发起的(只会精确到端口),Origin比Referer更尊重隐私
User-Agent用户客户端的一些必要信息,如UA头部等

5、常用响应头

响应头定义
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头部

6、缓存

缓存可分为 强缓存协商缓存

6.1 强缓存

  • Expires

    response header里的过期时间,浏览器再次加载资源时,如果在这个过期时间内,则命中强缓存

  • Cache-Control

    Cache-Control 出现于 HTTP/1.1

    Cache-Control 有很多属性,不同的属性代表的意义也不同:

    1.可存储性

    no-cache 不使用强缓存,需要与服务器验协商缓存验证

    no-store 缓存不应存储有关客户端请求或服务器响应的任何内容,即不使用任何缓存

    2、到期

    max-age 单位为秒,缓存存储的最大周期,相对于请求的时间超过这个周期被认为过期。

    3、重新验证/重新加载

    must-revalidate 一旦资源过期,在成功向原始服务器验证之前,不能使用

6.2 协商缓存

  • ETag/If-None-Match

    资源的特定版本的标识符,即资源指纹

    上一次返回的Etag值放到request header里的If-None-Match里。

    服务器接受到If-None-Match的值后,会拿来跟该资源文件的Etag值做比较。如果相同,则表示资源文件没有发生改变,命中协商缓存

  • Last-Modified/If-Modified-Since

    文件的最后修改时间

强缓存 & 协商缓存: 配合使用,可争取最大化的减少请求,利用缓存、节约流量。

6.3 缓存流程图

m5.bmp

7、cookie

set - cookie - response的设置:

参数定义
Name=value各种cookie的名称和值
Expires=Datecookie的有效期,缺省时cookie仅在浏览器关闭之前有效
Path=Path限制指定cookie的发送范围的文件目录,默认为当前
Domain=domain限制cookie生效的域名,默认为创建cookie的服务域名
secure仅在HTTPS安全连接时,才可以发送cookie
HttpOnlyJavaScript 脚本无法获得cookie
  • 在网页登录请求发送后,获得以下数据

capture_20230810163631899.bmp

HTTP/2

更快、更稳定、更简单

1、基本概念

  • **帧(frame) **: HTTP/2 通信的最小单位,每个帧都包含帧头,至少也会标识出当前帧所属的数据流

  • 二进制

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

2、多路复用

  • 交错发送,接收方重组织
  • 通过逐个发送的单个流接收成吨的媒体内容既低效又消耗资源
  • 允许客户端和服务器将HTTP有效负载分解为小型、独立和可管理的交错帧序列。然后在另一端重新组装此信息

m6.bmp

3、服务器推送

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

例如,如果客户端请求资源X并且知道资源Y被请求的文件引用,则服务器可以选择将Y与X一起推送,而不是等待适当的客户端请求

HTTPS

Hypertext Transfer Protocol Secure,超文本传输安全协议 ,是一种通过计算机网络进行安全通信的传输协议。

  • HTTP + 加密 + 认证 + 完整性保护 = HTTPS
  • 和http相比,https只是多一层保障数据安全的TLS/SSL协议
  • TLS/SSL协议,全程为安全传输层协议Transport Layer Security, 是介于TCP和HTTP之间的一层安全协议,是位于传输层与应用层之间的加密协议

总结

HTTP协议的发展说明着,用户的需求是推动技术发展的主要动力。技术还在不断发展进步,我们的学习任重道远,但也只有不断学习才能与时俱进、不被时代淘汰。

参考来源

《看了这篇http协议,你还敢说之前会吗? 》

《HTTP 缓存机制》

《全面了解什么是HTTP/2》

《HTTP和HTTPS详解)》