IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> HTTP协议 -> 正文阅读

[网络协议]HTTP协议

HTTP/1.0/1.1/2.0

HTTP 0.9

1991年,原型版本,功能简陋,只有一个命令GET,只支持纯文本内容,该版本已过时。

HTTP 1.0

任何格式的内容都可以发送,这使得互联网不仅可以传输文字,还能传输图像、视频、二进制等文件。除了GET命令,还引入了POST命令和HEAD命令。http请求和回应的格式改变,除了数据部分,每次通信都必须包括头信息(HTTP header),用来描述一些元数据。只使用 header 中的 If-Modified-Since 和 Expires 作为缓存失效的标准。不支持断点续传,也就是说,每次都会传送全部的页面和数据。通常每台计算机只能绑定一个 IP,所以请求消息中的 URL 并没有传递主机名(hostname)

HTTP 1.1

http1.1是目前最为主流的http协议版本,从1999年发布至今,仍是主流的http协议版本。

引入了持久连接( persistent connection),即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive。长连接的连接时长可以通过请求头中的 keep-alive 来设置引入了管道机制( pipelining),即在同一个TCP连接里,客户端可以同时发送多个
请求,进一步改进了HTTP协议的效率。HTTP 1.1 中新增加了 E-tag,If-Unmodified-Since, If-Match, If-None-Match 等缓存控制标头来控制缓存失效。支持断点续传,通过使用请求头中的 Range 来实现。使用了虚拟网络,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。新增方法:PUT、 PATCH、 OPTIONS、 DELETE。

http1.x版本问题

在传输数据过程中,所有内容都是明文,客户端和服务器端都无法验证对方的身份,无法保证数据的安全性。HTTP/1.1 版本默认允许复用TCP连接,但是在同一个TCP连接里,所有数据通信是按次序进行的,服务器通常在处理完一个回应后,才会继续去处理下一个,这样子就会造成队头阻塞。http/1.x 版本支持Keep-alive,用此方案来弥补创建多次连接产生的延迟,但是同样会给服务器带来压力,并且的话,对于单文件被不断请求的服务,Keep-alive会极大影响性能,因为它在文件被请求之后还保持了不必要的连接很长时间。

HTTP 2.0

二进制分帧 这是一次彻底的二进制协议,头信息和数据体都是二进制,并且统称为"帧":头信息帧和数据帧。头部压缩 HTTP 1.1版本会出现 「User-Agent、Cookie、Accept、Server、Range」 等字段可能会占用几百甚至几千字节,而 Body 却经常只有几十字节,所以导致头部偏重。HTTP 2.0 使用 HPACK 算法进行压缩。多路复用 复用TCP连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,且不用按顺序一一对应,这样子解决了队头阻塞的问题。服务器推送 允许服务器未经请求,主动向客户端发送资源,即服务器推送。请求优先级 可以设置数据帧的优先级,让服务端先处理重要资源,优化用户体验。

HTTP 和 HTTPS

HTTP 是明文传输协议,HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。HTTPS比HTTP更加安全,对搜索引擎更友好,利于SEO,谷歌、百度优先索引HTTPS网页。HTTPS标准端口443,HTTP标准端口80。HTTPS需要用到SSL证书,而HTTP不用。
HTTPS:

  • 对数据进行加密,并建立一个信息安全通道,来保证传输过程中的数据安全;
  • 对网站服务器进行真实身份认证。

HTTP 请求方法

GET:通常同于获取资源
POST:提交数据,上传数据
PUT:修改数据
OPTIONS:可对资源实行的请求方法,用于跨域请求

HTTP 常见状态码

1xx:协议处理中状态
2xx:成功
3xx:重定向(301永久重定向,302临时重定向,304命中缓存)
4xx:请求报文有误
5xx:服务器端发生错误

GET 和 POST 的区别

缓存角度:GET请求会被浏览器主动缓存下来,留下历史记录
参数角度:GET放在url中,因此安全性不高,且浏览器地址栏有长度限制

HTTP缓存策略

强缓存

Expires(http1.0)

Expires即过期时间,时间是相对于服务器的时间而言的,存在于服务端返回的响应头中,在这个过期时间之前可以直接从缓存里面获取数据,无需再次请求。比如下面这样:
Expires:Mon, 29 Jun 2020 11:10:23 GMT复制代码
表示该资源在2020年7月29日11:10:23过期,过期时就会重新向服务器发起请求。
这个方式有一个问题:「服务器的时间和浏览器的时间可能并不一致」,所以HTTP1.1提出新的字段代替它。

Cache-Control(http1.1)

这个字段采用的时间是过期时长
Cache-Control:max-age=6000

当Expires和Cache-Control同时存在时,优先考虑Cache-Control。

协商缓存

当缓存资源失效了,也就是没有命中强缓存,接下来就进入协商缓存

Last-Modified

这个字段表示的是「最后修改时间」。在浏览器第一次给服务器发送请求后,服务器会在响应头中加上这个字段。
浏览器接收到后,「如果再次请求」,会在请求头中携带If-Modified-Since字段,这个字段的值也就是服务器传来的最后修改时间。
服务器拿到请求头中的If-Modified-Since的字段后,其实会和这个服务器中该资源的最后修改时间对比:
如果请求头中的这个值小于最后修改时间,说明是时候更新了。返回新的资源,跟常规的HTTP请求响应的流程一样。否则返回304,告诉浏览器直接使用缓存。

ETag

ETag是服务器根据当前文件的内容,对文件生成唯一的标识,比如MD5算法,只要里面的内容有改动,这个值就会修改,服务器通过把响应头把该字段给浏览器。
浏览器接受到ETag值,会在下次请求的时候,将这个值作为「If-None-Match」这个字段的内容,发给服务器。
服务器接收到「If-None-Match」后,会跟服务器上该资源的「ETag」进行比对👇

如果两者一样的话,直接返回304,告诉浏览器直接使用缓存如果不一样的话,说明内容更新了,返回新的资源,跟常规的HTTP请求响应的流程一样

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-06 11:28:49  更:2021-09-06 11:29:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:48:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码