计算机网络 HTTP篇常见面试题总结

news2025/6/2 23:26:01

HTTP各版本区别

HTTP 1.0

  • 无状态、无连接:每次请求都需要建立新的 TCP,处理完后立即关闭,导致开销较大。
  • 队头阻塞:每个请求必须按照顺序依次处理,前面的请求未完成,后面的请求只能等待,减低了并发效率。
  • 不支持持久连接:每个请求都建立一个新的 TCP 连接,增加了服务器的负担

HTTP 1.1

  • 持久连接:引入了 Keep - Alive 机制,多个请求可以复用同一个 TCP 连接,介绍了建立连接的开销。
  • 管道化:允许在同一个 TCP 连接上同时发送多个请求,提高了并发效率。
  • Host 字段:可以在同一个 IP 地址上允许多个虚拟主机。
  • 断点续传:支持文件传输中断后从断点处继续传输。

HTTP 2.0

  • 二进制分帧:将 HTTP 报文分割为更小的二进制,提高了传输效率,并支持多路复用。
  • 头部压缩:减少了 HTTP 头部的大小,降低了网络开销。
  • 服务器推送:服务器可以主动向客户端推送资源,减少了客户端的请求次数。
  • 多路复用:在一个 TCP 连接上可以同时发送多个请求和响应,解决了 HTTP 1.1 的队头阻塞问题。

HTTP 3.0

  • 基于 QUIC 协议:使用 UDP 协议,相较于 TCP 的可靠性,QUIC 通过自身实现可靠传输,减少了 RTT。
  • 多路复用:在一个 QUIC 连接上可以同时传输多个请求和响应,并且支持流优先级。
  • 更快的连接建立:减少了 TCP 的三次握手和 TLS 的握手时间。
  • 更低的延迟:由于 QUIC 协议的特性,HTTP 3.0 具有很低的延迟。

常见HTTP状态码

1xx: 信息响应

  • 100 Continue: 服务器已接收请求的初步部分,客户端应继续请求。
  • 101 Switching Protocols: 服务器同意切换协议,如从 HTTP 切换到 WebSocket。

2xx: 成功

  • 200 OK: 请求成功,服务器返回所请求的资源或数据。
  • 201 Created: 请求成功并创建了新的资源,常用于 POST 请求。
  • 204 No Content: 请求成功但服务器不返回任何内容,常用于删除操作。

3xx: 重定向

  • 301 Moved Permanently: 资源已永久移动到新的 URL,客户端应使用新 URL 访问。
  • 302 Found: 资源临时移动到新的 URL,客户端应继续使用原来的 URL。
  • 304 Not Modified: 资源未修改,客户端可以使用缓存版本。

4xx: 客户端错误

  • 400 Bad Request: 请求无效或语法错误,服务器无法处理。
  • 401 Unauthorized: 请求需要身份验证,客户端未提供有效的凭证。
  • 403 Forbidden: 服务器理解请求但拒绝执行,通常是权限问题。
  • 404 Not Found: 请求的资源在服务器上未找到。

5xx: 服务器错误

  • 500 Internal Server Error: 服务器内部错误,无法完成请求。
  • 502 Bad Gateway: 服务器作为网关或代理,从上游服务器接收到无效响应。
  • 503 Service Unavailable: 服务器暂时无法处理请求,通常是因为过载或维护。

HTTP请求内容组成

HTTP 请求组成:

  • 请求行(Request Line):包含请求方法(如 GET、POST)、请求的资源路径(如 /index.html )、以及 HTTP 协议版本(如 HTTP/1.1)。
  • 请求头(Request Headers):包含各种键值对,用于传递客户端环境、请求内容、认证信息等。
  • 空行(Blank Line):用于分隔请求头和请求体。
  • 请求体(Request Body):通常在 POST、PUT 等方法中存在,包含需要发送到服务器的数据。

请求头用于传递附加信息:

