计算机网络系列-1

GET和POST的请求的区别

GET 和 POST 都是 HTTP 请求方法,主要区别有以下几点:

用途不同:GET 用于获取资源,POST 用于提交数据并可能改变服务器状态。

幂等性不同:GET 是幂等的,多次请求结果一致;POST 不是幂等的。

参数位置不同:GET 参数一般放在 URL 中,POST 参数放在请求体中。

缓存不同:浏览器通常会缓存 GET 请求,而 POST 默认不缓存。

数据大小限制:GET 受 URL 长度限制(因为get参数会显示在URL上),POST 理论上没有限制。

另外,两者在 HTTP 层安全性是一样的,真正的安全依赖 HTTPS。

POST 和 PUT 的区别

POST 和 PUT 都用于向服务器提交数据,但语义不同:

第一,作用不同:POST 一般用于创建资源,PUT 一般用于更新指定资源。

第二,幂等性不同:POST 是非幂等的,多次请求可能创建多个资源;PUT 是幂等的,多次执行结果相同。

第三,请求 URL 不同:POST 通常作用于资源集合,例如 /users,而 PUT 通常指定资源 id,例如 /users/1。

常见的HTTP请求头和响应头

常见 HTTP 请求头(Request Headers)

HTTP 请求头用于描述客户端的信息以及请求的相关配置,常见的有:

Accept:浏览器可接受的内容类型

Accept-Language:浏览器支持的语言

Accept-Encoding:支持的压缩格式,如 gzip

Host:请求的服务器域名

User-Agent:客户端浏览器信息

Cookie:客户端携带的 Cookie 数据

Referer:当前请求来源页面 URL

Connection:连接方式,如 keep-alive

常见 HTTP 响应头(Response Headers)

HTTP 响应头用于描述服务器返回数据的相关信息:

Date:响应时间

Server:服务器类型

Content-Type:返回数据的类型

Cache-Control:缓存控制策略

Connection:连接状态

常见 Content-Type 类型(重点 ⭐)

Content-Type 用于表示请求或响应体的数据格式。

常见类型:

application/x-www-form-urlencoded

默认表单提交方式

数据格式:key=value&key2=value2

multipart/form-data:用于文件上传

application/json:JSON 格式数据(前后端分离最常用)

text/xml:XML 数据格式

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

304 Not Modified 表示客户端请求的资源自上次访问后未被修改,服务器告知可以使用缓存内容。

不是错误,是性能优化手段,可减少带宽和提高访问速度。

静态或更新少的页面出现 304 是好事。

对频繁更新的页面或搜索引擎抓取页面,过多 304 可能影响抓取频率、收录和权重。

OPTIONS请求方法及使用场景

OPTIONS 是 HTTP 请求方法之一,用于获取指定资源所支持的通信选项。

作用与特点:

获取服务器支持的 HTTP 方法,例如 GET、POST、PUT、DELETE 等。

用于检查访问权限,常用于 CORS 跨域请求的预检(preflight)。

响应不能缓存,属于安全探测或协商机制。

HTTP 1.0 与 HTTP 1.1 区别

连接方式:HTTP/1.0 默认非持久连接,每次请求都要建立 TCP 连接;HTTP/1.1 默认持久连接(Connection: keep-alive),可以复用 TCP 连接,提高性能。

资源请求:HTTP/1.0 不支持断点续传,每次返回整个资源;HTTP/1.1 引入 Range 请求头,可请求资源的部分内容(206 Partial Content)。

缓存机制:HTTP/1.1 有更灵活的缓存控制策略。

Host 字段:HTTP/1.1 新增 Host,用于支持虚拟主机,一台 IP 上可托管多个网站;HTTP/1.0 没有 Host 字段。

请求方法:HTTP/1.1 新增了 PUT、HEAD、OPTIONS 等方法,功能更丰富。

HTTP/1.1 与 HTTP/2 区别

协议格式:HTTP/1.1 是文本协议(ASCII),HTTP/2 是二进制协议,所有信息都封装为"帧"。

多路复用:HTTP/2 在同一个 TCP 连接里可同时发送多个请求和响应,避免队头阻塞。

数据流:HTTP/2 将每个请求或响应的数据包称为数据流,每个数据流都有唯一 ID,用于标识属于哪个请求。

头信息压缩:HTTP/2 对请求头和响应头进行压缩,并维护头表索引,避免重复发送,节省带宽。

服务器推送:HTTP/2 支持服务器主动向客户端推送资源,减少延迟,但只用于静态资源,不等同 WebSocket 或 SSE。

HTTP和HTTPS协议的区别

安全性:HTTP 明文传输,HTTPS 基于 SSL/TLS 加密,支持数据加密、身份认证和完整性校验,更安全。

