应用层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.pswp.cn/web/92609.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/92609.shtml

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

相关文章

elementui input无法输入问题

背景。开发小程序。自定义表单在pc段设置好input输入框属性后。 在小程序端无法输入原因&#xff1a;长度受限制&#xff0c;导致input组件的maxlength属性认为长度是0导致无法输入任何值。看解释是应为遇到空字符串等情况会设置为0解决。因为未找到设置maxlength为0处&#xf…

算法_python_学习记录_02

算法学习和视频学习过程中&#xff0c;有许多前几天还不知道的知识点&#xff0c;现在一点一点归纳整理出来&#xff0c;稳步前进&#xff0c;前进~ 20_贪心算法系列题 00_参考文档 详解贪心算法&#xff08;Python实现贪心算法典型例题&#xff09;_顺序贪婪算法-CSDN博客P…

Meta AI水印计划的致命缺陷——IEEE Spectrum深度文献精读

一、原文信息 标题: Metas AI Watermarking Plan Is Flimsy, at Best 中文译名: Meta的AI水印计划脆弱不堪 作者: David Evan Harris(加州大学伯克利分校)、Lawrence Norden(纽约大学法学院) 发表日期: 2024年3月5日 发表期刊: IEEE Spectrum 二、原文全文翻译 Met…

gpt-oss 全量技术解读

一、概述 gpt-oss 是 OpenAI 发布的开放权重&#xff08;open-weight&#xff09;模型系列&#xff0c;面向强推理、Agent 能力与多样化应用场景。 提供两种规格&#xff1a; gpt-oss-120b&#xff1a;面向生产与高推理需求&#xff0c;单卡 80GB GPU&#xff08;如 NVIDIA …

实现EtherNet/IP网络与Modbus TCP网络之间数据互通

硬件连接与配置使用工业以太网网关&#xff08;如ENE-350&#xff09;作为桥接设备&#xff0c;通过以太网交换机实现硬件互联。 网关需根据应用场景配置为EtherNet/IP从站或Modbus TCP主/从站模式。案例1&#xff1a;EtherNet IP主站PLC和Modbus TCP主站PLC的互联网关配置&…

zookeeper因jute.maxbuffer启动异常问题排查处理

#作者&#xff1a;程宏斌 文章目录一、前言二、问题描述三、定位过程四、问题根因五、解决方案根本解决方案应急处理方案调大参数可能出现的问题六、总结为什么超出会报错官方对于jute.maxbuffer的解释注意事项官方建议一、前言 在分布式系统中&#xff0c;ZooKeeper作为关键的…

Java基础十三: List

目录 1.Java LinkedList 的高级应用与示例 1.1 LinkedList的基本使用 基本操作示例 1.2 LinkedList独有的方法 特定方法示例 1.3 队列模式&#xff08;先进先出&#xff09; 队列模式示例 1.4 栈模式&#xff08;先进后出&#xff09; 栈模式示例 总结 2.Java Vecto…

[机器学习]03-基于核密度估计(KDE)的鸢尾花数据集分类

关键点&#xff1a;使用核密度估计&#xff08;KDE&#xff09; 估计类别条件概率密度&#xff08;高斯核&#xff0c;带宽0.2&#xff09;采用最大后验概率&#xff08;MAP&#xff09; 决策准则进行分类程序代码&#xff1a;import random import matplotlib from sklearn.ne…

jmeter怎么实现多个请求真正的同时发送

1.首先在插件管理器Plugins Manager中搜索插件Parallel Controller&Sampler&#xff0c;勾选上对应的插件后&#xff0c;在右下角点击Apply Changes and Restart JMeter&#xff0c;安装插件2.插件安装完毕后&#xff0c;然后在线程组上面右击&#xff0c;点击添加--逻辑控…

复杂环境下车牌识别准确率↑29%:陌讯动态特征融合算法实战解析

原创声明本文为原创技术解析&#xff0c;核心技术参数与架构设计引用自《陌讯技术白皮书》&#xff0c;转载需注明来源。一、行业痛点&#xff1a;车牌识别的现实挑战在智慧交通、停车场管理等场景中&#xff0c;车牌识别作为关键技术环节&#xff0c;长期面临多重环境干扰。据…

