前端增长(http)

204 阅读7分钟

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请求报文和响应报文有什么

image.png

image.png

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 值进行比对,如果两者一致代表签名是可信的。
  • 所以要校验签名的真伪,就需要获得证书颁发方的公钥,这个公钥就在颁发方的证书中。