HTTP重点摘要

时间:2021-09-06 06:07:53   收藏:0   阅读:12

本文简单介绍下HTTP协议的重点内容。

HTTP版本迭代

HTTP的性能细节

对性能的优化基本都是因为:

  1. tcp创建连接很费资源
  2. 服务器的tcp连接资源很宝贵

http1.1的流水线 pipeline
实际上,1.1的流水线并不是一个好的提升,在现代浏览器中并不是默认被启用的

流水线管道是类似一个FIFO队列,而且1.1没有用编号标识每个请求,所以所有的响应都只能有序发送,有序接受。如果一个请求比较耗时,或者被程序阻塞了,那么后面的请求即使处理完毕了,也要等待。这个问题又叫http的队首阻塞。

所以干脆使用多个连接,但浏览器一般又限制并发连接数量,所以性能有瓶颈。

http2的多路复用 multiplexing

可以实现一个连接中多个请求的并发,解决了1.1的队首阻塞问题。而实现多路复用的关键在于:分帧,并且给帧分配编号,传输到客户端可以自行组装,也就具备了乱序传输的能力。而要实现分帧,使用二进制是最方便的。

仍然存在的问题:tcp队首阻塞问题,TCP 的阻塞问题是因为传输阶段可能会丢包,一旦丢包就会等待重新发包,阻塞后续传输,这个问题虽然有滑动窗口(Sliding Window)这个方案,但是只能增强抗干扰,并没有彻底解决。

而http3改用udp彻底解决了这个问题。

浏览器会限制同一个服务器的并发连接数量

为了避免服务器负载太大,浏览器是会限制用户对单个服务器的并发数量的,曾经默认的连接数量为 2 到 3 个,现在比较常用的并发连接数已经增加到 6 个。这是一种Dos保护。

服务器推送

服务端可以在发送页面HTML时主动推送其它资源,而不用等到浏览器解析到相应位置,发起请求再响应。例如服务端可以主动把JS和CSS文件推送给客户端,而不需要客户端解析HTML时再发送这些请求。

首部压缩

一个连接中,多个http请求/响应通常头部大部分行是相同的。http2会在服务端和客户端各维护一张‘首部表’,来记录上一次发送请求/响应的的行。对于相同的行,下次请求不在重新发送,只发送不同的行。

状态码

HTTP消息

Http1.x :可读的消息

HTTP消息又分 请求消息/响应消息

  1. 起始行/状态行
    请求起始行:包括 HTTP方法 + 请求URL + HTTP版本
    响应状态行:包括 HTTP版本 + 状态码 + 状态码信息
  2. Http headers
    包括http的一些控制字段
  3. 一个空行
    用于分隔header和body
  4. Body
    请求:不是所有的请求都有一个 body:例如获取资源的请求,GET,HEAD,DELETE 和 OPTIONS,通常它们不需要 body。
    响应:不是所有的响应都有 body:具有状态码 (如 201 或 204) 的响应,通常不会有 body。

技术分享图片

Http2 :帧

http2相当于是在http1和传输层之间新增了一个 分帧层。

引入了一个额外的步骤:将 HTTP/1.x 消息分成帧并嵌入到流 (stream) 中。数据帧和报头帧分离,这将允许报头压缩。将多个流组合,使得多路复用 (multiplexing)一个TCP连接。

技术分享图片

HTTP请求类型

get和post区别

  1. GET 读取一个资源,可以将 GET 数据缓存在浏览器、代理或服务端。反复 GET 不应该对访问有副作用,没有副作用被称为幂等。
  2. POST 不是幂等的,意味着不能随意多次执行,因此不能缓存,如果尝试重新执行 POST 请求,浏览器会弹出提示框询问是否重新提交表单。
  3. GET 请求由 url 触发,想携带参数就只能在 url 后附加。
  4. POST 请求来自表单提交,表单数据被浏览器编码到 HTTP 请求报文的请求体中。主要有两种编码格式,一种是 application/..,用来传输简单数据;另一种是 multipart/form-data格式,用来传输文件,对二进制数据传输效率高。
  5. 从攻击的角度说,无论 GET 还是 POST 都不安全,因为 HTTP 是明文协议。
  6. GET 长度受限于 url,而 url 的长度由浏览器和服务器决定。
    POST 没有大小限制,起限制作用的是服务器的处理能力。
  7. GET请求的资源可以被浏览器缓存,POST不能被缓存。

cookie是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。Cookie 使基于无状态的HTTP协议记录稳定的状态信息成为了可能。

原文:https://www.cnblogs.com/cpcpp/p/15227403.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!