前言
今天为大家整理了一份各大佬在面试中遇到的HTTP知识点汇总,希望对大家有帮助,正文开始!
1.HTTP到底是什么
HTTP 是一种超文本传输协议(Hypertext Transfer Protocol),超文本传输协议该怎么理解是本文要讲的第一个问题,下面对 超文本、传输、协议 这三个名词做一下解释。
超文本
文本比较好理解就是字符串嘛,在计算机刚刚发明的时代网络通信传输的就只是字符串,后面随着技术的发展我们不满足仅限字符串的传输通信,还涉及到 图片、音视频、排版(CSS)、交互行为(JS)等资源的传输。之前传输的文本逐渐丰富起来,这个时候文本的语义就扩大了,我们把语义扩大后的文本称为超文本(Hypertext)。
传输
把上面提到过的超文本解析成二进制的数据包,通过传输载体比如网线等从一台设备传输到另一台设备的过程叫做传输。
协议
计算机之间相互通信需要遵守一定的规则,规则中定义了请求端如何传递参数,响应端如何解析数据,这个就是网络协议。
现在我们知道了 http(超文本传输协议)就是在多台网络设备之间传输 文字、图片、音视频 等超文本内容的具体规范和约定。 网络协议除了http之外,常见的还有 电子邮件传输协议 SMTP、文件上传协议 FTP、域名解析协议 DNS 。
2.一个HTTP请求是怎么完成通信的
常见的场景是客户端在本地发起请求,服务端接收请求响应数据,那这个过程中具体需要哪些机制配合协作呢,HTTP是一个网络通讯协议,除了HTTP之外你肯定还听过TCP/IP协议,TCP/IP是HTTP通信不可或缺的一部分。
3.HTTP 和 TCP/IP 的关系
为什么说TCP/IP是HTTP通信不可或缺的一部分,因为HTTP协议本身并不具备数据传输的能力,HTTP主要负责客户端和服务端之间请求应答的标准定义(比如报文),而数据传输依赖TCP/IP协议,所以理解HTTP要先从TCP/IP开始。
4.TCP/IP
TCP/IP(Transmission Control Protocol/Internet Protocol 传输控制协议/网际协议)主要作用是在不同网络之间实现信息数据的传输,我们虽然称之为TCP/IP协议,但它实际上是一个协议族,包含的不仅仅是 TCP协议 和 IP协议,还有 UDP、ICMP、ARP 等,TCP、IP协议是这里面最核心的两个协议所以称谓用它们指代。
TCP/IP的核心思想是分层管理,分为四层分别是 应用层、传输层、网络层和链路层。分层设计的好处是每一层都只负责自己的任务,不需要考虑其他层的任务,各层交互的时候只需要相互调用接口即可,当然也有劣势每次进行网络通信的时候都需要由下至上一层一层的传递信息,这对性能是有一定影响的。
- 应用层:加密、解密、数据格式化、域名解析,面向业务。HTTP、FTP、DNS
- 传输层:为两台计算机之间提供相互传输数据的能力。TCP、UDP
- 网络层:进行网络连接的建立和终止,以及IP地址的寻找。IP、ICMP、IPV6
- 链路层:用于处理网络连接的硬件部分。
4.1 HTTP
HTTP是TCP/IP应用层的协议,HTTP主要负责客户端和服务端之间请求应答的标准定义(比如报文)。
4.2 FTP
FTP是TCP/IP应用层的协议,FTP是文件传输协议,主要功能用于实现用户间文件分发共享。
4.3 DNS
我们通过IP可以定位带一台设备,当我们打开百度的IP地址http://202.108.22.5/
就打开了百度的首页,但是这个IP地址无疑是反人类的很难记,这就有了域名,所以我们打开http://www.baidu.com/
也能打开百度的首页。
域名到IP的解析就是 DNS(Domain Name System)做的事情了,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。
DNS协议是用来将域名转换为IP地址的,也可以将IP地址转换为相应的域名地址。目前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。
4.4 TCP
TCP(传输控制协议)是TCP/IP传输层的协议,TCP提供可靠的字节流传输能力,“字节流”是指,为了方便传输,将大块数据分割成以报文段为单位的数据包进行传输管理。而“可靠”是指,TCP协议为保证数据可靠的传输采用了三次握手策略。TCP协议把数据包送出去后,不会对传送后的情况置之不理,它一定会向对方确认是否成功送达,如有异常会启动重发机制。HTTP就是使用TCP提供的传输能力进行通信。
4.5 UDP
UDP(用户数据报协议)是TCP/IP传输层的协议,UDP也提供了数据传输能力,UDP协议定义了端口,当数据包到达主机以后,就可以根据端口号找到对应的应用程序了,比较简单,实现容易,但它没有确认机制,数据包一旦发出,无法知道对方是否收到,因此可靠性较差。UDP和TCP很相似,但是更简单,同时可靠性低于TCP,UDP的优点是快速、资源消耗少。
换句话说UDP只管发,不管对方收没收到,像直播、视频聊天这种就可以用UDP,因为这种需求对延时性要求很高,如果用TCP来做视频聊天,网络不好丢包严重时,那TCP就会不断重发,这样就会导致看到的画面可能还是对方一分钟之前的发送的,如果用UDP来做,网络不好时丢包就丢包了,丢包它也不会重发,而是一直发送最新的数据,所以就能保住我看到的画面都是实时的画面。
UDP还有一个应用场景是DNS解析,DNS解析也使用UDP协议,因为UDP协议只要一个请求、一个应答就好了,而使用TCP协议要三次握手四次挥手更加浪费网络资源,基于数据层面考虑,DNS数据包并不是那种大数据包,所以使用UDP不需要考虑分包,如果丢包那么就是全部丢包,如果收到了数据,那就是收到了全部数据,就算是丢包了重新请求一次就好了。
4.6 IP
IP是TCP/IP网络层的协议,IP协议规定使用IP地址来定位互联网上每一台唯一的设备,再利用 ARP 协议获取中转设备的 MAC 地址,以此解决寻址相关问题。
4.7 IPV6
IPV4的地址长度为4个8位字节,IPV4地址迟早会有枯竭的一天,为了解决这个问题,开始了IPV6的研发,IPv6的地址长度则是原来的4倍,一般写成8个16位字节,IPV6的地址是取之不尽,用之不竭的。
5.TCP与UDP
当客户端希望与服务器通过TCP建立连接时,首先会发送一个通信请求,这个请求必须被送到一个明确的地址,并收到回复,在双方完成“握手”过程后,TCP连接建立,直到其中一端关闭再次“握手”断开连接,这就是“三次握手和四次挥手”,而UDP则没有握手和挥手的机制,这也是TCP更加可靠的原因。
6.TCP三次握手
握手过程中使用了TCP的标志 SYN 和 ACK,发送端首先发送一个带有 SYN 标志的数据包给对方,接收端收到后,回传一个带有 SYN/ACK 标志的数据包以示传达确认信息,最后发送端再回传一个带 ACK 标志的确认包,代表握手结束。若在握手过程某个阶段中断,