面试计算机网络框架八股文十问十答第三期

面试计算机网络框架八股文十问十答第三期

作者:程序员小白条个人博客

相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新!

⭐点赞⭐收藏⭐不迷路!⭐

1)GET和POST请求的区别

主要区别如下:

  • GET:
    • 用于请求服务器上的资源。
    • 参数通过 URL 的查询字符串传递,可见于 URL 中。
    • 通常用于获取数据,不应该有副作用。
    • 请求长度受限于浏览器和服务器的限制。
    • 可以被缓存,以及添加到浏览器的历史记录中。
  • POST:
    • 用于向服务器提交数据,通常导致服务器状态的改变或副作用。
    • 参数传递在请求的消息体中,不可见于 URL,更适合传输敏感数据。
    • 通常用于向服务器提交表单数据、上传文件等操作。
    • 请求长度理论上没有限制。
    • 不能被缓存,不会被添加到浏览器的历史记录中。

2)POST和PUT请求的区别

主要区别如下:

  • POST:
    • 通常用于创建新资源或提交数据。
    • 每次请求可能会导致服务器上创建一个新的资源。
    • 对同一资源的多次 POST 请求会创建多个资源。
  • PUT:
    • 通常用于更新已存在的资源。
    • 每次请求会在服务器上更新指定的资源,如果资源不存在则创建。
    • 对同一资源的多次 PUT 请求不会创建多个资源,而是覆盖原有的资源。

3)常见的HTTP请求头和响应头

常见的 HTTP 请求头和响应头包括:

常见的请求头:

  • User-Agent: 发送请求的用户代理的名称和版本信息。
  • Accept: 指定客户端可接受的内容类型。
  • Content-Type: 发送请求时,指定请求体的内容类型。
  • Authorization: 包含用于进行身份验证的凭据,通常用于 HTTP 认证。
  • Cookie: 包含客户端发送到服务器的 cookie 信息。
  • Referer: 表示请求来源的 URL。

常见的响应头:

  • Content-Type: 指定响应体的内容类型。
  • Content-Length: 指定响应体的长度(以字节为单位)。
  • Cache-Control: 控制缓存的行为。
  • Set-Cookie: 服务器通过响应头设置 cookie。
  • Location: 用于重定向,指示客户端应该跳转到的 URL。
  • Server: 服务器的名称和版本信息。
  • ETag: 用于标识资源版本,配合 If-Match 或 If-None-Match 使用,支持条件请求。

4)HTTP状态码304是多好还是少好

HTTP 状态码 304 表示"未修改",用于告知客户端缓存的资源仍然有效,并且客户端可以继续使用缓存的版本。因此,对于网络性能和用户体验来说,HTTP 状态码 304 是有益的,因为它减少了不必要的网络流量和资源加载时间。

优点:

  • 减少网络流量: 当客户端请求的资源未发生变化时,服务器返回 304 状态码,告知客户端可以继续使用缓存的资源,避免了不必要的数据传输。
  • 提升加载速度: 使用缓存资源可以加快页面加载速度,提升用户体验。

不足:

  • 可能导致更新延迟: 如果服务器端的资源已经更新,但客户端仍然使用缓存的资源,可能导致用户无法及时看到最新内容。

总的来说,HTTP 状态码 304 对于网络性能和用户体验是有利的,但在某些情况下,可能会导致更新延迟。

5)常见的HTTP请求方法

常见的 HTTP 请求方法包括:

  • GET: 用于请求指定的资源。
  • POST: 用于向服务器提交数据。
  • PUT: 用于更新指定的资源。
  • DELETE: 用于删除指定的资源。
  • PATCH: 用于对资源进行部分更新。
  • OPTIONS: 用于获取目标资源支持的通信选项。
  • HEAD: 类似于 GET 请求,但只返回头部信息。
  • TRACE: 用于对请求消息的回显测试。
  • CONNECT: 用于将请求连接转换为透明的 TCP/IP 隧道。

6)OPTIONS请求方法及使用场景

OPTIONS 请求方法用于获取目标资源所支持的通信选项,主要用于跨域资源共享(CORS)和预检请求。

使用场景:

  • CORS: 在进行跨域请求时,浏览器会先发送 OPTIONS 请求,以确定服务器是否支持跨域请求,并获取服务器端的 CORS 配置信息。
  • 预检请求: 当使用非简单请求(例如使用自定义头部或进行跨域请求)时,浏览器会先发送 OPTIONS 预检请求,以获得服务器的允许信息,然后再发送实际的请求。

主要作用:

  • 查询服务器支持的请求方法: OPTIONS 请求通常会返回一个 Allow 头部,其中包含了服务器支持的所有 HTTP 请求方法,客户端可以根据这个信息来确定可以使用哪些方法与服务器进行交互。
  • 查询服务器支持的请求头部: OPTIONS 请求还可以返回一个 Access-Control-Allow-Headers 头部,其中包含了服务器支持的所有自定义请求头部,这对于跨域资源共享(CORS)是非常有用的。

7)HTTP 1.0 和 HTTP 1.1 之间有哪些区别?

