http发展史是怎样的
- 0.9 传输http超文本,只有get请求,没有 HTTP 请求头和请求体,服务器也没有返回头信息,回的文件内容是以 ASCII 字符流来传输的(html格式用ASCII码就可)
- 1.0 支持多种类型的文件下载,引入了请求头和响应头,它们都是以为 Key-Value 形式保存的,在 HTTP 发送请求时,会带上请求头信息,服务器返回数据时,会先返回响应头信息
- 1.1 增加了持久连接的方法,它的特点是在一个 TCP 连接上可以传输多个 HTTP 请求,只要浏览器或者服务器没有明确断开连接,那么该 TCP 连接会一直保持。(持久连接在 HTTP/1.1 中是默认开启的,所以你不需要专门为了持久连接去 HTTP 请求头设置信息,如果你不想要采用持久连接,可以在 HTTP 请求头中加上Connection: close。)
- 2.0 一个域名只使用一个 TCP 长连接来传输数据,这样整个页面资源的下载过程只需要一次慢启动,同时也避免了多个 TCP 连接竞争带宽所带来的问题,且请求都是并行的,这样可以解决队头阻塞的问题。其具体实现是多路复用(核心原理是二进制分帧层)。除此之外,http2.0还可以设置请求优先级、压缩头部等。
- 3.0 (还没广泛应用)使用了 UDP 协议。实现了数据流的单独传输,就解决了 TCP 中队头阻塞的问题(2.0里存在的问题)。(但据统计使用 QUIC 协议时,大约有 3%~7% 的丢包率。)
http3.0出现的意义
虽然2.0的多路复用解决了请求的队头阻塞,但如果tcp里的传送的数据包有出现丢包,整个tcp的连接就会处于暂停状态,这种称为tcp的队头阻塞。(这种情况下,1.1反而更靠谱,因为可以开启多个tcp,一个挂了还有其它的)
http2里的二进制帧原理
- 首先,浏览器准备好请求数据,包括了请求行、请求头等信息,如果是 POST 方法,那么还要有请求体。
- 这些数据经过二进制分帧层处理之后,会被转换为一个个带有请求 ID 编号的帧,通过协议栈将这些帧发送给服务器。
- 服务器接收到所有帧之后,会将所有相同 ID 的帧合并为一条完整的请求信息。
- 然后服务器处理该条请求,并将处理的响应行、响应头和响应体分别发送至二进制分帧层。
- 同样,二进制分帧层会将这些响应数据转换为一个个带有请求 ID 编号的帧,经过协议栈发送给浏览器。浏览器接收到响应帧之后,会根据 ID 编号将帧的数据提交给对应的请求。
tcp和udp有什么区别
udp是http3使用的,主要是用于解决在 TCP 传输过程中,由于单个数据包的丢失而造成的阻塞称为 TCP 上的队头阻塞。(有测试数据表明,当系统达到了 2% 的丢包率时,HTTP/1.1 的传输效率反而比 HTTP/2 表现得更好。因为http1.1是多tcp连接的)
UDP 不提供可靠性的传输(没有确认机制,没有了三次握手),但 QUIC 在 UDP 的基础之上增加了一层来保证数据可靠性传输。它提供了数据包重传、拥塞控制以及其他一些 TCP 中存在的特性。
UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
http2相对于http1有什么优点
-
引用 二进制分帧层,实现了多路复用
(一个域名只用一个tcp长连接)
(解决了原本的tcp慢启动,多条tcp连接竞争的问题)
(消除了对头阻塞问题,原本的等待请求完成后才能去请求下一个资源,这种方式无疑是最慢的,所以 HTTP/2 需要实现资源的并行请求,也就是任何时候都可以将请求发送给服务器,而并不需要等待其他请求的完成,然后服务器也可以随时返回处理好的请求资源给浏览器。)
-
可设置请求优先级
-
服务器推送
-
头部压缩
http请求报文和响应报文有什么
http请求头有哪些?
- Accpet
告诉服务端,客户端接收什么类型的响应
- Referer
表示这是请求是从哪个URL进来的,比如想在网上购物,但是不知道选择哪家电商平台,你就去问度娘,说哪家电商的东西便宜啊,然后一堆东西弹出在你面前,第一给就是某宝,当你从这里进入某宝的时候,这个请求报文的Referer就是www.baidu.com
- Cache-Control
对缓存进行控制,如一个请求希望响应的内容在客户端缓存一年,或不被缓可以通过这个报文头设置
- Accept-Encoding
这个属性是用来告诉服务器能接受什么编码格式,包括字符编码,压缩形式(一般都是压缩形式)
例如:Accept-Encoding:gzip, deflate(这两种都是压缩格式)
- Host
指定要请求的资源所在的主机和端口
-User-Agent
告诉服务器,客户端使用的操作系统、浏览器版本和名称
作者:CodeGod007 链接:www.jianshu.com/p/9a68281a3… 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
http响应头有什么
- Cache-Control
响应输出到客户端后,服务端通过该属性告诉客户端该怎么控制响应内容的缓存
- ETag
表示你请求资源的版本,如果该资源发生啦变化,那么这个属性也会跟着变
- Location
在重定向中或者创建新资源时使用
- Set-Cookie
服务端可以设置客户端的cookie
作者:CodeGod007 链接:www.jianshu.com/p/9a68281a3… 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
http状态码有哪些?
1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误
301和302有什么区别
301 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替。且是有缓存的
302 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
https的安全是怎么做的?
CA与数字证书。
- 就是把公钥放入一个证书中,该证书包含服务端的信息,比如颁发者、域名、有效期
- 为了保证证书是可信的,需要由一个可信的第三方来对证书进行签名。这个第三方一般是证书的颁发机构,也称 CA(Certification Authority,认证中心)。
- 证书签名就是将证书信息进行 MD5 计算,获取唯一的哈希值,然后再利用证书颁发方的私钥对其进行加密生成。
- 校验过程与之相反,需要用到证书颁发方的公钥对签名进行解密,然后计算证书信息的 MD5 值
- 将解密后的 MD5 值与计算所得的 MD5 值进行比对,如果两者一致代表签名是可信的。
- 所以要校验签名的真伪,就需要获得证书颁发方的公钥,这个公钥就在颁发方的证书中。