当前位置: 首页 > news >正文

应用层Http协议(1)

应用层Http协议(1)

在互联网世界中,HTTP(HyperText Transfer Protocol,超文本传输协议)是一个至关重要的协议。它定义了客户端(如浏览器)与服务器之间如何通信,以交换或传输超文本(如 HTML 文档)。

HTTP 协议是客户端与服务器之间通信的基础。客户端通过 HTTP 协议向服务器发送请求,服务器收到请求后处理并返回响应。HTTP 协议是一个无连接、无状态的协议,即每次请求都需要建立新的连接,且服务器不会保存客户端的状态信息。

URL认识

平时我们俗称的 “网址” 其实就是说的 URL

https://news.qq.com/rain/a/20250808A01IJR00

拿这个举例子:

https:获取资源采用的协议

news.qq.com :域名

域名相当于IP地址,那么为什么不直接用IP地址

核心区别

特性域名(如 example.comIP地址(如 192.0.2.1
可读性人类易记(google.com数字组合难记忆(142.250.190.46
稳定性可保持不变,后台IP可更换直接绑定服务器,变更需手动更新
灵活性支持负载均衡、CDN、多服务器托管固定指向单一服务器
安全性可启用HTTPS证书(依赖域名)证书难以绑定到纯IP

后面是要访问的资源路径 ,本质也是socket通信

什么是资源?

资源:视频,网页,图片,。。。

人的上网行为有两种:从远端拿资源;将资源进行上传

http角度:“资源”就是文件,文件在LINUX指定路径下

http[s]:port 域名:IP地址(具有唯一性)

路径:目标路径上特定的文件

成熟协议都是有特定的端口号:https:443 http:80

encode,decode编码

像 / ? : 等这样的字符, 已经被 url 当做特殊意义理解了. 因此这些字符不能随意出现.

比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义.

转义的规则如下:

将需要转码的字符转为 16 进制,然后从右到左,取 4 位(不足 4 位直接处理),每 2 位做一位,前面加上%,编码成%XY 格式

例如
在这里插入图片描述

“+” 被转义成了 “%2B”

urldecode 就是 urlencode 的逆过程;

HTTP协议版本差异

HTTP协议自1991年诞生以来经历了多个版本的演进,每个版本都带来了显著的改进。以下是各主要版本的核心差异和技术特点:

  1. HTTP/0.9 (1991)

原始版本,极度简单:

  • 只有GET方法
  • 无HTTP头、状态码或错误处理
  • 响应只能是HTML格式
GET /index.html
<HTML>...</HTML>
  1. HTTP/1.0 (1996)

正式标准化,引入关键特性:

  • 新增HEAD/POST方法
  • 引入HTTP头(Header)概念
  • 状态码(如200/404)
  • 支持Content-Type(可传输非HTML内容)
GET /index.html HTTP/1.0
User-Agent: Mozilla/4.0HTTP/1.0 200 OK
Content-Type: text/html
Content-Length: 1234<html>...</html>
  1. HTTP/1.1 (1997)

现代Web基础,主要改进:

特性说明
持久连接默认Connection: keep-alive
管道化(Pipelining)支持请求批量发送(但存在队头阻塞)
分块传输编码Transfer-Encoding: chunked
缓存控制Cache-Control
主机头支持虚拟主机(Host头)

示例改进

GET /index.html HTTP/1.1
Host: www.example.com
Connection: keep-alive
User-Agent: Mozilla/5.0
  1. HTTP/2 (2015)

革命性升级,基于Google SPDY:

特性优势
二进制协议替代文本协议,解析更高效
多路复用解决队头阻塞,单连接并行传输
头部压缩(HPACK)减少冗余头部传输
服务器推送主动推送关联资源
流优先级智能资源调度

技术实现

流1: GET /
流2: GET /css
流3: GET /js
推送/css
客户端
服务器
  1. HTTP/3 (2022)

基于QUIC协议,解决TCP限制:

特性突破
UDP传输避免TCP队头阻塞
0-RTT连接加速重复访问
改进的多路复用单个丢包不影响其他流
内建加密默认TLS 1.3
连接迁移IP变更不影响连接(如WiFi切4G)

性能对比

# 网络延迟100ms、丢包率2%环境下:
HTTP/1.1: 加载时间 4.3s
HTTP/2:   加载时间 3.1s 
HTTP/3:   加载时间 1.8s

关键差异总结

版本传输层核心优势主要缺陷
1.0TCP基础标准化每个资源需要独立TCP连接
1.1TCP持久连接、管道化队头阻塞、头部冗余
2TCP多路复用、头部压缩TCP层队头阻塞
3QUIC0-RTT、无队头阻塞、连接迁移中间设备支持度仍在提升

协议选择建议

  1. 传统系统:HTTP/1.1(兼容性最好)
  2. 现代Web应用:HTTP/2(主流支持,85%+浏览器覆盖率)
  3. 移动端/高延迟场景:HTTP/3(逐步普及,Cloudflare等已支持)

Nginx配置示例

# 同时支持HTTP/1.1和HTTP/2
listen 443 ssl http2;# 启用HTTP/3(需Nginx 1.25+)
listen 443 quic reuseport;
add_header Alt-Svc 'h3=":443"';

各版本HTTP协议在保持向后兼容的同时不断优化性能,理解这些差异有助于开发者针对不同场景做出最佳技术选型。

HTTP协议格式

在这里插入图片描述

• 首行: [版本号] + [状态码] + [状态码解释]

• Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\r\n 分隔;遇到空行表示 Header 部分结束

• Body: 空行后面的内容都是 Body. Body 允许为空字符串. 如果 Body 存在, 则在Header 中会有一个 Content-Length 属性来标识 Body 的长度; 如果服务器返回了一个 html 页面, 那么 html 页面内容就是在 body 中.

http://www.lryc.cn/news/615582.html

相关文章:

  • Spring框架基础
  • 黑马SpringAI项目-聊天机器人
  • 力扣热题100------70.爬楼梯
  • Day38--动态规划--322. 零钱兑换,279. 完全平方数,139. 单词拆分,56. 携带矿石资源(卡码网),背包问题总结
  • 原生Vim操作大全
  • 大模型“涌现”背后的暗线——规模、数据、目标函数的三重协奏
  • 算法_python_学习记录_02
  • linux 操作ppt
  • Uipath Studio中邮件自动化
  • HTML全景效果实现
  • Android 开发问题:The specified child already has a parent.
  • 202506 电子学会青少年等级考试机器人五级器人理论真题
  • NX二次开发——面有关的函数
  • C++的结构体指针
  • 密集遮挡场景识别率↑31%!陌讯轻量化部署方案在智慧零售的实战解析
  • Linux文件操作详解:一切皆文件
  • app功能测试工具
  • 智慧水务漏检率↓75%:陌讯水下视觉监测方案实战解析
  • 动态规划(相同地方不同状态)
  • Web前端之Vue框架
  • 【牛客刷题】小红的区间删除
  • MM-2025 | 浙大vivo需求驱动的具身导航!CogDDN:具有基于决策优化和双过程思维的认知驱动导航方法
  • 客服Agent革命:智能客服系统的技术实现与效果评估
  • PyQt5技术栈简述
  • 如何搭建ELK
  • 【Spring Boot 快速入门】八、登录认证(二)统一拦截
  • 环路补偿知识
  • 算法_python_学习记录_01
  • 比较useCallback、useMemo 和 React.memo
  • leetcode 11. 盛最多水的容器 -java