1. 通用头(General Headers)
  • Cache-Control:控制缓存策略(如 no-cachemax-age=3600
  • Connection:控制连接状态(如 keep-aliveclose
  • Date:请求时间(如 Wed, 30 May 2025 12:00:00 GMT
2. 请求头(Request-Specific Headers)
  • Host:目标服务器域名(如 www.example.com
  • User-Agent:客户端信息(如浏览器类型、操作系统)
  • Accept:客户端可接收的响应格式(如 application/jsontext/html
  • Accept-Language:客户端语言偏好(如 zh-CN,en-US;q=0.8
  • Accept-Encoding:客户端支持的压缩格式(如 gzipdeflate
  • Cookie:存储的会话信息(如 session_id=123456
  • Authorization:身份验证信息(如 Bearer token123
3. 实体头(Entity Headers)
  • Content-Type:请求体的媒体类型(如 application/jsonmultipart/form-data
  • Content-Length:请求体的长度(如 128
  • Content-Encoding:请求体的编码方式(如 gzip

请求体的类型由 Content-Type 头决定,常见类型如下:

1. 无请求体(No Body)
  • 适用方法GETHEADDELETEOPTIONS
  • 示例
    GET /api/users HTTP/1.1
    Host: www.example.com
    
2. 表单数据(Form Data)
  • Content-Typeapplication/x-www-form-urlencoded
  • 格式:键值对(key1=value1&key2=value2
  • 示例
    POST /login HTTP/1.1
    Host: www.example.com
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 27
    
    username=admin&password=123456
    
3. 多部分表单数据(Multipart Form Data)
  • Content-Typemultipart/form-data; boundary=----WebKitFormBoundary123456
  • 用途:上传文件或复杂表单
  • 示例
    POST /upload HTTP/1.1
    Host: www.example.com
    Content-Type: multipart/form-data; boundary=----WebKitFormBoundary123456
    
    ------WebKitFormBoundary123456
    Content-Disposition: form-data; name="username"
    
    admin
    ------WebKitFormBoundary123456
    Content-Disposition: form-data; name="avatar"; filename="photo.jpg"
    Content-Type: image/jpeg
    
    [二进制文件内容]
    ------WebKitFormBoundary123456--
    
4. JSON 数据
  • Content-Typeapplication/json
  • 格式:JSON 对象
  • 示例
    POST /api/users HTTP/1.1
    Host: www.example.com
    Content-Type: application/json
    Content-Length: 27
    
    {"name": "John", "age": 30}
    
5. XML 数据
  • Content-Typeapplication/xml 或 text/xml
  • 格式:XML 文档
  • 示例
    POST /api/users HTTP/1.1
    Host: www.example.com
    Content-Type: application/xml
    Content-Length: 81
    
    <user>
      <name>John</name>
      <age>30</age>
    </user>
    
6. 原始数据(Raw Data)
  • Content-Typetext/plainapplication/javascript 等
  • 用途:传输任意格式文本
  • 示例
    POST /api/script HTTP/1.1
    Host: www.example.com
    Content-Type: text/plain
    Content-Length: 10
    
    Hello World

HTTP中GET和POST区别

从 HTTP 的定义来看:

  • GET:用于获取资源,通常用于请求数据而不改变服务器状态。
  • POST:用于提交数据到服务器,通常会改变服务器的状态或产生副作用(如创建或更新资源)。

由于 HTTP 和浏览器等规定,它们在应用过程中会出现一些区别:

参数传递方式:

  • GET:参数通过 URL 拼接传递,暴露在请求 URL 中,具有可见性,长度有限(取决于浏览器和服务器)。
  • POST:参数放在请求体中,通常不可见且长度理论上没有限制,更适合传递大量数据(但是注意,POST 也可以在 URL 上放参数!)。

安全性:

  • GET:参数可见,数据容易暴露在浏览器历史记录、日志和缓存中,不适合传递敏感信息。
  • POST:数据放在请求体中,相对安全,但需要 HTTPS 才能保证数据加密传输。

幂等性:

  • GET:幂等(重复请求不会改变服务器状态)。
  • POST:非幂等(多次请求可能导致重复创建资源或执行多次相同操作)。

GET 和 POST 的数据传输方式与限制

  • URL 长度限制:GET 请求中的参数通过 URL 传递,受 URL 长度限制。不同浏览器和服务器对 URL 长度限制不同,一般为 2048 字节左右,因此不适合大数据传输。
  • POST 请求体限制:POST 请求的数据放在请求体中,理论上无长度限制,适合传输较多的数据。但实际中服务器对请求体长度有配置限制,如 Nginx 默认限制为 1MB,可根据需求调整。

GET 和 POST 的数据安全性差异

  • GET 请求暴露数据:由于 GET 请求的参数出现在 URL 中,可能被浏览器缓存、日志记录或历史记录保存,增加了信息泄露的风险,不适合传输敏感信息,如用户名、密码等。
  • POST 请求相对安全:POST 请求数据位于请求体中,尽管这并不提供加密保护,但比 URL 中传递更隐蔽。配合 HTTPS 加密传输可进一步确保数据安全。

缓存机制的不同

  • GET 请求可缓存:GET 请求可以被浏览器和 CDN 缓存,当请求同一个 URL 时可以直接返回缓存内容,减少服务器负载。适用于不频繁变动的资源,比如图片、静态页面。
  • POST 请求默认不缓存:大部分浏览器和缓存服务器不缓存 POST 请求,主要因为 POST 请求通常会对服务器数据产生影响(如创建、修改数据),需要确保请求每次都传递到服务器。

HTTP和HTTPS区别

数据传输安全性:

  • HTTP:数据以明文传输,容易被窃听、篡改。
  • HTTPS:通过 SSL/TLS 协议对数据进行加密传输,提供数据机密性和完整性保障。

端口号:

  • HTTP:默认使用端口 80。
  • HTTPS:默认使用端口 443。

性能:

  • HTTP:无加密过程,连接建立速度稍快。
  • HTTPS:基于 HTTP 上又加了 SSL(Secure Sockets Layer)或 TLS(Transport Layer Security)协议来实现的加密传输,加解密过程增加了计算开销,握手时间较长,但现代硬件和协议优化已使性能差距减小。

SEO 影响:

  • HTTP:搜索引擎一般会降低未加密站点的排名。
  • HTTPS:搜索引擎更倾向于优先展示 HTTPS 网站。

HTTPS握手过程

TLS 握手过程概述

TLS 握手是客户端与服务器建立安全连接的关键步骤,主要目的是:

  1. 验证双方身份(通常验证服务器身份)。
  2. 协商加密算法和密钥(对称密钥和非对称密钥)。
  3. 确保通信内容的机密性和完整性。

基于 RSA 算法的 TLS 握手流程

核心流程(简化版):
  1. 客户端发起请求(ClientHello)

    • 客户端发送支持的 TLS 版本、加密算法列表(如 RSA 相关套件)、随机数(Client Random)等信息。
  2. 服务器响应(ServerHello)

    • 服务器选择 TLS 版本、加密算法(如 RSA)、随机数(Server Random),并发送服务器证书(含 RSA 公钥)。
  3. 客户端验证服务器证书

    • 客户端通过信任的 CA 验证服务器证书的合法性,提取服务器公钥。
  4. 客户端生成预主密钥(Pre-Master Secret)

    • 客户端生成一个随机数作为预主密钥,用服务器公钥加密后发送给服务器(RSA 加密过程)。
  5. 服务器解密预主密钥

    • 服务器用私钥解密获取预主密钥,结合双方随机数(Client Random 和 Server Random)生成 主密钥(Master Secret)
  6. 生成对称密钥

    • 客户端和服务器分别根据主密钥生成用于加密通信的对称密钥(如 AES 密钥)。
  7. 验证握手完整性

    • 双方发送握手结束消息,使用新生成的密钥对消息进行加密和校验,确保握手过程未被篡改。

基于 ECDHE 算法的 TLS 握手流程

核心流程(简化版):
  1. 客户端发起请求(ClientHello)

    • 类似 RSA 流程,但支持的加密算法包含 ECDHE 相关套件(如 ECDHE-ECDSA-AES256-GCM-SHA384)。
  2. 服务器响应(ServerHello)

    • 选择 ECDHE 算法,发送服务器证书(含 ECDSA 公钥或 RSA 公钥,取决于签名算法)、椭圆曲线参数、服务器端生成的椭圆曲线私钥对应的公钥(Server PubKey)。
  3. 客户端验证服务器证书

    • 验证证书合法性,提取服务器公钥。
  4. 客户端生成椭圆曲线密钥对

    • 客户端生成临时椭圆曲线密钥对(Client PrivKey 和 Client PubKey),发送 Client PubKey 给服务器。
  5. 协商共享密钥(ECDHE 密钥交换)

    • 客户端和服务器分别用对方的公钥与自己的私钥计算出 共享秘密(Shared Secret)
      • 客户端:用 Server PubKey 和 Client PrivKey 计算共享秘密。
      • 服务器:用 Client PubKey 和 Server PrivKey 计算共享秘密。
    • 双方得到的共享秘密相同,结合随机数生成 预主密钥 和 主密钥
  6. 生成对称密钥

    • 与 RSA 流程类似,基于主密钥生成对称加密密钥。
  7. 验证握手完整性

    • 流程与 RSA 一致。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2394461.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++八股 —— 手撕线程池

文章目录 一、背景二、线程池实现1. 任务队列和工作线程2. 构造和析构函数3. 添加任务函数4. 完整代码 三、阻塞队列实现1. 基础队列2. 升级版队列 四、测试代码五、相关问题六、其他实现方式 来自&#xff1a;华为C一面&#xff1a;手撕线程池_哔哩哔哩_bilibili 华为海思&am…

RPA如何支持跨平台和跨浏览器的自动化

RPA&#xff0c;即机器人流程自动化&#xff08;Robotic Process Automation&#xff09;&#xff0c;正日益成为企业实现业务流程高效自动化的关键技术。在复杂的数字化环境中&#xff0c;跨平台和跨浏览器的自动化需求极为迫切&#xff0c;RPA 通过多种技术手段和策略来满足这…

【笔记】Windows 成功部署 Suna 开源的通用人工智能代理项目部署日志

#工作记录 本地部署运行截图 kortix-ai/suna&#xff1a; Suna - 开源通用 AI 代理 项目概述 Suna 是一个完全开源的 AI 助手&#xff0c;通过自然对话帮助用户轻松完成研究、数据分析等日常任务。它结合了强大的功能和直观的界面&#xff0c;能够理解用户需求并提供结果。其强…

Linux531rsync定时同步 再回忆

rsync定时同步 环境配置 关闭防火墙&#xff0c;selinux systemctl stop firewalld systemctl disable firewall setenforce 0 cat /etc/selinux/configpei SELINUXdisable设置主机名 systemctl set-hostname code systemctl set-hostname backup设置静态IP rsync由于要设…

【KWDB 创作者计划】_探秘浪潮KWDB数据库:从时间索引到前沿技术

探秘浪潮KWDB数据库&#xff1a;从时间索引到前沿技术 文章目录 探秘浪潮KWDB数据库&#xff1a;从时间索引到前沿技术引言1.浪潮KWDB数据库时间索引深度解析1.1时间索引工作原理1.2时间索引创建与管理实践 2.浪潮KWDB数据库前沿产品技术纵览2.1多模融合存储引擎2.2就地计算技术…

安卓逆向篇LSP 模块HOOK 添加技术绕过检测算法解密逻辑验证

前置解释&#xff1a; 0 、 Magisk &#xff1a; 是当前 Android 社区用来获取 root 权限的主流方式开源工具 1 、 LSP 框架&#xff1a; XPosed 框架因只支持安卓 8 及以下&#xff0c;故高版本应使用 MagiskLSPosed 2 、 HOOK 技术&#xff1a; 钩子技术&…

第一节 51单片机概述

目录 一、单片机系统组成 &#xff08;一&#xff09;、单片机硬件系统 &#xff08;二&#xff09;单片机的软件系统 二、STC89C52单片机 &#xff08;1&#xff09;、基本信息 &#xff08;2&#xff09;、命名规则 &#xff08;3&#xff09;、单片机内部结构图 &am…

Google car key:安全、便捷的汽车解锁新选择

有了兼容的汽车和 Android 手机&#xff0c;Google car key可让您将Android 手机用作车钥匙。您可以通过兼容的 Android 手机锁定、解锁、启动汽车并执行更多功能。但是&#xff0c;Google car key安全吗&#xff1f;它是如何工作的&#xff1f;如果我的手机电池没电了怎么办&a…

720全景展示:VR全景的技术原理及应用

VR720全景展示&#xff1a;技术原理及应用探索 720全景技术&#xff0c;作为当前全球范围内迅速崛起流行的视觉新技术&#xff0c;为用户带来了全新的真实现场感和交互式的体验。凭借全方位、无死角的视觉展示特性&#xff0c;在VR&#xff08;虚拟现实&#xff09;领域中得到…

定制一款国密浏览器(13):预置国密根证书到浏览器

由于国密算法没有得到国外的认可,所以 Chromium、Firefox 等浏览器均不支持国密算法。即使我们修改了 Chromium 的源码,增加了国密算法的支持,但还不能在浏览器中正常使用。因为这涉及到证书的信任问题,国密证书都是国内厂商签发的,国密根证书并没有集成到系统和浏览器中。…

PowerBI企业运营分析——线性回归销售预测

PowerBI企业运营分析——线性回归销售预测 欢迎来到Powerbi小课堂&#xff0c;在竞争激烈的市场环境中&#xff0c;企业运营分析平台成为提升竞争力的核心工具。 该平台通过整合多源数据&#xff0c;实现关键指标的实时监控&#xff0c;从而迅速洞察业务动态&#xff0c;精准…

LangFuse:开源LLM工程平台的革新实践

文章目录 一 架构设计与技术栈二 增强型监控能力三 提示词工程支持&#xff08;新增&#xff09;四 性能优化实践五 LangFuse部署&#xff08;docker&#xff09;和代码集成5.1 LangFuse平台部署5.2 LangFuse代码集成和检测体验 一 架构设计与技术栈 LangFuse采用模块化架构设…

新视角!经济学顶刊QJE用文本分析探究新技术扩散

美国圣路易斯联邦储备银行Aakash Kalyani、美国斯坦福大学与国家经济研究局Nicholas Bloom、英国伦敦商学院Marcela Carvalho和其合作者们共同研究的“The Diffusion of New Technologies&#xff08;新技术的扩散&#xff09;”在顶刊The Quarterly Journal of Economics中发表…

5月31日day41打卡

简单CNN 知识回顾 数据增强卷积神经网络定义的写法batch归一化&#xff1a;调整一个批次的分布&#xff0c;常用与图像数据特征图&#xff1a;只有卷积操作输出的才叫特征图调度器&#xff1a;直接修改基础学习率 卷积操作常见流程如下&#xff1a; 1. 输入 → 卷积层 → Batch…

STM32G4 电机外设篇(一) GPIO+UART

目录 一、STM32G4 电机外设篇&#xff08;一&#xff09; GPIOUART1 GPIO1.1 STM32CUBEMX 配置以及Keil代码1.2 代码和实验现象 2 UART2.1 STM32CUBEMX 配置以及Keil代码2.2 代码和实验现象 附学习参考网址欢迎大家有问题评论交流 (* ^ ω ^) 一、STM32G4 电机外设篇&#xff0…

Lua 的速度为什么比 Python 快

Lua 的执行速度通常比 Python 快&#xff0c;主要原因在于其解释器设计轻量、虚拟机效率高、内存管理策略更为精简&#xff0c;以及语言本身对动态特性的控制较严。其中&#xff0c;Lua 使用了 register-based 的虚拟机架构&#xff0c;而 Python&#xff08;CPython&#xff0…

【iOS】方法交换

方法交换 method-swizzling是什么相关API方法交换的风险method-swizzling使用过程中的一次性问题在当前类中进行方法交换类方法的方法交换 方法交换的应用 method-swizzling是什么 method-swizzling的含义是方法交换&#xff0c;他的主要作用是在运行的时候将一个方法的实现替…

数据结构:线性表的基本操作与链式表达

个人主页 文章专栏 成名之作——赛博算命之梅花易数的Java实现 陆续回三中&#xff0c;忘回漏回滴滴~感谢各位大佬的支持 一.线性表的定义和基本操作 1.1定义 线性表是具有相同数据类型的n个数据元素的有序数列&#xff0c;n为表长 第一个元素叫表头元素&#xff0c;除了他…

C++:设计模式--工厂模式

更多内容&#xff1a;XiaoJ的知识星球 目录 1.简单工厂模式1.1 简单工厂1.2 实现步骤1.3 实现代码1.4 优缺点 2.工厂模式2.1 工厂模式2.2 实现步骤2.3 实现代码2.4 优缺点 3.抽象工厂模式3.1 抽象工厂模式3.2 实现步骤3.3 实现代码3.4 优缺点 1.简单工厂模式 . 1.1 简单工厂 …

国产化Excel处理组件Spire.XLS教程:如何使用 C# 将 Excel(XLS 或 XLSX)文件转换为 PDF

Excel 是常见的数据处理与呈现工具&#xff0c;但直接共享 Excel 文件可能面临格式错乱、兼容性不足或数据泄露的风险。为了保证文档在不同平台和终端上的稳定展示&#xff0c;开发者常常需要将 Excel 文件转换为 PDF 格式。 本文将详细介绍如何使用 C#和.NET Excel 库——Spi…