【Linux网络与网络编程】06.应用层协议HTTP

前言

虽然应用层协议是我们程序猿自己定的,但实际上已经有大佬们定义了一些现成的又非常好用的应用层协议供我们直接参考使用,HTTP(超文本传输协议)就是其中之一。

在互联网世界中,HTTP(HyperText Transfer Protocol,超文本传输协议)是一个至关重要的协议。它定义了客户端(如浏览器)与服务器之间如何通信以交换或传输超文本(如 HTML 文档)。 HTTP 协议是客户端与服务器之间通信的基础。客户端通过HTTP协议向服务器发送请求,服务器收到请求后处理并返回响应。HTTP协议是一个无连接、无状态的协议,即每次请求都需要建立新的连接,且服务器不会保存客户端的状态信息。

1. URL

1.1 url 的认识

平时我们俗称的 "网址" 其实就是说的 URL(Uniform Resource Locator,统一资源定位符)
下图就是一个URL的常见格式:

认识:

1. 我们上网的行为,本质就是IO。(我的数据给别人,别人的数据给我)

2. 我们上网所获得的图片、音频、文本等都是资源。

3. 我们想要通过网络获取资源,首先就需要确定资源在哪台服务器(IP+端口号),在什么路径下(linux的文件路径,这里的路径指的是web根目录),于是就有了URL。

4. 成熟的应用层协议往往都与端口号是强关联的,所以不需要指明端口号。

1.2 urlencode 和 urldecode

像 / ? : 等这样的字符,已经被 url 当做特殊意义理解了,因此这些字符不能随意出现。比如,某个参数中需要带有这些特殊字符,就必须先对特殊字符进行转义,转义的规则如下:将需要转码的字符转为16进制,然后从右到左,取 4 位(不足 4 位直接处理),每 2 位做一位,前面加上%,编码成%XY格式。urldecode 就是 urlencode 的逆过程。例如:

2. HTTP协议的宏观格式

HTTP不想依赖任何的库所以自己做了序列化和反序列化。

2.1 HTTP的请求行与状态行

2.1.1 请求方法

请求方法中最常用的就是 GET 方法和 POST 方法。

GET和POST方法的区别:

• 相同点:两者均用于请求url的指定资源。

• 不同点:GET方法请求的资源,参数附加在URL中(如 ?name=Alice&age=20),可见且长度受限。POST方法请求的资源,参数封装在请求正文中,不可见且理论上无大小限制。

2.1.2 HTTP的状态码

最常见的状态码, 比如 200(OK), 404(Not Found), 403(Forbidden), 302(Redirect, 重定向), 504(Bad Gateway)

状态码含义应用样例
100Continue上传大文件时,服务器告诉客户端可以 继续上传
200OK访问网站首页,服务器返回网页内容
201Created发布新文章,服务器返回文章创建成功 的信息
204No Content删除文章后,服务器返回“无内容”表示操 作成功
301Moved Permanently网站换域名后,自动跳转到新域名;搜 索引擎更新网站链接时使用
302Found 或 See Other用户登录成功后,重定向到用户首页
304Not Modified浏览器缓存机制,对未修改的资源返回 304 状态码
400Bad Request填写表单时,格式不正确导致提交失败
401Unauthorized访问需要登录的页面时,未登录或认证 失败
403Forbidden尝试访问你没有权限查看的页面
404Not Found访问不存在的网页链接
500Internal Server Error服务器崩溃或数据库错误导致页面无法 加载
502Bad Gateway使用代理服务器时,代理服务器无法从 上游服务器获取有效响应
503Service Unavailable服务器维护或过载,暂时无法处理请求

2.2 HTTP的请求报头

Content-Type:数据类型(text/html 等)
Content-Length:Body 的长度
Host:客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
User-Agent:声明用户的操作系统和浏览器版本信息
referer:当前页面是从哪个页面跳转过来的
Location:搭配 3xx 状态码使用, 告诉客户端接下来要去哪里访问
Cookie:用于在客户端存储少量信息. 通常用于实现会话(session)的功能

3. HTTP协议的版本变迁