证书:HTTPS 需要 CA 证书,HTTP 不需要。

端口:HTTP 默认端口 80,HTTPS 默认端口 443。

协议结构:HTTP 是超文本传输协议,HTTPS 是 HTTP + SSL/TLS 组成的安全协议。

GET方法URL长度限制的原因

GET 方法 URL 长度限制不是 HTTP 协议规定的,而是浏览器和服务器实现限制。为兼容性考虑,最好不超过 2083 个字符(IE浏览器的限制最严格是2083字符)。

当在浏览器中输入 Google.com 并且按下回车之后发生了什么?

输入 URL 后,浏览器解析 URL 并检查缓存,DNS 获取 IP,再通过 TCP 三次握手建立连接;HTTPS 协议下还会进行 TLS 握手(协商加密算法,交换随机数和证书,生成共享秘钥。),服务器返回 HTML,浏览器解析构建 DOM/CSSOM,渲染页面,最后 TCP 四次挥手释放连接。

对keep-alive的理解

HTTP 默认是短连接:每次请求/响应建立一个 TCP 连接,完成后立即断开。

Keep-Alive(长连接)允许客户端和服务器复用同一个 TCP 连接,多次请求无需重新建立连接。

使用方式:

HTTP/1.0 默认非 Keep-Alive,需要手动添加 Connection: keep-alive,关闭用 Connection: close。

HTTP/1.1 默认长连接,传输完成后连接保持,关闭时客户端发送 Connection: close。

建立过程:

客户端请求报文带 Connection: keep-alive

服务器返回响应并带 Connection: keep-alive

双方建立 Keep-Alive 连接

断开过程:

服务器自动断开:客户端无 Connection 字段,传输完成后服务器关闭连接。

客户端主动断开:客户端发送 Connection: close,服务器处理后关闭连接。

优点:

减少 TCP 建立和关闭开销 → CPU/内存占用低

支持 HTTP 管线化 → 请求/响应效率高

降低延迟 → 后续请求无需握手

减少拥塞控制影响

缺点:

长时间占用 TCP 连接 → 系统资源可能被浪费

页面有多张图片,HTTP是怎样的加载表现?

HTTP/1.x:

同一域名下,浏览器最大 TCP 连接数约 6 个。

超过 6 张图片时,需要排队请求 → 加载速度受限。

常用优化:多域名部署,提高同时请求数量。

HTTP/2:

支持单连接多路复用,同一个 TCP 连接可以同时发送多个请求。

图片等资源可以几乎同时加载 → 页面加载速度快。

HTTP2的头部压缩算法是怎样的?

HTTP/2 使用 HPACK 算法压缩头部,通过字典和索引号减少重复数据,支持哈夫曼编码整数和字符串,压缩率可达 50%~90%。

工作原理:

首部表(Header Table):客户端和服务器维护一张表,存储历史发送过的键值对。

索引复用:相同的头部字段不再重复发送,只发送索引号或差异数据。

渐进更新:新头部字段可以追加到表末尾,或者替换表中旧值,首部表在整个连接周期内有效。

哈夫曼编码:整数和字符串通过哈夫曼编码进一步压缩。

效果:后续请求只需发送差异字段 → 减少冗余数据,降低传输开销,提高性能。

HTTP 请求报文结构

请求行(Request Line):包含请求方法、URL、HTTP 版本

格式示例:GET /index.html HTTP/1.1

请求头部(Request Headers):由关键字:值 组成,每行一对

常见字段:

User-Agent:浏览器类型

Accept:客户端可识别的内容类型

Host:请求的主机名(支持虚拟主机)

空行用于分隔头部和请求体

请求体(Request Body)

POST、PUT 等请求携带的数据请求行(Request Line)

HTTP 响应报文结构

HTTP 响应报文由 4 部分组成:

响应行(Status Line):包含 HTTP 版本、状态码、状态原因短语

示例:HTTP/1.1 200 OK

响应头(Response Headers):由 关键字:值 组成,每行一对

常见字段:

Content-Type:返回资源的 MIME 类型

Content-Length:返回数据长度

Cache-Control:缓存策略

Server:服务器信息

空行:用于分隔头部和响应体

响应体:(Response Body)服务器返回的数据(HTML、JSON、图片等)

HTTP 协议的优点和缺点

HTTP(HyperText Transfer Protocol,超文本传输协议)是一种应用层协议,用于规定客户端与服务器之间的通信格式和数据传输方式,默认使用 80 端口,基于 TCP 实现可靠传输。

优点:

支持 Client / Server 模式:客户端负责请求,服务器负责响应,职责清晰,易扩展

