1、如何理解URI
URI,全称为(Uniform Resource Identifier),也就是统一资源标识符,它的作用就是区分互联网上不同的资源。但是,它并不是我们常说的网址,网址指的是URL,实际上URI包含了URN和URL两个部分,由于 URL 过于普及,就默认将 URI 视为 URL 了。
URI 真正最完整的结构是这样的:
好像跟平时见到的不太一样!先别急,来一一拆解。scheme 表示协议名,比如http, https, file等等。后面必须和://连在一起。user:passwd@ 表示登录主机时的用户信息,不过很不安全,不推荐使用,也不常用。host:port 表示主机名和端口。path 表示请求路径,标记资源所在位置。query 表示查询参数,为key=val这种形式,多个键值对之间用&隔开。fragment 表示 URI 所定位的资源内的一个锚点,浏览器可以根据这个锚点跳转到对应的位置。
https://www.yuque.com/kenguba/upkpls/gisxr2/?word=1&name=kenguba#UrkH4
这个 URI 中
- https 即 scheme 部分
- www.yuque.com 为 host:port 部分(注意,http 和 https 的默认端口分别为80、443)
- kenguba/upkpls/gisxr2 为path部分
- word=1&name=kenguba 表示query部分
UrkH4 就是锚点
2、HTTP 超文本传输协议
HTTP 是一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」。
HTTP 报文结构是怎样的?
header + body 的结构,具体而言:
起始行 + 头部 + 空行 + 实体
由于 http 请求报文和响应报文是有一定区别,因此分开介绍
起始行
对于请求报文来说,起始行类似下面这样:也就是方法 + 路径 + http版本。
GET /home HTTP/1.1
对于响应报文来说,起始行一般张这个样:
HTTP/1.1 200 OK
响应报文的起始行也叫做状态行。由 http版本、状态码和原因三部分组成。
注意:在起始行中,每两个部分之间用空格隔开,最后一个部分后面应该接一个换行,严格遵循 ABNF 语法规范。
头部
展示一下请求头和响应头在报文中的位置:
空行
很重要,用来区分开头部和实体。问: 如果说在头部中间故意加一个空行会怎么样?那么空行后的内容全部被视为实体。
实体
就是具体的数据了,也就是 body 部分。请求报文对应请求体, 响应报文对应响应体。
HTTP 和 HTTPS 的主要区别是什么呢?
- 最简单的,HTTP 在地址栏上的协议是以
http://
开头; HTTPS 在地址栏上的协议是以https://
开头。 - HTTP 是未经安全加密的协议;而 HTTPS 是安全的协议,它通过 密钥交换算法 - 签名算法 - 对称加密算法 - 摘要算法 能够解决上面这些问题。
- HTTP 的默认端口是 80;而 HTTPS 的默认端口是 443。
3、说一下 GET 和 POST 的区别?
首先最直观的是语义上的区别。而后又有这样一些具体的差别:
- 从缓存的角度 GET 请求会被浏览器主动缓存下来,留下历史记录,而 POST 默认不会。
- 从编码的角度 GET 只能进行 URL 编码,只能接收 ASCII 字符,而 POST 没有限制。
- 从参数的角度 GET 一般放在 URL 中,参数长度有限制,不安全,POST 放在请求体中,能传输更多参数,更适合传输敏感信息。
- 从幂等性的角度 GET是幂等的,而POST不是。(幂等表示执行相同的操作,结果也是相同的)
- 从TCP的角度 GET 请求会把请求报文一次性发出去,而 POST 会分为两个 TCP 数据包,首先发 header 部分(预检请求),如果服务器响应 100(continue), 然后发 body 部分。(火狐浏览器除外,它的 POST 请求只发一个 TCP 包)
4、HTTP 常见的状态码,有哪些?
下面是常见的HTTP状态码:
- 200 - 请求成功
- 301 - 资源(网页等)被永久转移到其它URL
- 404 - 请求的资源(网页等)不存在
- 500 - 内部服务器错误
5、UDP 和 TCP 的区别
TCP 和 UDP 都位于计算机网络模型中的运输层,它们负责传输应用层产生的数据。下面来看看 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 和 UDP 的不同
1. 连接
TCP 是面向连接的传输层协议,传输数据前先要建立连接。
- UDP 是不需要连接,即刻传输数据。
2. 服务对象
- TCP 是一对一的两点服务,即一条连接只有两个端点。
- UDP 支持一对一、一对多、多对多的交互通信
3. 可靠性
- TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按需到达。
- UDP 是尽最大努力交付,不保证可靠交付数据。
4. 拥塞控制、流量控制
- TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。
- UDP 则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率。
5. 头部开销
- TCP 头部长度较长,会有一定的开销,首部在没有使用「选项」字段时是
20
个字节,如果使用了「选项」字段则会变长的。 UDP 头首部只有 8 个字节,并且是固定不变的,开销较小。
TCP 和 UDP 应用场景:
由于 TCP 是面向连接,能保证数据的可靠性交付,因此经常用于:
FTP
文件传输HTTP
/HTTPS
由于 UDP 面向无连接,它可以随时发送数据,再加上 UDP 本身的处理既简单又高效,因此经常用于:
- 包总量较少的通信,如
DNS
、SNMP
等 - 视频、音频等多媒体通信
- 广播通信
7、TCP 三次握手和四次挥手
TCP 三次握手和四次挥手也是面试题的热门考点,它们分别对应 TCP 的连接和释放过程。
TCP 三次握手
在了解具体的流程前,需要先认识几个概念
- SYN:它的全称是
Synchronize Sequence Numbers
,同步序列编号。是 TCP/IP 建立连接时使用的握手信号。在客户机和服务器之间建立 TCP 连接时,首先会发送的一个信号。客户端在接受到 SYN 消息时,就会在自己的段内生成一个随机值 X。 - SYN-ACK:服务器收到 SYN 后,打开客户端连接,发送一个 SYN-ACK 作为答复。确认号设置为比接收到的序列号多一个,即 X + 1,服务器为数据包选择的序列号是另一个随机数 Y。
- ACK:
Acknowledge character
, 确认字符,表示发来的数据已确认接收无误。最后,客户端将 ACK 发送给服务器。序列号被设置为所接收的确认值即 Y + 1。
- 发送端首先发送一个带有 SYN 标志(同步序列编号)的数据包给接收方;
- 接收方接收后,回传一个带有 SYN+ACK 标志的数据包传递确认信息,表示我收到了。
- 最后,发送方再回传一个带有 ACK 标志的数据包,代表我知道了,表示握手结束。
如果用现实生活来举例的话就是
小明 - 客户端 小红 - 服务端
- 小明给小红打电话,接通了后,小明说喂,能听到吗,这就相当于是连接建立。
- 小红给小明回应,能听到,你能听到我说的话吗,这就相当于是请求响应。
- 小明听到小红的回应后,好的,这相当于是连接确认。在这之后小明和小红就可以通话/交换信息了。
TCP 四次挥手
在连接终止阶段使用四次挥手,连接的每一端都会独立的终止。下面来描述一下这个过程。
客户端主动关闭连接 —— TCP 四次挥手
- 1 客户端打算关闭连接,此时会发送
FIN
报文,之后客户端进入FIN_WAIT_1
状态。 - 2 服务端收到该报文后,就向客户端发送
ACK
应答报文,接着服务端进入CLOSED_WAIT
状态。 - 客户端收到服务端的
ACK
应答报文后,之后进入FIN_WAIT_2
状态。 - 3 等服务端处理完数据后,也向客户端发送
FIN
报文,之后服务端进入LAST_ACK
状态。 - 4 客户端收到服务端的
FIN
报文后,回一个ACK
应答报文,之后进入TIME_WAIT
状态 - 服务器收到了
ACK
应答报文后,就进入了CLOSE
状态,至此服务端已经完成连接的关闭。 - 客户端在经过
2MSL
一段时间后,自动进入CLOSE
状态,至此客户端也完成连接的关闭。
还是可以用上面那个通话的例子来进行描述
- 小明对小红说,我所有的东西都说完了,我要挂电话了。
- 小红说,收到,我这边还有一些东西没说。
- 经过若干秒后,小红也说完了,小红说,我说完了,现在可以挂断了
- 小明收到消息后,又等了若干时间后,挂断了电话。
8、在浏览器中输入url地址 -> 显示主页的过程?
总体来说分为以下几个过程:
- DNS解析
- TCP连接
- 发送HTTP请求
- 服务器处理请求并返回HTTP报文
- 浏览器解析渲染页面
- 连接结束