版本发布年份核心特性存在问题
HTTP/0.91991仅支持 GET 请求,传输纯文本无状态、无首部、功能极简
HTTP/1.01996引入状态码、请求/响应首部、多种方法每次请求重新建立连接
HTTP/1.11997-1999长连接、管道化、缓存机制队头阻塞、效率不高
HTTP/22015二进制帧、多路复用、头部压缩加密依赖 TLS,复杂度高
HTTP/32022基于 QUIC 协议,0-RTT 建连,减少丢包仍在推广中,部署成本高
特性HTTP/1.0HTTP/1.1HTTP/2HTTP/3
连接方式短连接长连接多路复用(TCP)多路复用(QUIC/UDP)
并发性能管道化,有限提升真正多路复用多路复用 + 低延迟
编码方式文本文本二进制帧结构二进制帧结构
头部压缩HPACKQPACK
队头阻塞严重存在应用层阻塞(TCP 造成)无(QUIC 层完全避免)
安全机制支持 TLS默认需 TLS内置加密(QUIC 原生支持)

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

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

相关文章

磁悬浮轴承的“生死线”:磁轴承气隙与保护轴承气隙的可靠性设计

在高速旋转机械的尖端领域,磁悬浮轴承(AMB)凭借无摩擦、超高转速、免润滑等优势傲视群雄。然而,其核心参数——气隙的设置,尤其是额定工作气隙与保护轴承(辅助轴承)气隙之间的大小关系与具体数值…

QT 学习笔记摘要(一)

第一节 QT介绍 1. QT概述 简单来说,QT就是一个跨平台的客户端技术,HTML画网页一样,而QT就是画客户端的,它不仅可以绘制界面而且可以做单机应用开发,还可以做网络程序的客户端界面开发 更专业的说法是:Qt 是…

QCustomPlot 叠加对象(Overlay Items)

QCustomPlot 提供了一系列可以在图表上叠加显示的对象(items),这些对象不属于数据本身,而是用于标注、辅助线等用途。以下是主要叠加对象的详细说明和使用方法。 1. QCPItemStraightLine (无限直线) 特性: 无限延伸的…

Flink源码阅读环境准备全攻略:搭建高效探索的基石

想要深入探索Flink的底层原理,搭建一套完整且适配的源码阅读环境是必经之路。这不仅能让我们更清晰地剖析代码逻辑,还能在调试过程中精准定位关键环节。接下来,结合有道云笔记内容,从开发工具安装、源码获取导入到调试配置&#x…

Dify,FastGPT,RagFlow有啥区别,在智能问答方面有啥区别

Dify、FastGPT、RagFlow都是当前非常流行的低代码AI应用开发平台,它们都专注于让用户能够快速构建AI应用,但在设计理念、功能特色和适用场景上有明显区别。 让我详细对比一下这三个平台: 1. 平台定位对比 Dify 定位:全栈AI应用…

基站定位接口如何如何用PHP实现调用?

随着“新基建”战略的推进,我国移动通信基站数量快速增长。截至2024年底,全国基站总数已达1265万个,其中5G基站超425万个,构建起全球规模最大、技术领先的通信网络。 在这一基础上,基站查询API通过整合三大运营商数据…

Day 4:Shell流程控制——从“直线思维“到“智能决策“的进化

