【计算机网络】HTTP1.0/1.1/2.0对比,常用请求方式总结,HTTPS加密过程,浏览器访问域名详细过程

常见HTTP状态码

状态码 含义 形象比喻
200 请求成功 服务器已成功处理了请求,通常表示服务器提供了请求的网页。
301 永久重定向 请求的网页已永久移动到新位置,服务器返回此响应时会自动将请求者转到新位置。
302 临时重定向 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置进行以后的请求。
400 请求错误 客户端请求有语法错误,无法被服务器理解。
403 禁止访问 服务器收到请求,但拒绝提供服务。
404 未找到 服务器找不到请求的网页。
500 服务器错误 服务器遇到错误,无法完成请求。

状态码301和302的区别是什么?

301和302状态码都表示重定向

  • 301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址
  • 302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。

重定向常见场景

  • 网站结构调整(如 /old-page 改为 /new-page)

  • 网页换域名(如 oldsite.com 变成 newsite.com

  • URL 规范化(如 http:// 自动跳转 https://)

  • 文件扩展名变更(如 .php 改成 .html)


HTTP 常用的请求方式

请求方法 含义 主要用途 特点
GET 获取资源 请求网页、获取数据 只能获取数据,参数暴露在URL中
POST 发送数据到服务器 提交表单、上传文件 数据在请求体中,较安全
PUT 更新资源 修改用户信息、更新数据库记录 幂等(多次请求效果一样)
DELETE 删除资源 删除数据库记录、移除用户 幂等,慎用,可能导致数据丢失
HEAD 仅获取响应头 检测资源是否存在、不下载内容 和GET类似,但不返回数据
OPTIONS 获取支持的请求方法 查询服务器支持哪些请求方法 用于跨域请求预检(CORS)
PATCH 局部更新资源 只修改部分数据,如更新用户名 与PUT类似,但只改部分字段
TRACE 追踪请求链路 诊断请求路径是否被中间人修改 易被攻击,部分服务器已禁用
CONNECT 建立隧道连接 代理服务器转发HTTPS请求(如VPN) 用于SSL/TLS加密隧道

补充说明

  • GET 与 POST:GET 用于查询数据,POST 用于提交数据。
  • PUT 与 PATCH:PUT 更新整个资源,PATCH 只修改部分字段。
  • DELETE:用于删除资源,慎用,可能导致数据丢失。
  • OPTIONS :用于检查服务器允许的 HTTP 方法,常用于 跨域请求(CORS 预检)
  • CONNECT :用于建立 HTTPS 代理,如 VPN、反向代理。

简单来说

  • GET/POST 用得最多,一个查数据,一个发数据。
  • PUT/PATCH/DELETE 用于增删改数据。
  • HEAD/OPTIONS 用于检查服务器状态和支持的功能。

GET请求和POST请求的区别

GET 请求 POST 请求
参数传递 URL 或 Cookie 传参 数据放在请求体(Body)中
数据长度 受 URL 长度限制,一般较短 理论上无限制,可传输大数据
安全性 参数暴露在 URL,易被篡改和缓存 数据在请求体,不会直接暴露
可缓存性 可被浏览器缓存,常用于查询操作 不可缓存,避免重复提交
幂等性 幂等,多次请求结果相同 非幂等,多次请求可能造成多次提交
应用场景 获取资源,如网页、API 数据 提交数据,如表单、上传文件
  • GET和POST最大的区别主要是GET请求是幂等性的,POST请求不是。

  • 幂等性是指一次和多次请求某一个资源应该具有同样的副作用。简单来说意味着对同一URL的

多个请求应该返回同样的结果


HTTP长连接和短连接

连接类型 说明 特点 适用场景
短连接 每次请求都新建 TCP 连接,完成后立即关闭 资源消耗大,适合少量请求 HTTP/1.0 默认方式
长连接 一个 TCP 连接可复用,多次请求共享 减少连接开销,提高性能 HTTP/1.1 默认 keep-alive
  • HTTP/1.0 中,默认用短链接。例,一个网页中的各种图片,css,文件要加载时都会触发短连接,你关了这个网页就把他们全部关了,就好像没有缓存一样。

  • HTTP/1.1 起,默认使用 长连接 ,即在响应头中包含 Connection: keep-alive。浏览器加载 HTML 后,会继续使用 同一个 TCP 连接 下载页面中的图片、CSS、JS 文件,而不会为每个资源重新建立连接,提高了加载速度并减少了服务器压力。同时,如果你关闭网页后的一段时间内再次访问,同一个服务器可能仍会复用之前的 TCP 连接(只要服务器未超时关闭),这样可以减少 TCP 三次握手 的开销,加快请求速度。

  • 长连接的保持时间 取决于服务器设置。例如,Nginx 默认 keep-alive timeout=75s,即如果 75 秒内没有新的请求,服务器会主动关闭连接。

  • HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。


HTTP1.0和HTTP1.1的区别

HTTP/1.0 vs HTTP/1.1

HTTP/1.0 HTTP/1.1
长连接 默认使用短连接,每次请求都要重新建立 TCP 连接 默认使用长连接Connection: keep-alive),同一个 TCP 连接可复用多个请求,减少连接开销
请求流水线 不支持 支持 请求流水线(Pipelining),允许多个请求并行发送,减少网络延迟
缓存机制 仅支持 If-Modified-Since 和 Expires 进行缓存控制 新增 ETagCache-Control 头部,提供更精细的缓存控制
带宽优化 服务器总是返回整个资源 支持 Range 头部 ,可请求部分资源(断点续传),返回 206 Partial Content
错误状态码 错误状态码较少 新增 24 个状态码,如 409 Conflict(资源冲突)、410 Gone(资源永久删除)
Host 头 不支持,默认认为每台服务器只有一个 IP 地址 支持,允许在同一 IP 上托管多个网站(虚拟主机)
请求方法 仅支持 GETPOST 新增 PUTDELETEOPTIONSTRACE 等方法

  • HTTP1.1支持的长连接请求流水线,在一个TCP连接上传送多个请求和响应,减少频繁创建和关闭连接的消耗
  • HTTP1.1引入更多缓存控制策略,特别是缓存头 Cache-Control,可以自由切换缓存策略
  • HTTP1.1在请求头中引入range头域,使得可以灵活响应所请求的某个部分,而不是要碟醋,你把饺子都包好了。其返回码206 Partial Content直译为部分的内容,并且支持断点续传
  • HTTP1.1更多的错误状态码
  • 虚拟机技术,即一台物理主机上可以有多个虚拟主机,如经常玩的VMware Workstation Pro,他们共享这台物理主机的ip,即,网卡nat模式。HTTP1.1中Host 头的引入 让一个 IP 承载多个域名成为可能,适应了虚拟主机的发展。

HTTP1.1和HTTP2.0区别

HTTP/1.1 vs HTTP/2.0 对比

对比项 HTTP/1.1 HTTP/2.0
数据格式 基于文本(解析复杂,容易出错) 二进制格式(更高效,解析更快)
多路复用 不支持 ,同一 TCP 连接内请求是串行的(存在队头阻塞问题) 支持,一个 TCP 连接上可同时发送多个请求,避免队头阻塞
请求方式 每个请求都需要单独占用一个 TCP 连接,连接数过多时开销大 多个请求复用一个 TCP 连接,大幅减少连接数,提升并发性能
头部优化 头部信息冗余大,每次请求都需要完整发送 头部压缩(HPACK 算法),减少重复数据传输,提高传输效率
服务端推送 不支持,客户端需要请求资源 支持,服务器可以主动推送资源,减少请求延迟
安全性 可以使用 HTTPS,但不是强制 默认基于 HTTPS,提高安全性
流量控制 不支持 支持,可以更精细地管理数据传输
优先级控制 不支持,请求处理顺序难以优化 支持,客户端可以指定请求优先级,提高重要资源的加载速度

  • 基于文本的协议格式解析,没有二进制010101的组合格式方便

  • 多个请求可以共享同一个 TCP 连接,并且并行处理,不再受限于 HTTP/1.1 的"一个请求一个连接"的限制。

  • 让双方各自缓存一份header fields表,在头部内容传输时编码一下,等送达后再解码,这样减少头部信息的冗余,提高传输效率

  • 之前都是一个请求对应一个回应,现在服务端也可以自己给客户发资源了 == 推送广告


HTTP请求报文和响应报文

1. HTTP 请求报文格式

请求报文由四部分组成:

  1. 请求行 (Request Line)
    • 包含 请求方法 (GET、POST 等)、URI (资源路径)、HTTP 版本(HTTP/1.1、HTTP/2)。
  2. 请求头部 (Header)
    • 用于传递客户端的请求信息,比如 Host(主机名)、User-Agent(客户端信息)、Accept(可接受的响应类型)等。
  3. 空行 (CRLF,\r\n
    • 用于分隔请求头和请求主体。
  4. 请求主体 (Body,可选)
    • 仅在 POST、PUT 这些方法中包含,通常用于传输表单数据、JSON、XML 等。
示例
复制代码
GET /sample.jsp HTTP/1.1      # 请求行
Host: localhost               # 请求头部
User-Agent: Mozilla/5.0
Accept: image/gif, image/jpeg
Accept-Language: zh-cn
Connection: Keep-Alive
Accept-Encoding: gzip, deflate

username=jinqiao&password=1234  # 请求主体(仅 POST 请求会有)

2. HTTP 响应报文格式

服务器返回的 HTTP 响应报文同样有四部分:

  1. 状态行 (Status Line)
    • 包含 HTTP 版本状态码 (200、404、500 等)、状态描述(OK、Not Found)。
  2. 响应头部 (Header)
    • 服务器返回的信息,如 Content-Type(内容类型)、Content-Length(响应长度)、Server(服务器信息)等。
  3. 空行 (CRLF,\r\n
    • 分隔响应头和响应主体。
  4. 响应主体 (Body)
    • 服务器返回的内容,如 HTML 页面、JSON 数据、图片等。
示例
复制代码
HTTP/1.1 200 OK               # 状态行
Server: Apache Tomcat/5.0.12  # 响应头部
Date: Mon, 6 Oct 2003 13:23:42 GMT
Content-Length: 112
Content-Type: text/html

<html>                        # 响应主体(HTML 内容)
    <head>
        <title>HTTP响应示例</title>
    </head>
    <body>
        Hello HTTP!
    </body>
</html>

总结

报文类型 组成部分 作用
请求报文 请求行 说明请求的资源、方法、协议版本
请求头部 传递客户端的附加信息
空行 分隔请求头和主体
请求主体 传输数据(POST、PUT 请求)
响应报文 状态行 服务器返回的状态码和说明
响应头部 服务器的附加信息
空行 分隔响应头和主体
响应主体 服务器返回的内容,如 HTML、JSON

HTTPS 的原理

  • HTTPS加密过程 :采用非对称加密对称加密结合

  • 客户端先请求https网址,然后连接到服务器的443端口 (HTTPS 默认端口,类似于 HTTP 的80端口)。

  • 采用 HTTPS 协议的服务器提供SSL证书,包含 公钥 和 证书信息,这个证书由CA机构签发,包含 公钥、域名信息、有效期等。此时服务器自己保管私钥,不可泄漏

  • 客户端收到并验证证书,证书是不是CA发的、证书中的提到的域名和实际发来的一不一样、证书是否过期,出现异常时向访问者发送警告,就是我们有时访问网站弹出来的不安全警告,如果都没问题,那么就由客户端随机一个对称密钥用送来的公钥加密。

  • 此时服务端收到,只有用私钥才能解密,然后发现这个对称密钥,此时双方共享了相同的对称密钥,就可以使用对称密钥来通信了

  • 为什么要结合非对称加密和对称加密?

    非对称加密 保障 密钥交换安全(公钥加密,私钥解密),防止中间人攻击。

    对称加密 负责后续数据传输,提高性能,避免非对称加密的计算开销过大。

HTTPS = HTTP + SSL/TLS


在浏览器中输入www.baidu.com后执行的全部过程

7 个步骤:

步骤 过程 详细描述
1. 域名解析(DNS 查询) www.baidu.com 转换为 IP 地址 - 浏览器缓存 :检查本地缓存中是否有 www.baidu.com 的 IP 地址。 - 操作系统缓存 :如果浏览器没有,就去操作系统的 DNS 缓存查找。 - Hosts 文件 :查找本机 C:\Windows\System32\drivers\etc\hosts (Windows) 或 /etc/hosts (Linux/macOS)。 - 本地 DNS 服务器 :如果本地没有,就向本地 DNS 服务器查询(递归查询)。 - 根域名服务器 -> 顶级域名服务器(.com) -> 权威 DNS 服务器 逐级查找(迭代查询)。 - 本地 DNS 服务器缓存结果 并返回给浏览器。
2. 建立 TCP 连接(三次握手) 浏览器与服务器建立可靠连接 - 浏览器使用一个随机端口(1024-65535)向服务器 80(HTTP)或 443(HTTPS) 端口发起 TCP 连接。 - 三次握手过程 : ① 客户端发送 SYN 报文请求连接。 ② 服务器返回 SYN + ACK 确认连接请求。 ③ 客户端发送 ACK,连接建立。
3. 发送 HTTP 请求 浏览器向服务器请求资源 - 客户端发送 HTTP 请求(GET/POST等)。 - 请求头包含:User-AgentCookieHostReferer 等信息。
4. 服务器处理请求并返回响应 服务器返回 HTML 页面 - 服务器解析请求,查询数据库,生成 HTML 代码。 - 服务器返回 HTTP 响应,状态码 200 OK,并附带 HTML 内容。
5. 浏览器解析 HTML 解析 HTML,并请求其他资源 - HTML 解析 :自上而下解析 HTML 代码。 - 发现静态资源(CSS、JS、图片、字体等),并发起新请求获取这些资源。
6. 加载静态资源 下载 CSS、JS、图片等 - 浏览器使用 HTTP 多连接并发加载(HTTP/1.1 复用 TCP 连接,HTTP/2 多路复用)。
7. 页面渲染与呈现 浏览器渲染页面,用户看到内容 - 构建 DOM 树 (解析 HTML)。 - 构建 CSSOM 树 (解析 CSS)。 - 执行 JavaScript (影响 DOM / CSSOM)。 - 合成 Render Tree (确定元素位置)。 - 布局(Layout)绘制(Painting),最终呈现到屏幕上。

明确这些dns服务器

1. 浏览器缓存

浏览器会先检查自己有没有缓存www.baidu.com 的 IP 地址。

示例
  • 如果你刚刚访问过 www.baidu.com ,浏览器可能已经记住它的 IP,比如 110.242.68.66,这时浏览器就会直接使用这个 IP,而不会去查询 DNS 服务器。

2. 操作系统缓存

如果浏览器缓存里找不到,浏览器会询问操作系统

示例(Windows)

在 Windows 里运行这个命令,看看系统里是否缓存了 IP:

sh 复制代码
ipconfig /displaydns

如果 www.baidu.com 在这里有缓存,就会显示类似:

复制代码
www.baidu.com
----------------------------------------
记录类型: 1
TTL: 1000
数据长度: 4
部分: 110.242.68.66

3. Hosts 文件

如果操作系统缓存也没有,操作系统会去 hosts 文件看看有没有手动设置的 IP。

示例(Windows)

打开 C:\Windows\System32\drivers\etc\hosts,看看有没有:

复制代码
110.242.68.66 www.baidu.com
示例(Linux/macOS)

在 Linux/macOS 上,用这个命令查看:

sh 复制代码
cat /etc/hosts

如果 /etc/hosts 里有:

复制代码
110.242.68.66 www.baidu.com

4. 本地 DNS 服务器

如果前面都找不到,操作系统会去本地 DNS 服务器 查询。这个本地 DNS 服务器是网络运营商(比如 电信、联通、移动 )提供的,通常在的 Wi-Fi 或宽带设置里 配置。

示例(Windows)

运行:

sh 复制代码
nslookup www.baidu.com

如果返回:

复制代码
服务器:  202.96.128.86  # 这个是本地 DNS 服务器
地址:  202.96.128.86

非权威应答:
名称:    www.a.shifen.com
地址:    110.242.68.66

这里 202.96.128.86 就是本地 DNS 服务器。

如果本地 DNS 服务器有缓存,就直接返回 IP,否则就会向更高级的 DNS 服务器查询。


5. 根域名服务器 -> 顶级域名服务器(.com) -> 权威 DNS 服务器

如果本地 DNS 服务器没有 www.baidu.com 的 IP,它会去找 根域名服务器 询问 .com 服务器,然后再找 百度的 DNS 服务器

查询过程(假设本地 DNS 没有缓存):
  1. 本地 DNS 服务器根 DNS 服务器 (全球只有 13 台): "根 DNS 服务器,你知道 www.baidu.com 的 IP 吗?"
    • 根 DNS 服务器回答:"我不知道,但 .com 顶级域名服务器 可能知道。"
  2. 本地 DNS 服务器.com 顶级域名服务器 : ".com 服务器,你知道 www.baidu.com 的 IP 吗?"
    • .com 服务器回答:"我不知道,但 baidu.com 的权威 DNS 服务器知道。"
  3. 本地 DNS 服务器baidu.com 的权威 DNS 服务器 : "baidu.com 服务器,你知道 www.baidu.com 的 IP 吗?"
    • baidu.com 服务器回答:"www.baidu.com 的 IP 是 110.242.68.66。"
  4. 本地 DNS 服务器缓存这个 IP,然后返回给操作系统。

6. 本地 DNS 服务器缓存 IP 并返回给浏览器

  • 本地 DNS 服务器 记住 www.baidu.com = 110.242.68.66,下次别的用户查询时,可以直接返回这个 IP,减少查询时间。
  • 浏览器得到 IP 之后,就用这个 IP 建立 TCP 连接 ,访问 www.baidu.com

https://github.com/0voice

相关推荐
shykevin5 小时前
python开发Streamable HTTP MCP应用
开发语言·网络·python·网络协议·http
purrrew9 小时前
【Java ee初阶】HTTP(2)
网络·网络协议·http
火星数据-Tina9 小时前
从HTTP轮询到WebSocket:如何让体育API性能提升100倍?
websocket·网络协议·http
玉笥寻珍11 小时前
筑牢信息安全防线:涉密计算机与互联网隔离的理论实践与风险防控
开发语言·计算机网络·安全·计算机外设·php·安全架构·安全性测试
hgdlip11 小时前
怎么快速换电脑浏览器的ip:方法与注意事项
网络·网络协议·tcp/ip·电脑
九转苍翎14 小时前
计算机网络(1)——概述
计算机网络
李迟14 小时前
Golang实践录:在go中使用curl实现https请求
开发语言·golang·https
Think Spatial 空间思维14 小时前
【HTTPS基础概念与原理】TLS握手过程详解
数据库·网络协议·https
2501_9159090615 小时前
开发日常中的抓包工具经验谈:Charles 抓包工具与其它选项对比
websocket·网络协议·tcp/ip·http·网络安全·https·udp
利刃大大17 小时前
【网络编程】十、详解 UDP 协议
网络·网络协议·udp