主要区别如下:

  • 持久连接(Keep-Alive): HTTP 1.1 默认启用了持久连接,在同一连接上可以传输多个请求和响应,减少了连接建立和关闭的开销,提高了性能。
  • 管道化(Pipeline): HTTP 1.1 支持管道化,允许客户端在同一连接上发送多个请求而无需等待响应,提高了并发性能。
  • 缓存控制: HTTP 1.1 引入了更强大的缓存控制机制,包括 Cache-Control 和 ETag 等头部,提供了更灵活和细粒度的缓存控制。
  • 主机头部(Host Header): HTTP 1.1 引入了 Host 头部字段,使得同一个 IP 地址上的不同域名可以共享同一个服务器,并区分不同的网站。
  • 状态码扩展: HTTP 1.1 引入了更多的状态码,如 100、101、206 等,增加了协议的灵活性和扩展性。
  • 其他改进: HTTP 1.1 还包括对消息传输编码、身份认证、代理服务器支持等方面的改进。

8)HTTP 1.1 和 HTTP 2.0 的区别

主要区别如下:

  • 多路复用(Multiplexing): HTTP 2.0 支持在同一个连接上并行发送多个请求和响应,克服了 HTTP 1.x 中的队头阻塞问题,提高了并发性能。
  • 头部压缩(Header Compression): HTTP 2.0 使用 HPACK 算法对消息头部进行压缩,减少了消息头部的大小,降低了传输延迟和带宽消耗。
  • 服务器推送(Server Push): HTTP 2.0 允许服务器在客户端请求之前向客户端推送资源,提高了页面加载速度和性能。
  • 二进制传输: HTTP 2.0 将消息分帧,并采用二进制格式进行传输,取代了 HTTP 1.x 的文本协议,提高了解析效率和传输速度。
  • 优化头部: HTTP 2.0 使用了"头部列表"和"头部块"等技术来优化消息头部的传输效率,减少了重复传输的信息。
  • 连接优化: HTTP 2.0 可以复用 TCP 连接,减少了连接建立和关闭的开销,提高了连接的利用率。

9)HTTP和HTTPS协议的区别

主要区别如下:

  • 安全性: HTTP 是明文传输的协议,数据传输过程中容易被窃听和篡改,而 HTTPS 则通过 SSL/TLS 加密保护数据的安全性,提供了更高的安全性保障。
  • 加密方式: HTTP 不加密数据传输,而 HTTPS 使用 SSL/TLS 协议对数据进行加密,保证数据传输的机密性和完整性。
  • 默认端口: HTTP 默认端口为 80,HTTPS 默认端口为 443。
  • 证书要求: 在使用 HTTPS 时,服务器需要具有有效的数字证书,以便客户端验证服务器的身份。
  • 速度: HTTPS 由于加密解密的过程会增加数据传输的延迟,可能会略微降低页面加载速度。

10)GET方法URL长度限制的原因

GET 方法的 URL 长度限制是由浏览器或服务器设置的,通常存在于浏览器或服务器的配置参数中。主要原因包括:

  • 浏览器限制: 不同浏览器对 URL 长度的限制可能不同,一般来说,浏览器为了保护用户不受恶意网站的攻击,会设置最大的 URL 长度限制,超出限制的 URL 可能会被截断或拒绝发送。
  • 服务器限制: 服务器端也可能对 URL 长度进行限制,一般是出于安全考虑或性能考虑,防止恶意请求或过大的请求占用服务器资源。
  • 协议限制: HTTP 协议本身并没有对 URL 长度进行严格的限制,但是在实际应用中,由于网络设备、中间件等的限制,通常会存在一定的 URL 长度限制。
  • 传输限制: URL 的长度也受到网络传输的限制,例如在某些网络环境下,URL 过长可能会被分段或截断,导致数据传输错误或不完整。

总的来说,GET 方法 URL 长度限制的原因是多方面的,包括浏览器、服务器、协议和传输等方面的因素都可能影响到 URL 的最大长度限制。

开源项目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system

已 300 + Star!

⭐点赞⭐收藏⭐不迷路!⭐

相关推荐
杰哥在此4 小时前
Java面试题:讨论持续集成/持续部署的重要性,并描述如何在项目中实施CI/CD流程
java·开发语言·python·面试·编程
青青草原上的梦想家6 小时前
Cocos Creator 游戏性能优化指南
游戏·面试·性能优化·typescript
EthanWsir6 小时前
嵌入式C语言面试相关知识——关键字(不定期更新)
c语言·开发语言·面试
Hcoco_me7 小时前
网络协议 | 计算机网络基础学习笔记
网络协议·学习·计算机网络
tq028 小时前
JavaSE面试题(二)
java·开发语言·面试
他是书安10 小时前
计算机网络
服务器·网络·计算机网络
熊出没10 小时前
【面试八股文】java基础知识
java·面试·职场和发展
嘿,请叫我小哥13 小时前
定个小目标之刷LeetCode热题(41)
算法·leetcode·职场和发展
许良辰14 小时前
vue入门:创建并理解你的vue项目
前端·vue.js·面试
Bao_Lee15 小时前
MyBatis 框架核心及面试知识要点
java·面试·mybatis