Express中间件和路由及响应方法

1.中间件分类 应用程序级别中间件 通过 app.use() 或 app.METHOD()&#xff08;如 app.get&#xff09;绑定的中间件&#xff0c;作用于整个应用程序。例如 记录请求日志、解析请求体等全局功能。例如&#xff1a; app.use((req, res, next) > {console.log(Request URL:…

Dokcer创建中间件环境

简而言之&#xff0c;用docker来搞中间件环境比价好使&#xff0c;不用关心各种环境了 rabbitmqsudo docker run -d \--name rabbitmq \-p 5672:5672 \-p 15672:15672 \rabbitmq:3.8-managementredis 5.0.3 docker start my-redisdocker run --name my-redis -d -p 6379:6379 \…

Linux高级编程-文件操作

1.Linux下的文件类型7种文件类型&#xff1a;b 块设备文件 -------> 存储类设备&#xff08;硬盘&#xff09; c 字符设备文件 ------->如输入输出设备&#xff08;鼠标键盘显示器...&#xff09; d 目录文件 ------->文件夹 - 普通文件 -------&g…

web:vue中import *** from 和import {***} from的区别

在Vue.js中,import语句用于导入模块、组件或变量等。使用带花括号{}和不带花括号的区别主要在于导入的内容是具名导出(named exports)还是默认导出(default export)。 默认导入 (Default Import) - 不带花括号 import Vue from vue; import MyComponent from ./MyCompone…

Mysql如何优化my.conf配置文件?

优化 MySQL 的 my.cnf 配置文件&#xff0c;可以显著提升数据库性能&#xff0c;特别是在高并发或大数据量场景下。以下是优化 my.cnf 的方法和建议&#xff0c;涵盖 常见配置项、参数说明 和 优化技巧。1. 优化前的准备工作在修改 my.cnf 之前&#xff0c;需了解以下内容&…

Cherryusb UAC例程对接STM32内置ADC和DAC播放音乐和录音(上)=>TIM+DAC+ADC+DMA正弦波回环测试

0. 概述 文本目标基于Cherryusb官方例程audio_v1_mic_speaker_multichan_template.c&#xff0c;底层对接STM32的内置ADC和DAC&#xff0c;实现录音和播放。通过电脑播放歌曲&#xff0c;板子发出声音。通过电脑录音机开启录音&#xff0c;板子作为麦克风采集声音&#xff0c;…

数模个人笔记

写在前面&#xff1a;不建议观看&#xff0c;会烂尾的1.马氏链&#xff1a;状态空间指的是随机变量的取值范围&#xff0c;xi称为一个状态&#xff0c;应用背景在现在的条件下下一状态发生的概率&#xff0c;比如退火&#xff0c;他的条件概率可化简为&#xff1a;且nm时刻的概…

Spring Boot自定义Starter:从原理到实战全解析

1. 背景与需求1.1 什么是Starter&#xff1f; Spring Boot的起步依赖&#xff08;Starter&#xff09;是一种特殊的依赖描述符&#xff0c;用于简化Spring应用的依赖管理和自动配置。官方文档将Starter定义为“一组方便的依赖描述符”&#xff0c;开发者只需引入对应的Starter&…

安宝特方案丨工业AR+AI质检方案:致力于提升检测精度与流程效率

据IDC预测&#xff0c;2025年中国工业AI质检市场规模将达62亿元&#xff0c;年复合增长率28.5%&#xff0c;新能源、消费电子、高端装备三大领域贡献超70%市场份额。这一数据印证了AI质检已从可选技术升级为制造业降本增效的生存刚需。当前制造业质检环节正面临&#xff1a;精度…

AudioLLM

参考链接&#xff1a;https://mp.weixin.qq.com/s/cscrUn7n_o6PdeQRzWpx8g 视频教程&#xff1a;https://www.bilibili.com/video/BV1LGbozkEDY 模型代码&#xff1a;https://github.com/boson-ai/higgs-audio 如果是两个模型加在一起&#xff1a;一个语言模型&#xff0c;一个…