面试题集合(网络篇)
1. TCP/IP 四层网络模型
第一层:应用层,主要有负责web浏览器的 HTTP 协议, 文件传输的 FTP 协议,负责电子邮件的 SMTP 协议,负责域名系统的 DNS 等。
第二层:传输层,主要是有可靠传输的 TCP 协议,特别高效的 UDP 协议。主要负责传输应用层的数据包。
第三层:网络层,主要是 IP 协议。主要负责寻址(找到目标设备的位置)
第四层:数据链路层,主要是负责转换数字信号和物理二进制信号。
2. 用户输入url到页面展示的过程
DNS解析
域名到真实IP的寻址过程
发起TCP连接
三次握手🤝,确定 client ,server 双端的接受发送能力
发起Http请求
服务器处理请求并返回HTTP报文
浏览器解析渲染页面
3. 说一下 Http 缓存策略,有什么区别,分别解决了什么问题
浏览器每次发起请求时,先在本地缓存中查找结果以及缓存标识,根据缓存标识来判断是否使用本地缓存。如果缓存有效,则使用本地缓存;否则,则向服务器发起请求并携带缓存标识。根据是否需向服务器发起HTTP请求,将缓存过程划分为两个部分:强制缓存和协商缓存,强缓优先于协商缓存。
- 强缓存,服务器通知浏览器一个缓存时间,在缓存时间内,下次请求,直接用缓存,不在时间内,执行比较缓存策略。
- 协商缓存,让客户端与服务器之间能实现缓存文件是否更新的验证、提升缓存的复用率,将缓存信息中的Etag和Last-Modified通过请求 发送给服务器,由服务器校验,返回304状态码时,浏览器直接使用缓存。
HTTP缓存都是从第二次请求开始的:
- 第一次请求资源时,服务器返回资源,并在response header中回传资源的缓存策略;
- 第二次请求时,浏览器判断这些请求参数,击中强缓存就直接200,否则就把请求参数加到request header头中传给服务器,看是否击中协商缓存,击中则返回304,否则服务器会返回新的资源。这是缓存运作的一个整体流程图:
4. 常见的Http状态码
- 200 OK:表示从客户端发送给服务器的请求被正常处理并返回
- 204 No Content:表示客户端发送给服务端的请求得到了成功处理,但在返回的响应报文中不含实体的主体部分(没有资源可以返回)
- 301 Moved Permanently:永久性重定向,表示请求的资源被分配了新的URL,之后应使用更改的URL
- 302 Found:临时性重定向,表示请求的资源被分配了新的URL,希望本次访问使用新的URL
- 304 Not Modified:表示客户端发送附带条件(是指采用GET方法的请求报文中包含if-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since中任一首部)的请求时,服务器端允许访问资源,但是请求为满足条件的情况下返回改状态码
- 400 Bad Request:表示请求报文中存在语法错误(一般指参数)
- 401 Unauthorized:没有经过身份认证,需要通过HTTP认证
- 403 Forbidden:身份认证过了,但是没有权限
- 404 Not Found:(客户端问题)请求的资源没有找到,说明客户端错误的请求了不存在的资源
- 500 Inter Server Error:表示服务器在执行请求时发生了错误,也有可能是web应用存在的bug或某些临时的错误时
- 503 Server Unavailable:服务不可用,一般指维护中或者服务重启中
5. 跨域的复杂请求和简单请求的区别
简单请求
HTTP方法是下列之一(HEAD、GET、POST)
HTTP头信息不超出以下几种字段
Accept
Accept-Language
Content-Type (application/x-www-form-urlencoded、multipart/form-data、text/plain)
任何一个 不满足上述要求 的请求,即被认为是复杂请求
复杂请求
一个复杂请求不仅有:包含通信内容的请求,同时也包含预请求。
复杂请求表面上看起来和简单请求使用上差不多,但实际上浏览器发送了不止一个请求。其中最先发送的是一种"预请求",此时作为服务端,也需要返回"预回应"作为响应。预请求实际上是对服务端的一种权限请求,只有当预请求成功返回,实际请求才开始执行。
5. TCP和UDP
- TCP向上层提供面向连接的可靠服务 ,UDP向上层提供无连接不可靠服务。
- 虽然 UDP 并没有 TCP 传输来的准确,但是也能在很多实时性要求高的地方有所作为
- 对数据准确性要求高,速度可以相对较慢的,可以选用TCP
- HTTP3.0取两者之长