1、http 常⻅字段有哪些?
- Host 字段,客户端发送请求时,⽤来指定服务器的域名。
- Content-Length 字段,服务器在返回数据时,会有 Content-Length 字段,表明本次回应的数据⻓度。
- Connection 字段,keep-alive常⽤于客户端要求服务器使⽤ TCP 持久连接,以便其他请求复⽤。
- Content-Type 字段,⽤于服务器回应时,告诉客户端,本次数据是什么格式。
- Accept 字段,客户端请求的时候声明⾃⼰可以接受哪些数据格式。
- Content-Encoding 字段,说明数据的压缩⽅法。表示服务器返回的数据使⽤了什么压缩格式
1、说⼀下 GET 和 POST 的区别?(百度,注意细节)
- Get ⽅法的含义是请求从服务器获取资源,这个资源可以是静态的⽂本、⻚⾯、图⽚视频等。
GET ⽅法就是安全且幂等的,它是「只读」操作,⽆论操作多少次,服务器上的数据都是安全
的,且每次的结果都是相同的。
- POST ⽅法则是相反操作,它向 URI 指定的资源提交数据,数据就放在报⽂的 body ⾥。
- POST 因为是「新增或提交数据」的操作,会修改服务器上的资源,所以是不安全的,且多次提交数据就会创建多个资源,所以不是幂等的。
2、 HTTP(1.1) 的优缺点有哪些,怎么体现的?
HTTP 最凸出的优点是「简单、灵活和易于扩展、应⽤⼴泛和跨平台」。
- 简单:
HTTP 基本的报⽂格式就是 header + body ,头部信息也是 key-value 简单⽂本的形式, 易于理解。- 灵活和易于扩展:
HTTP协议⾥的各类请求⽅法、 URI/URL、状态码、头字段等每个组成要求都没有被固定死,都允许开发⼈员⾃定义和扩充。
HTTP 由于是⼯作在应⽤层( OSI 第七层),则它下层可以随意变化。
HTTPS 也就是在 HTTP 与 TCP 层之间增加了 SSL/TLS 安全传输层, HTTP/3 甚⾄把 TCP 层换成了基于 UDP 的QUIC。- 应⽤⼴泛和跨平台:
缺点:
- HTTP 协议⾥有优缺点⼀体的双刃剑,分别是「⽆状态、明⽂传输」,同时还有⼀⼤缺点「不安全」
⽆状态的好处:不需要额外的资源来记录状态信息,这能减轻服务器的负担
⽆状态的坏处:既然服务器没有记忆能⼒,它在完成有关联性的操作时会⾮常麻烦,解法⽅案有很多种,其中⽐较简单的⽅式⽤ Cookie 技术
使⽤明⽂(不加密)被窃听、(HTTPS中TLS协议 信息加密:交互信息⽆法被窃取 - 混合加密)
不验证通信⽅的身份,伪装、(HTTPS中TLS协议 身份证书:是真的淘宝⽹ - 服务器公钥放⼊到数字证书)
⽆法证明报⽂的完整性,篡改(HTTPS中TLS协议 校验机制:⽆法篡改通信内容 - 摘要算法)
HTTP 的安全问题,可以⽤ HTTPS 的⽅式解决,也就是通过引⼊ SSL/TLS 层,使得在安全上达到了极致
3、 HTTP/1.1 的性能如何?
- ⻓连接,( HTTP/1.0短连接)这种⽅式的好处在于减少了TCP 连接的重复建⽴和断开所造成的额外开销,减轻了服务器端的负载。
- 管道⽹络传输:⻓连接的⽅式,这使得管道(pipeline)⽹络传输成为了可能,在同⼀个 TCP 连接⾥⾯,客户端可以发起多个请求,只要第⼀个请求发出去了,不必等其回来,就可以发第⼆个请求出去,可以减少整体的响应时间
- 队头阻塞:服务器还是按照顺序,先回应 A 请求,完成后再回应 B 请求。要是前⾯的回应特别慢,后⾯就会有许多请求排队等着。这称为「队头堵塞」。
4、HTTP 与 HTTPS 有哪些区别?
- HTTP 是超⽂本传输协议,信息是明⽂传输,存在安全⻛险的问题。 HTTPS 则解决 HTTP 不安全的缺陷,在TCP 和 HTTP ⽹络层之间加⼊了 SSL/TLS 安全协议,使得报⽂能够加密传输。
- HTTP 连接建⽴相对简单, TCP 三次握⼿之后便可进⾏ HTTP 的报⽂传输。⽽ HTTPS 在 TCP 三次握⼿之后,还需进⾏ SSL/TLS 的握⼿过程,才可进⼊加密报⽂传输
- HTTP 的端⼝号是 80, HTTPS 的端⼝号是 443
- HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的
5、浏览器中输入URL,发生了什么?
- 1、浏览器要将URL解析为IP地址。
- 解析域名就要用到DNS协议,首先主机会查询DNS的缓存,如果没有就给本地DNS发送查询请求。DNS查询分为两种方式,一种是递归查询,一种是迭代查询。如果是迭代查询,本地的DNS服务器,向根域名服务器发送查询请求,根域名服务器告知该域名的一级域名服务器,然后本地服务器给该一级域名服务器发送查询请求,然后依次类推直到查询到该域名的IP地址。DNS服务器是基于UDP的,因此会用到UDP协议。
- 2、得到IP地址后,浏览器就要与服务器建立一个http连接。
- http生成一个get请求报文,将该报文传给TCP层处理,所以还会用到TCP协议。如果采用https还会使用https协议先对http数据进行加密。TCP层如果有需要先将HTTP数据包分片,分片依据路径MTU和MSS。TCP的数据包然后会发送给IP层,用到IP协议。IP层通过路由选路,一跳一跳发送到目的地址。当然在一个网段内的寻址是通过以太网协议实现(也可以是其他物理层协议,比如PPP,SLIP),以太网协议需要直到目的IP地址的物理地址,有需要ARP协议。
6、TCP怎么保证可靠性
- 1、序列号、确认应答、超时重传
- 数据到达接收方,接收方需要发出一个确认应答,表示已经收到该数据段,并且确认序号会说明了它下一次需要接收的数据序列号。如果发送发迟迟未收到确认应答,那么可能是发送的数据丢失,也可能是确认应答丢失,这时发送方在等待一定时间后会进行重传。这个时间一般是2*RTT(报文段往返时间)+一个偏差值。
- 2、窗口控制与高速重发控制/快速重传(重复确认应答)
- TCP会利用窗口控制来提高传输速度,意思是在一个窗口大小内,不用一定要等到应答才能发送下一段数据,窗口大小就是无需等待确认而可以继续发送数据的最大值。如果不使用窗口控制,每一个没收到确认应答的数据都要重发。
- 使用窗口控制,如果数据段1001-2000丢失,后面数据每次传输,确认应答都会不停地发送序号为1001的应答,表示我要接收1001开始的数据,发送端如果收到3次相同应答,就会立刻进行重发;但还有种情况有可能是数据都收到了,但是有的应答丢失了,这种情况不会进行重发,因为发送端知道,如果是数据段丢失,接收端不会放过它的,会疯狂向它提醒
- 3、拥塞控制
- 如果把窗口定的很大,发送端连续发送大量的数据,可能会造成网络的拥堵(大家都在用网,你在这狂发,吞吐量就那么大,当然会堵),甚至造成网络的瘫痪。所以TCP在为了防止这种情况而进行了拥塞控制。
- 慢启动:定义拥塞窗口,一开始将该窗口大小设为1,之后每次收到确认应答(经过一个rtt),将拥塞窗口大小*2。
- 拥塞避免:设置慢启动阈值,一般开始都设为65536。拥塞避免是指当拥塞窗口大小达到这个阈值,拥塞窗口的值不再指数上升,而是加法增加(每次确认应答/每个rtt,拥塞窗口大小+1),以此来避免拥塞。
- 将报文段的超时重传看做拥塞,则一旦发生超时重传,我们需要先将阈值设为当前窗口大小的一半,并且将窗口大小设为初值1,然后重新进入慢启动过程。
- 快速重传:在遇到3次重复确认应答(高速重发控制)时,代表收到了3个报文段,但是这之前的1个段丢失了,便对它进行立即重传。然后,先将阈值设为当前窗口大小的一半,然后将拥塞窗口大小设为慢启动阈值+3的大小。这样可以达到:在TCP通信时,网络吞吐量呈现逐渐的上升,并且随着拥堵来降低吞吐量,再进入慢慢上升的过程,网络不会轻易的发生瘫痪。
5、HTTPS 是如何建⽴连接的?其间交互了什么?
6、HTTP/1.1、 HTTP/2