目录 一、if语句:你以为简单其实暗藏杀机1. 基础语法(看似简单却容易踩坑)2. 安全写法规范(企业级建议) 二、条件测试的六大门派1. 文件测试(运维最爱)2. 字符串比较(引号是灵魂&…

分布式训练中的随机种子策略:深入理解与实践指南

分布式训练中的随机种子策略:深入理解与实践指南 引言:一个容易被忽视的关键细节 在深度学习的分布式训练中,你是否见过这样的代码? torch.manual_seed(process_seed) # PyTorch操作 random.seed(process_seed) # Pyth…

金山办公发布WPS智慧教育平台,发力教育AI意义何在?

钛媒体消息,金山办公发布面向教育用户的 WPS 智慧教育平台,面对着金山办公的发力,我们该怎么分析呢? 首先,从市场拓展与用户需求响应角度看,金山办公此次推出WPS智慧教育平台,直接瞄准了教育领…

无人机航电系统之语音通信技术篇

无人机航电系统的语音通信技术是确保无人机与地面控制站、其他无人机或相关人员之间实现高效、稳定语音交互的关键技术,在军事侦察、应急救援、物流运输、航拍测绘等众多领域发挥着至关重要的作用。 一、技术原理 无人机航电系统的语音通信技术主要基于无线通信原理…

element plus 的树形控件,如何根据后台返回的节点key数组,获取节点key对应的node节点

在使用 Element Plus 的 el-tree 组件时,如果后端返回的节点 key 数组中包含了部分选中的父级节点的 key,可能会导致该父级节点下的所有子节点也被默认选中。这是因为 el-tree 的默认行为是:如果一个父节点被选中,那么其所有子节点…

什么是Sentinel

什么是 Sentinel? 在分布式系统中,服务间的依赖关系错综复杂。一个服务的故障,很可能像多米诺骨牌一样,迅速蔓延并导致整个系统崩溃,这就是我们常说的“雪崩效应”。为了避免这种灾难性后果,我们需要一种强大的机制来保护我们的系统,而 Sentinel 正是为此而生。 Senti…

AWS 使用图形化界面创建 EKS 集群(零基础教程)

无需命令行!通过 AWS 控制台图形化操作,轻松创建 Kubernetes 集群。 文章目录 文章简介 一、准备工作:登录 AWS 控制台 二、创建 EKS 集群(控制面) 1. 创建 EKS 集群 2. 设置集群基本信息 3. 配置网络设置 三、添加…

[C#] Winform - 进程间通信(SendMessage篇)

一、发送端 // 窗体:发送端 public partial class SendForm : Form {public SendForm(){InitializeComponent();}// 按钮:发送private void btnSend_Click(object sender, System.EventArgs e){IntPtr hwnd User32Helper.FindWindow(null, "接收端…

锂电池保护板测试仪:守护电池安全的幕后保障

在电动汽车、储能电站和便携式电子设备中,锂电池作为核心动力源,其能量密度与安全性始终是行业关注的焦点。锂电池在过充、过放、短路等异常情况下可能引发起火甚至爆炸,而锂电池保护板正是解决这一问题的关键组件。为确保保护板性能可靠&…

Qemu搭建RISC-V,运行opensbi+u-boot+img

✨1.先下载一个Ubuntu镜像 https://cdimage.ubuntu.com/releases/24.04/release/ 我这里下载的是这个RISC-V的 🌟1.2.解压镜像 xz -d ubuntu-24.04.2-preinstalled-server-riscv64.img.xz ✨2.准备RISC-V的QEMU 打开qemu官网https://www.qemu.org/&#xff0c…

【实战手册】银河麒麟服务器系统进入单用户模式修改密码(root)指南

目录 前言 一、银河麒麟单用户模式简介 二、进入单用户模式修改密码 三、登录验证新密码 结语 前言 在日常服务器运维工作中,忘记root密码是系统管理员偶尔会遇到的问题。作为国产操作系统的优秀代表,银河麒麟服务器系统提供了通过单用户模式重置r…

偏微分方程通解求解2

题目 求下列方程的通解: { u x y = u x u y u − 1 ; u x y = u x u y ; u x y = u x u y u u 2 + 1 ; \begin{cases} u_{xy} = u_x u_y u^{-1}; \\ u_{xy} = u_x u_y; \\ u_{xy} = \dfrac{u_x u_y u}{u^2 + 1}; \end{cases} ⎩⎪⎪⎨⎪⎪⎧​uxy​=ux​uy​u−1;uxy​=ux​…

用于算法性能预测的 GNN 框架

大家读完觉得有帮助记得关注和点赞!!! 抽象。 数值黑盒优化中的自动算法性能预测通常依赖于问题特征,例如探索性景观分析特征。这些特征通常用作机器学习模型的输入,并以表格格式表示。然而,这种方法往往忽…

拯救海量数据:PostgreSQL分区表性能优化实战手册(附压测对比)

1 分区表核心原理与生产痛点 物理存储结构决定性能边界 PostgreSQL分区表的本质是继承表路由规则的逻辑封装。当父表被查询时,查询优化器通过CHECK约束快速定位子表,其性能核心取决于: -- 关键系统视图 SELECT relname, relkind, relpages …