一个HTTP打趴80%面试者,你是否也被面试官”虐“?_http最全总结意外爆火,原因竟是有人用它吊打了面试官

TCP 和 UDP 都位于计算机网络模型中的运输层,它们负责传输应用层产生的数据。

UDP 是什么
UDP 的全称是 User Datagram Protocol,用户数据报协议。它不需要所谓的握手操作,从而加快了通信速度,允许网络上的其他主机在接收方同意通信之前进行数据传输。
数据报是与分组交换网络关联的传输单元。

UDP 的特点主要有

  • UDP 能够支持容忍数据包丢失的带宽密集型应用程序
  • UDP 具有低延迟的特点
  • UDP 能够发送大量的数据包
  • UDP 能够允许 DNS 查找,DNS 是建立在 UDP 之上的应用层协议。

TCP 是什么
TCP 的全称是Transmission Control Protocol ,传输控制协议。它能够帮助你确定计算机连接到 Internet 以及它们之间的数据传输。通过三次握手来建立 TCP 连接,三次握手就是用来启动和确认 TCP 连接的过程。一旦连接建立后,就可以发送数据了,当数据传输完成后,会通过关闭虚拟电路来断开连接。

TCP 的主要特点有

  • TCP 能够确保连接的建立和数据包的发送
  • TCP 支持错误重传机制
  • TCP 支持拥塞控制,能够在网络拥堵的情况下延迟发送
  • TCP 能够提供错误校验和,甄别有害的数据包。

TCP 和 UDP 的不同

为你罗列了一些 TCP 和 UDP 的不同点,方便理解,方便记忆。

在这里插入图片描述

TCP 三次握手和四次挥手,以其存在意义

三次握手
想想一下如果不确认一次,那么我们发送如果网络不好那么服务端一直开着一个链接,客户端过了一会又发了一个信息,
那么服务器端认为是一个新端请求就会创建一个新的链接,造成了不必要的性能的开销,三次握手就表示双方都收到,就不会出现上面的问题了

四次挥手
由于我们的tcp是双向的,我们客户端发送给服务端说可以断开链接了,但是可能我们的服务端端数据还没有发送完成,
所以需要进行一次确认,我们服务端发送一个ACK确认包给客户端,(我收到了),然后服务端再发送一个FIN包
(我已经传输完毕了),可以断开链接了,然后客户端确认到关闭端请求,给服务端发送收到端消息,双方就关闭了

http2和http1.1之间的区别

1.http2 是二进制传输
2.头部压缩,http1.1每次都要重复请求大量都头部信息,http2只需要发送改变都头部信息就可以
3.服务器推送:服务器可以在推送html的时候主动推送其他的一些资源
4.多路由复用:http1.1比如我们请求2个文件,一个文件请求需要1秒,第二个文件需要等待第一个请求响应结束,才可以进行三次握手传递文件,那么时间就会增加,而http2中按流等形式进行传输,帧是流等最小单位,帧中带有下标,可以识别从哪个流来的,服务器会将帧数据重新整合成流,也就是多路由复用

请你说一下 HTTP 常见的请求头

1、GET或POST:请求类型,后接请求资源、协议和版本  
2、Host:主机和端口  
3、Connection:是否使用持续连接  
4、User-Agent:客户端浏览器的名称  
5、Accept:浏览器可接受的MIME类型  
6、Accept-Encoding:浏览器知道如何解码的数据编码类型  
7、Accept-Language:浏览器指定的语言  
8、Accept-Charset:浏览器支持的字符编码  
9、Cookie:保存的Cookie对象
10、Cache-Control:用来指定当前的请求/回复中的,是否使用缓存机制。
11、Expect:表示客户端要求服务器做出特定的行为

http的状态码有哪些

HTTP状态码表示客户端HTTP请求的返回结果、标识服务器处理是否正常、表明请求出现的错误等。

在这里插入图片描述

cookie与session区别
  • cookie将状态保存在客户端,session将状态保存在服务端。
  • session相对于cookie要安全,但cookie不需要占用服务器的资源。
  • 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
地址栏输入 URL 发生了什么