简单快速:请求格式简单(方法 + URL),实现成本低,通信效率高

无连接(HTTP/1.0 特点):每次请求独立建立 TCP 连接,请求完成立即断开,减少服务器资源占用

无状态:服务器不保存客户端状态信息,每次请求相互独立,有利于服务器扩展和负载均衡

灵活:可以传输任意类型数据,通过 Content-Type 指定数据类型

缺点

① 可能被窃听(无加密)

② 无法验证身份(可能被伪装)

③ 数据可能被篡改(无完整性校验)

HTTP 是基于 TCP 的应用层协议,特点是简单、无状态、灵活、易扩展。但它采用明文传输,无法验证身份和保证数据完整性,因此存在安全问题,这也是 HTTPS 出现的原因。

说一下HTTP 3.0

HTTP/3 是基于 UDP 的 HTTP 协议版本,底层使用 QUIC 协议实现可靠传输。QUIC 在 UDP 上实现了拥塞控制、数据重传和多路复用,并内置 TLS1.3 加密(加密成为协议默认能力,减少握手次数,提高连接建立速度)。相比 HTTP/2,HTTP/3 解决了 TCP 队头阻塞问题,每个数据流独立传输,丢包只影响当前流,其他流不受影响(HTTP/2 虽然支持多路复用,但仍受 TCP 限制:一个包丢失 → 整个 TCP 队列等待),同时支持 0~1 RTT 快速建立连接,从而显著降低延迟并提升网络性能。

HTTP协议的性能怎么样

HTTP 协议的性能主要受连接管理方式和数据传输机制影响。HTTP 基于 TCP 的请求-响应模型,在 HTTP/1.0 中默认使用短连接,每次请求都需要建立和断开 TCP 连接,产生较大的握手开销,导致性能较低。HTTP/1.1 引入了长连接(Keep-Alive),允许多个请求复用同一个 TCP 连接,减少连接建立成本,从而提升传输效率。

同时 HTTP/1.1 支持管道化传输,但由于响应必须按顺序返回,会产生队头阻塞问题。浏览器通常通过并发连接和域名分片进行优化。后来 HTTP/2 通过多路复用解决队头阻塞,HTTP/3 基于 QUIC 协议进一步减少握手延迟并提升传输性能。

URL有哪些组成部分

一个完整的 URL 主要由以下几部分组成:协议、域名、端口、路径、查询参数和锚点。

协议表示访问资源所使用的通信协议,如 HTTP 或 HTTPS;域名用于定位服务器地址;端口用于指定服务器服务端口,若省略则使用默认端口(HTTP 为 80,HTTPS 为 443)。路径部分包括虚拟目录和文件名,用来定位服务器上的具体资源。

在路径之后,"?" 后面是查询参数,用于向服务器传递数据,多个参数之间用 "&" 连接;"#" 后面是锚点,用于页面内部定位,不会发送到服务器。整个 URL 用来唯一标识网络中的一个资源。

与缓存相关的HTTP请求头有哪些

强缓存(直接使用本地缓存,不请求服务器)

Expires:指定缓存的过期时间(HTTP/1.0),是一个绝对时间。

Cache-Control:HTTP/1.1 引入,通过 max-age 等指令控制缓存时间,优先级高于 Expires。

协商缓存(需要向服务器验证缓存是否可用)

Etag / If-None-Match:通过资源唯一标识判断资源是否变化。

Last-Modified / If-Modified-Since:通过资源最后修改时间判断是否更新。

强缓存优先于协商缓存,强缓存失效后才会进行协商缓存验证。

相关推荐
G皮T1 天前
【计算机网络】网络时间协议 NTP(二):X-Request-Start
网络·计算机网络·时钟同步·ntp·网络时间协议
G皮T1 天前
【计算机网络】网络时间协议 NTP(一)
网络·计算机网络·时钟同步·ntp·网络时间协议
大地的一角2 天前
(计算机网络)网络基础
计算机网络
tobias.b2 天前
408真题解析-2010-40-计算机网络-域名解析
网络·计算机网络·计算机考研·408真题解析
EmmaXLZHONG3 天前
分布式系统概念与设计笔记(Notes of Distributed Systems Concepts and Design)
笔记·分布式·网络协议·计算机网络
林姜泽樾3 天前
linux基础第一章,linux的介绍和它和windows的区别
linux·运维·计算机网络·安全·网络安全
wangjialelele3 天前
万字整理计算机网络知识点
linux·c语言·网络·c++·计算机网络·php
REDcker4 天前
FTP协议原理及应用精解
linux·后端·计算机网络·互联网·ftp·服务端开发
8125035334 天前
DNS监控:生产实践
linux·网络·网络协议·tcp/ip·计算机网络