中级面试题
计算机网络-HTTP 常见的响应状态码
面试题目
计算机网络-HTTP常见的响应状态码
公司
某金融公司
招聘类型
社招
题目解析
HTTP 状态码(HTTP Status Code)是用以表示网页服务器超文本传输协议响应状态的 3 位数字代码。
所有状态码的第一个数字代表了响应的五种状态之一。后面两个数字代表了具体的状态。
HTTP 状态码一共分 5 种类型 1XX
、2XX
、3XX
、4XX
、5XX
1XX:临时响应
表示临时响应并需要请求者继续执行操作的状态代码。一般是告诉客户端,请求已经收到了,正在处理中。
因为是临时响应,所以只包含状态行和某些可选响应头信息,并以空行结束。
平常遇到这种响应状态码的时候很少。除非在某些试验条件下,服务器不可以向此类客户端发送 1XX 响应。
状态码 | 英文描述 | 中文描述 |
---|---|---|
100 | Continue | 继续。初始的请求已经接受,客户应当继续发送请求的其余部分 |
101 | Switching Protocols | 切换协议。服务器根据客户端的请求切换协议,只能切换到更高级新版协议 |
2XX:成功
表示服务器成功处理了请求的状态代码,代表请求已成功被服务器接收、理解、并处理。
状态码 | 英文描述 | 中文描述 |
---|---|---|
200 | OK | 请求成功。找到了该资源,并且一切正常,服务器已成功处理了请求 |
201 | Created | 已创建。成功请求并创建了新的资源 |
202 | Accepted | 已经接受请求,但处理尚未完成 |
203 | Non-Authoritative Information | 非授权信息。请求成功 |
204 | No Content | 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档 |
3XX:重定向
表示要完成请求,需要进一步操作。需要让客户端再发起一个请求以完成整个处理
状态码 | 英文描述 | 中文描述 |
---|---|---|
300 | Multiple Choices | 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表,供客户端选择 |
301 | Moved Permanently | 永久移动。请求的资源已被永久的移动到新 URI,返回信息会包括新的 URI。浏览器会自动定向到新 URI。今后任何新的请求都应使用新的 URI 代替 |
302 | Found | 临时移动。与 301 类似。但资源只是临时被移动。客户端应继续使用原有 URI |
303 | See Other | 查看其它地址。与 301 类似。使用 GET 和 POST 请求查看 |
304 | Not Modified | 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回,在指定日期之后修改的资源 |
305 | Use Proxy | 使用代理。所请求的资源必须通过代理访问 |
4XX:请求错误
表示请求可能出错,责任在客户端。比如如客户端的请求一个不存在的资源,客户端未被授权,禁止访问等,妨碍了服务器的处理。
状态码 | 英文描述 | 中文描述 |
---|---|---|
400 | Bad Request | 客户端请求的语法错误,服务器无法理解 |
401 | Unauthorized | 请求要求用户的身份认证 |
403 | Forbidden | 服务器理解请求客户端的请求,但是拒绝执行此请求 |
404 | Not Found | 服务器无法根据客户端的请求找到资源 |
405 | Method Not Allowed | 客户端请求中的方法被禁止 |
406 | Not Acceptable | 服务器无法根据客户端请求的内容特性完成请求 |
407 | Proxy Authentication Required | 请求要求代理的身份认证,与 401 类似,但请求者应当使用代理进行授权 |
408 | Request Time-out | 服务器等待客户端发送的请求时间过长,超时 |
409 | Conflict | 服务器完成客户端 PUT 请求返回此代码服务器处理请求时发生了冲突 |
410 | Gone | 客户端请求的资源已经不存在。资源以前有现在被永久删除 |
411 | Length Required | 服务器无法处理客户端发送的不带 Content-Length的 请求信息 |
413 | Request Entity Too Large | 由于请求的实体过大,服务器无法处理,因此拒绝请求 |
414 | Request-URI Too Large | 请求的 URI过 长,服务器无法处理 |
415 | Unsupported Media Type | 服务器无法处理请求附带的媒体格式 |
5XX:服务器错误
服务器在尝试处理请求时发生内部错误,责任在服务端。比如服务端抛出异常,路由出错,HTTP 版本不支持等
状态码 | 英文描述 | 中文描述 |
---|---|---|
500 | Internal Server Error | 服务器内部错误,无法完成请求 |
501 | Not Implemented | 服务器不支持请求的功能,无法完成请求 |
502 | Bad Gateway | 充当网关或代理的服务器,从远端服务器接收到了一个无效的请求 |
503 | Service Unavailable | 服务不可用。由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中 |
504 | Gateway Time-out | 充当网关或代理的服务器,未及时从远端服务器获取请求 |
505 | HTTP Version not supported | 服务器不支持请求的 HTTP 协议的版本,无法完成处理 |
答案
常见的HTTP响应状态码包括:
- 200 OK:请求成功。
- 201 Created:资源创建成功。
- 204 No Content:请求成功,无返回内容。
- 400 Bad Request:请求无效或格式错误。
- 401 Unauthorized:未授权或身份验证失败。
- 403 Forbidden:禁止访问。
- 404 Not Found:资源未找到。
- 500 Internal Server Error:服务器内部错误。
- 502 Bad Gateway:网关错误。
- 503 Service Unavailable:服务不可用。
HTTP 与 HTTPS 的区别
面试题目
计算机网络 - HTTP 与 HTTPS 的区别
公司
某金融公司
招聘类型
社招
题目解析
HTTP 与 HTTPS 的区别有下面几个方面:
-
HTTPS 比 HTTP 更安全
- HTTP 是超文本传输协议,连接简单无状态,信息明文传输
- HTTPS 通过 SSL/TLS 提供安全方式
-
HTTP 和 HTTPS 使用完全不同的连接方式
-
HTTP 和 HTTPS 用的端口也不一样
- HTTP 是 80 端口
- HTTPS 是 443 端口
-
HTTPS 协议需要到 CA 申请证书,使用混合加密的方式,也就是结合非对称加密和对称加密技术。
答案
HTTP(超文本传输协议)是明文传输协议,数据在传输过程中未加密,存在安全风险。HTTPS(安全超文本传输协议)在 HTTP 的基础上添加了 SSL/TLS 加密层,确保数据传输的安全性和隐私性,防止数据被窃取或篡改。HTTPS 使用证书进行身份验证,建立安全的加密连接。
TCP 和 UDP 协议有什么区别
面试题目
TCP 和 UDP 协议有什么区别?
公司
某金融公司
招聘类型
社招
题目解析
TCP 和 UDP 是两种不同的传输层协议,各有特点和适用场景。
TCP 传输控制协议:
- 面向连接;
- 一对一可靠性传输;
- 面向字节流是数据报处理的最小单位;
- 首部消耗 20 字节;
- 效率低,不具备实时性
UDP 用户数据报协议:
- 面向无连接;
- 支持一对多,多对一,一对一,多对多,不可靠传输,仅保证全部传输过去,面向报文不可分割是数据报处理的最小单位;
- 首部消耗 8 字节;
- 具有实时性;
- UDP 适合一次性传输较小数据的网络应用,如 DNS,SNMP 等。
答案
- TCP(传输控制协议)是面向连接的,提供可靠的数据传输,确保数据包按顺序到达且无丢失,适用于需要高可靠性的应用(如网页浏览)。
- UDP(用户数据报协议)是无连接的,传输速度快但不保证数据的顺序和完整性,适用于对速度要求高、容忍丢包的应用(如视频流)。
接口关联传参
面试题目
接口如果有关联如何传参?
公司
- 小米外包
招聘类型
社招
题目解析
在接口测试过程中,经常会有接口存在关联的情况,下一个接口依赖上一个接口的返回值信息。所以这道题首先要讲出来是使用什么工具去做接口测试的,然后再讲出来针对于这个接口关联的场景,需要用到这个工具的什么功能。
答案
- 使用 postman 做接口测试的时候,会通过后置处理,获取到接口的响应值信息,然后再 set 到变量中,给下一个接口去进行使用。
- 使用 Python+Requests 的话,就是获取接口返回值之后,然后赋值给一个变量,然后后面的接口可以直接调用这个变量。
如果定位接口异常原因
面试题目
如果定位接口异常原因
公司
某金融公司
招聘类型
社招
题目解析
定位接口异常原因需要系统化地分析问题,以确定根本原因。
答案
要分析接口异常的原因,可以遵循以下步骤:
- 查看日志:如果接口使用了日志系统,可以查看日志文件以了解接口在运行时的详细情况,包括请求参数、返回结果、异常堆栈信息等。
- 抓包分析:使用抓包工具可以捕获网络流量,包括请求和响应的数据包,然后对这些数据进行分析,确保发送的请求数据格式和内容正确。
- 检查依赖服务:确认外部依赖服务是否正常。
- 网络问题排查:检查网络连接是否稳定。
- 分析代码:检查对应代码中可能出现异常情况。
正向代理与反向代理的区别
面试题目
Nginx 中正向代理与反向代理的区别
公司
某金融公司
招聘类型
社招
题目解析
在了解之前,先思考一下这几个问题:
- 客户端(手机、网页)展示的数据从哪里来?
- 什么是代理?
- 正向代理和反向代理有什么区别?
代理
大家在刷手机的过程中,一定会注意到,如果把 wifi 或者流量的开关关闭,那么手机里面的短视频、朋友圈、消息都没有办法再去获取新的内容了。
这个原因就是因为手机的数据,并非来自手机本身,而是来自一个给它传输数据的地方,我们常常称之为,服务端。
好比人和人之间对话,如果双方使用不同的语言,那么是很难理解对方讲话的内容的。
在客户端和服务端也是同理,他们需要使用标准的协议来进行通信。
而代理,如果想一个生活化的比喻,就像媒人一样,在男女双方未见面之前,会把男方的信息转达给女方,也会把女方的信息知会给男方了解。
一般则是网络信息的一个中转站,它会把客户端的信息转发给服务端,也会把服务端的返回信息抓发给客户端。
正向代理与反向代理
正向代理
在学生时代,有一个喜欢的人,这是我们的目标,我们会找一个别的同学,他作为我们的代理,然后我们把礼物让这位同学转交给我们喜欢的人。
而我们喜欢的这个人,他只能收到礼物,但是不知道到底是谁送他的。
那什么是正向代理?正向代理有如下几个特点:
- 客户端向代理发送一个请求并指定目标(原始服务器)
- 代理向原始服务器转交请求并将获得的内容返回给客户端
- 服务器端只知道代理地址不知道客户端 ip 地址
- 客户端知道服务端地址,而代理不知道
应用场景
- VPN
- fiddler
反向代理
到了长大成人之后,没有找到合适对象的我们,又到了一个适婚年龄。渴望爱情、渴望婚姻的我打开一个相亲网站,将我的身份信息,发送给中间的媒人,媒人根据我们提供的条件,帮我们找合适的相亲对象。相亲对象再根据我们的信息选择是否与我们进行下一步约会,在这之前,我并不知道,媒人给我介绍的男生究竟是谁。
那什么又是反向代理呢?反向代理的特点是:
- 客户端向代理发送一个请求,但不指定(服务器)目标地址
- 代理向原始服务器转交请求并将获得的内容返回给客户端
- 客户端只知道代理地址,但不知道服务端地址
- 代理需要知道服务端地址
应用场景
- nginx
总结
由这两个图可知,正向代理和反向代理核心的区别就在于
- 客户端发送请求的时候是否知道服务端的地址
- 代理是否指定服务端地址
从应用场景考虑:
- 正向代理:
- VPN
- 反向代理:
- 保护和隐藏原始资源服务器
- 加密和 SSL 加速
- 负载均衡
- 缓存静态内容
- 压缩
- 减速上传
- 安全
- 外网发布
答案
- 正向代理:客户端通过正向代理访问互联网,代理服务器代表客户端发起请求,适用于绕过网络限制和隐藏客户端身份。
- 反向代理:客户端向反向代理服务器发起请求,反向代理代表服务器处理请求并返回结果,通常用于负载均衡、缓存和提高安全性。
正向代理是客户端的代理,反向代理是服务器的代理。
charles 如何抓取 https 的请求
面试题目
Charles 如何抓取 https 的请求?
公司
- metaapp
招聘类型
社招
题目解析
抓取 HTTPS 请求需要处理加密的 SSL/TLS 流量。
答案
- 安装 Charles 根证书:在 Charles 中打开“Help”菜单,选择“SSL Proxying”并安装根证书。
- 配置代理:在“SSL Proxying”设置中,添加要抓取的域名或 URL。
- 配置浏览器/应用:确保浏览器或应用的代理设置为 Charles 的代理地址和端口。这样,Charles 能解密并显示 HTTPS 请求。
tcp 三次握手四次挥手
面试题目
TCP 三次握手四次挥手
公司
某社交软件公司
招聘类型
社招
题目解析
概念
三次握手
在说对应概念之前,我们先来了解一个场景:
场景
无论是工作还是没有工作的小伙伴,肯定都见过或经历过表白事件。那如果想要进行一次表白或者求婚,我们需要怎么做?
无论是表白、求婚都需要有对应的人,当然不只能有这个人,还需要和这个人建立一个连接。
不能说你自己把自己关在屋子里面自言自语的说,你能嫁给我吗?对方都没有听到你说的话,怎么会做出反应呢?
所以,最好是两个人面对面,才可以让对方听到到自己要说的话。约出来,面对面,就开始进行表白:
当然这种关系都是双方是能面对面找到对方的,即都是保持双方畅通的。
对应为 TCP 协议的三次握手如下图:
第一次握手
Client 请求与 Server 端建立连接。
这里只是尝试的请求建立连接,A到B的连接是否建立成功不知道
第二次握手
Server 在收到 Client 的请求后,响应 ACK 报文
并分配资源。
这里 B 给 A 的 ACK报文 就表示 Server 同意 Client 跟它建立连接。
SYN
表示 Server 也想尝试 Client 建立连接,此时 Server 到 Client 的连接是否建立还不确定。
第三次握手
Client 给 Server 发送 ACK
响应。在 Server 收到 Client 的响应之后,此时双方的连接正式建立。
四次挥手
在说对应挥手概念之前,我们先来了解一个场景:
场景
还是和上面场景有关,结婚了然后在一起共同生活了一段时间后,发现双方不合适,需要离婚,要离开对方,就是挥手告别。那这个时候要经历的场景是什么呢?
对应为 TCP 协议的四次挥手如下图:
第一次挥手
客户端发送 FIN
给服务端,尝试请求断开单方的连接。
此时单方连接断开与否还不能确定,要等服务端确认,此时的客户端处于 FIN_WAIT1
状态。
第二次挥手
服务端收到断开请求后,服务端向客户端发送 ACK
回应,表示能断开了。
此时只是客户端到服务端连接断开,处于半断开状态。
服务端状态为:CLOSE_WAIT
第三次挥手
服务端给客户端发送 FIN
请求,此时服务端处于最后一次确认状态(LAST_ACK状态
)。
此时还是没有断开连接,还得等待客户端回应。
第四次挥手
客户端给服务端发送 ACK
回应。服务端收到之后,此时连接真正断开。
疑问点
1、为什么不是两次握手?为什么要三次?
因为真正连接的建立是要双方都建立到对方的连接。
如果只有两次握手,只能保证 A 到 B 的连接建立,但是 B 到 A 连接还未确认,所以第三次握手的主要作用就是 A 给 B 发送数据,如果没有第三次握手,A 就不会发送数据,此时 B 的状态一直为等待,造成的现象就是浪费资源。
2、为什么要进行四次挥手?为什么三次不行?
因为在挥手过程中会传递相关数据。其中,ACK 报文是用来的应答的,SYN 报文是用来同步的。
在 B 收到 A 的 FIN
请求后,不会立即关闭 SOCKET
,会先发送一个 ACK
作为回应。所以 A 需要等 B 的数据发送完成之后,B 会再给 A 发送一个 FIN
请求告诉 A 已经结束了,此时 B 发送给 A 的两次请求不能合并,所以必须是四次挥手。
答案
三次握手(建立连接):
- 客户端发送 SYN 包请求连接。
- 服务器响应 SYN-ACK 包确认。
- 客户端发送 ACK 包确认,连接建立。
四次挥手(断开连接):
- 客户端发送 FIN 包请求断开。
- 服务器回应 ACK 包确认。
- 服务器发送 FIN 包关闭连接。
- 客户端回应 ACK 包确认,连接断开。