1、浏览器开启一个线程来处理,对URL解析,如果有http协议就按照web方式进行处理;
2、执行浏览器内核中的对应方法,比如webview的urlLoad事件;
3、进行dns解析,找到对应的IP地址;
4、进行http协议对话,客户端发送请求报头;
5、进入到服务器的WebServer;
6、进入部署好的后端应用,如 PHP、Java、JavaScript、Python 等,找到对应的请求处理;
7、处理结束回馈报头,此处如果浏览器访问过,缓存上有对应资源,会与服务器最后修改时间对比,一致则返回304;
8、浏览器开始下载html文档(响应报头,状态码200),同时使用缓存;
9、文档树建立,根据标记请求所需指定MIME类型的文件(比如css、js),同时设置了cookie;
10、页面开始渲染DOM,JS根据DOM API操作DOM,执行事件绑定等,页面显示完成。

HTTPS 的工作原理

我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取,所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议。

客户端在使用HTTPS方式与Web服务器通信时有以下几个步骤,如图所示。

(1)客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。
(2)Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
(3)客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
(4)客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
(5)Web服务器利用自己的私钥解密出会话密钥。
(6)Web服务器利用会话密钥加密与客户端之间的通信。

在这里插入图片描述

http的响应报文是什么样的?

请求报文有4部分组成:

  • 响应行
  • 响应头
  • 空行
  • 响应体
    在这里插入图片描述
  • 响应行: 由协议版本,状态码和状态码的原因短语组成,例如HTTP/1.1 200 OK。
  • 响应头:响应部首组成
  • 响应体:服务器响应的数据
讲一讲强缓存和协议缓存?

http的缓存分为强缓存和协商缓存
强缓存:
cache-control : max-age: 22222 //缓存时间
from memory cache // 内存
from disk cache // 硬盘
协商缓存
Last-modified // 当前服务器时间
ETag // 当前服务器的哈希

判断过程:先判断当前强缓存时间是否过期,没有过去就去请求本地的内存和硬盘,过期就去协商缓存,返回if-Modified-Since(Last-modified) 和 if-no-Match(ETag)来判断当前文件是否有更新,如果没有更新返回304,更新则返回200和当前更新文件

SSL 连接断开后如何恢复?

一共有两种方法来恢复断开的 SSL 连接,一种是使用 session ID,一种是 session ticket。

通过session ID

使用 session ID 的方式,每一次的会话都有一个编号,当对话中断后,下一次重新连接时,只要客户端给出这个编号,服务器如果有这个编号的记录,那么双方就可以继续使用以前的秘钥,而不用重新生成一把。目前所有的浏览器都支持这一种方法。但是这种方法有一个缺点是,session ID 只能够存在一台服务器上,如果我们的请求通过负载平衡被转移到了其他的服务器上,那么就无法恢复对话。

通过session ticket
session ticket 是服务器在上一次对话中发送给客户的,这个 ticket 是加密的,只有服务器能够解密,里面包含了本次会话的信息,比如对话秘钥和加密方法等。这样不管我们的请求是否转移到其他的服务器上,当服务器将 ticket 解密以后,就能够获取上次对话的信息,就不用重新生成对话秘钥了。

HTTP 重定向和跳转

主动跳转:跳转动作是由浏览器的使用者主动发起的;
被动跳转:跳转动作是由服务器发起的,浏览器使用者无法控制。

重定向状态码

  • 301:俗称“永久重定向”,原URI已经“永久”性地不存在了,今后的所有请求都必须改用新的URI.
  • 302: 俗称“临时重定向”,原URI处于“临时维护”状态,新的URI是起“顶包”作用的临时工。
  • 303 See Other: 类似302,但要求重定向后的请求改为GET方法,访问一个结果页面,避免POST/PUT重复操作;
  • 307 Temporary Redirect: 类似302,但重定向后请求里的方法和实体不允许变动,含义比302更明确;

总结

  • 框架原理真的深入某一部分具体的代码和实现方式时,要多注意到细节,不要只能写出一个框架。

  • 算法方面很薄弱的,最好多刷一刷,不然影响你的工资和成功率😯

  • 在投递简历之前,最好通过各种渠道找到公司内部的人,先提前了解业务,也可以帮助后期优秀 offer 的决策。

  • 要勇于说不,对于某些 offer 待遇不满意、业务不喜欢,应该相信自己,不要因为当下没有更好的 offer 而投降,一份工作短则一年长则 N 年,为了幸福生活要慎重选择!!!

喜欢这篇文章文章的小伙伴们点赞+转发支持,你们的支持是我最大的动力!

  • 19
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值