HTTP基本概述

news2025/5/25 10:46:44

HTTP基本概述

报文格式

HTTP报文分为 请求报文响应报文

一、请求报文

 请求行(Request Line)
 请求头部(Request Headers)
 (空行)
 请求体(Request Body)  ← 可选,如 POST 请求时携带的数据

示例:

 GET /index.html HTTP/1.1
 Host: www.example.com
 User-Agent: Mozilla/5.0
 Accept: text/html
 ​

报文的最后是一个空白行结束,没有 body。

在很多时候,特别是浏览器发送 GET 请求的时候都是这样,HTTP 报文经常是只有 header 而没 body,相当于只发了一个超级“大头”过来,你可以想象的出来:每时每刻网络上都会有数不清的“大头儿子”在跑来跑去。

不过这个“大头”也不能太大,虽然 HTTP 协议对 header 的大小没有做限制,但各个 Web 服务器都不允许过大的请求头,因为头部太大可能会占用大量的服务器资源,影响运行效率。


说明:

  1. 请求行:

    • 格式:请求方法 请求URL HTTP版本

    • 示例:GET /index.html HTTP/1.1

  2. 请求头部:

    • 描述客户端环境和请求信息

    • 示例:Host: www.example.com User-Agent: Mozilla/5.0

  3. 空行:

    • 请求头与请求体之间有一个空行,用来分割

  4. 请求体:

    • 可选,一般用于 POSTPUT 等方法,包含提交的数据(如表单、JSON)


二、响应报文

 状态行(Status Line)
 响应头部(Response Headers)
 (空行)
 响应体(Response Body) ← 可选,如 HTML 页面、图片等
 ​

示例:

 HTTP/1.1 200 OK
 Date: Mon, 12 May 2025 10:00:00 GMT
 Content-Type: text/html; charset=UTF-8
 Content-Length: 137
 ​
 <html>
   <body>
     <h1>Hello, World!</h1>
   </body>
 </html>
 ​

说明:

  1. 状态行:

    • 格式:HTTP版本 状态码 状态描述

    • 示例:HTTP/1.1 200 OK

  2. 响应头部:

    • 描述服务器和响应内容信息

    • 示例:

      Content-Type: text/html; charset=UTF-8 Content-Length: 137

  3. 空行:

    • 头部与主体之间必须有一个空行,用来分割

  4. 响应体:

    • 服务器返回的实际内容,如 HTML 网页、图片、JSON 数据等


状态码

状态码含义常见的状态码
1XX接收的请求正在处理101、102
2XX成功,报文已经收到并被正确处理200、204
3XX重定向,资源位置发生变动,需要客户端重新发送请求301、302
4XX客户端错误,服务器无法处理400、403、404
5XX服务器错误,服务器在处理请求时内部发生了错误500、501、502

常用方法

一、分类

HTTP/1.1 规定了八种方法,单词都必须是大写的形式,我先简单地列把它们列出来,后面再详细讲解。

  1. GET:获取资源,可以理解为读取或者下载数据;

  2. HEAD:获取资源的元信息;

  3. POST:向资源提交数据,相当于写入或上传数据;

  4. PUT:类似 POST;

  5. DELETE:删除资源;

  6. CONNECT:建立特殊的连接隧道;

  7. OPTIONS:列出可对资源实行的方法;

  8. TRACE:追踪请求 - 响应的传输路径。

二、安全与幂等

  1. 安全:所谓的“安全”,是指请求方法不会“破坏”服务器上的资源,即不会对服务器上的资源造成实质的修改。

按照这个定义,只有 GET 和 HEAD 方法是“安全”的,因为它们是“只读”操作,只要服务器不故意曲解请求方 法的处理方式,无论 GET 和 HEAD 操作多少次,服务器上的数据都是“安全的”。

而 POST/PUT/DELETE 操作会修改服务器上的资源,增加或删除数据,所以是“不安全”的。

  1. 幂等:所谓的“幂等”,意思是多次执行相同的操作,结果也都是相同的,即多次“幂”后结果“相等”。

    很显然,GET 和 HEAD 既是安全的也是幂等的,DELETE 可以多次删除同一个资源,效果都是“资源不存在”,所以也是幂等的。


URI和URL

一、定义区别

概念全称含义
URIUniform Resource Identifier(统一资源标识符)可以唯一标识一个资源
URLUniform Resource Locator(统一资源定位符)一种具体的 URI,它不仅唯一标识资源,而且提供了定位该资源的信息

二、二者关系

  • URLURI子集

  • 所有 URL 都是 URI 的一种

但不是所有 URI 都是 URL(比如 URN)

简而言之:

URL 是 URI 的子集,URI 侧重于“标识”,URL 侧重于“访问“


端口号:

HTTP默认端口号为:80

HTTPS默认端口号为:443

如果用户指定了端口,比如端口号:8080,则目标端口号为8080


连接

在 TCP 协议里,建立连接和关闭连接都是非常“昂贵”的操作。TCP 建立连接要有“三次握手”,发送 3 个数据包,需要 1 个 RTT;关闭连接是“四次挥手”,4 个数据包需要 2 个 RTT。

一、短连接

每次客户端与服务器通信时,都要新建一次连接,请求发送完毕后立即关闭连接。

也就是说,一次请求对应一次连接。

特点:

  • 每次通信都需要三次握手 + 四次挥手,开销较大

  • 实现简单,适合偶尔通信的场景

  • 典型代表是:HTTP/1.0

举例: 打开网页,每点击一次链接,就建立一次 TCP 连接,请求数据,拿到响应后就断开。


二、长连接

长连接是指建立一次连接后,可以发送多个请求和接收多个响应,期间保持连接不断开,直到空闲太久或手动断开。

特点:

  • 避免频繁建立/断开连接,性能更高

  • 节省网络资源和时间

  • 常用于:HTTP/1.1(默认支持长连接)、HTTP/2、数据库连接池等

举例: 打开一个网页,加载多个图片、样式、脚本等资源时,复用一个连接,减少延迟。


三、队头阻塞

“队头阻塞”与短连接和长连接无关,而是由 HTTP 基本的“请求 - 应答”模型所导致的。

因为 HTTP 规定报文必须是“一发一收”,这就形成了一个先进先出的“串行”队列。队列里的请求没有轻重缓急的优先级,只有入队的先后顺序,排在最前面的请求被最优先处理。

如果队首的请求因为处理的太慢耽误了时间,那么队列里后面的所有请求也不得不跟着一起等待,结果就是其他的请求承担了不应有的时间成本。

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

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

相关文章

Canvas SVG BpmnJS编辑器中Canvas与SVG职能详解

Canvas详解与常见API 一、Canvas基础 核心特性 • 像素级绘图&#xff1a;Canvas是基于位图的绘图技术&#xff0c;通过JavaScript操作像素实现图形渲染&#xff0c;适合动态、高性能场景&#xff08;如游戏、数据可视化&#xff09;。 • 即时模式&#xff1a;每次绘制需手动…

dify多实例部署,一台机器部署多个dify实例

dify多实例部署 目的 实现在一台机器上&#xff0c;部署多个dify的实例。比如一个部署1.2版本&#xff0c;一个部署1.3版本。废话没有&#xff0c;直接上干货。 前提 你的电脑已经部署了一个dify实例&#xff0c;并成功运行。比如已经部署成功0.15.3版本。 步骤如下&#…

ML 48.机器学习之临床生存树(rpartSurv)

简介机器学习中生存树&#xff08;Survival Tree&#xff09;的原理详解 生存树是结合决策树与生存分析的机器学习模型&#xff0c;主要用于处理带有时间-事件数据&#xff08;包含删失数据&#xff09;的预测问题。其核心目标是&#xff1a;通过树状结构对数据进行递归分割&am…

HarmonyOS 应用开发,如何引入 Golang 编译的第三方 SO 库

本指南基于笔者临时修复的 ohos_golang_go 项目fork&#xff0c;解决HO 应用导入 cgo编译产物时的 crash 问题。 1. 下载 ohos_golang_go git clone https://gitcode.com/deslord/ohos_golang_go.git&#x1f4cc; 该仓库为笔者临时修复版本&#xff0c;修复了 CGO 编译模式下…

一体化雷达波明渠流量计简介

一、技术定义与核心原理 一体化雷达波明渠流量计是基于微波技术的全自动流量监测设备&#xff0c;采用 24G K 波段平面雷达技术&#xff0c;通过非接触式测量方式实现对明渠、河道、排水管网等场景的水位、流速及流量监测。其核心原理是利用雷达发射高频电磁波&#xff0c;经水…

Pr -- 耳机没有Pr输出的声音

问题 很久没更新视频号了&#xff0c;想用pr剪辑一下&#xff0c;结果使用Pr打开后发现耳机没有Pr输出的声音 解决方法 在编辑--首选项-音频硬件中设置音频硬件的输出为当前耳机设备

白皮精读:2024年国家数据基础设施建设指引【附全文阅读】

《国家数据基础设施建设指引》提出建设覆盖数据采集至安全全链条的新型基础设施,目标到 2029 年形成横向联通、纵向贯通的格局,聚焦数据可信流通、算力协同、高速传输、安全保障四大功能,明确技术架构与重点方向,强调政府与市场协同,分阶段推进试点及规模化部署,为数字中…

穿屏技巧:Mac-Windows一套鼠标键盘控制多台设备 (sharemouse6.0-Keygen)| KM-401A

文章目录 引言I sharemouse6.0介绍功能介绍关闭自动更新安装包II 安装系统对应的sharemouse软件Windowsmac版本III 知识扩展:SCP、FTP、SSH文件传输SCP配置SSH密钥免密登录FTP(File Transfer Protocal,文件传输协议)引言 基于USB进行同步键盘和鼠标事件,更流畅。 基于局域…

【写在创作纪念日】基于SpringBoot和PostGIS的各省东西南北四至极点区县可视化

目录 前言 一、空间检索简介 1、空间表结构 2、四至空间检索 二、前后端实现 1、后端实现 2、前端集成 三、成果展示 1、东部省份 2、西部省份 3、南部省份 4、北部省份 5、中部省份 四、总结 前言 在当今数字化时代&#xff0c;地理信息数据的分析与可视化对于众…

如何制作可以本地联网搜索的MCP,并让本地Qwen3大模型调用搜索回答用户问题?

环境: SearXNG Qwen3-32B-FP8 vllm 0.8.5 问题描述: 如何制作可以本地联网搜索的MCP,并让本地Qwen3大模型调用搜索回答用户问题? 解决方案: 一、安装searxng 1.按需新建模型相关文件夹 mkdir MCP chmod 777 /mnt/program/MCP2.配置conda源 nano ~/.condarc nano…

服务器硬盘虚拟卷的处理

目前的情况是需要删除逻辑卷&#xff0c;然后再重新来弄一遍。 数据已经备份好了&#xff0c;所以不用担心数据会丢失。 查看服务器的具体情况 使用 vgdisplay 操作查看服务器的卷组情况&#xff1a; --- Volume group ---VG Name vg01System IDFormat …

一个国债交易策略思路

该国债交易策略的核心在于通过分析历史价格数据来识别市场趋势&#xff0c;并在趋势确认时进行开仓操作。策略的设计思路结合了价格波动范围的计算和市场波动性的评估&#xff0c;旨在捕捉市场的短期趋势并控制风险。 首先&#xff0c;策略通过对过去5根K线的最高价和最低价进行…

【三维重建】【3DGS系列】【深度学习】3DGS的理论基础知识之如何形成高斯椭球

【三维重建】【3DGS系列】【深度学习】3DGS的理论基础知识之如何形成高斯椭球 文章目录 【三维重建】【3DGS系列】【深度学习】3DGS的理论基础知识之如何形成高斯椭球前言高斯函数一维高斯多维高斯 椭球基本定义一般二次形式 3D高斯椭球3D高斯与椭球的关系各向同性(Isotropic)和…

手写ES6 Promise() 相关函数

手写 Promise() 相关函数&#xff1a; Promise()、then()、catch()、finally() // 定义三种状态常量 const PENDING pending const FULFILLED fulfilled const REJECTED rejectedclass MyPromise {/*定义状态和结果两个私有属性:1.使用 # 语法&#xff08;ES2022 官方私有字…

【NLP 76、Faiss 向量数据库】

压抑与痛苦&#xff0c;那些辗转反侧的夜&#xff0c;终会让我们更加强大 —— 25.5.20 Faiss&#xff08;Facebook AI Similarity Search&#xff09;是由 Facebook AI 团队开发的一个开源库&#xff0c;用于高效相似性搜索的库&#xff0c;特别适用于大规模向…

软件名称:系统日志监听工具 v1.0

软件功能&#xff1a;一款基于 PyQt5 开发的 Windows 系统日志监听工具&#xff0c;适用于系统运维、网络管理、故障排查等场景&#xff0c;具备以下核心功能&#xff1a; 支持监听系统三大日志源&#xff1a;应用程序 / 系统 / 安全日志实时抓取新日志事件&#xff0c;自动滚…

Spring AI 之结构化输出转换器

截至 2024 年 2 月 5 日,旧的 OutputParser、BeanOutputParser、ListOutputParser 和 MapOutputParser 类已被弃用,取而代之的是新的 StructuredOutputConverter、BeanOutputConverter、ListOutputConverter 和 MapOutputConverter 实现类。后者可直接替换前者,并提供相同的…

Java虚拟机面试题:内存管理(上)

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

进程间通信I·匿名管道

目录 进程间通信&#xff08;IPC&#xff09; 含义 目的 分类 匿名管道 原理 创建过程 特性 四大情况 close问题 代码练习 简单通信 进程池 小知识 进程间通信&#xff08;IPC&#xff09; 含义 就是让不同的进程能看到同一份资源&#xff0c;实现数据交流。 …

Ubuntu Linux系统的基本命令详情

1.Ubuntu Linux是以桌面应用为主的Linux发行版操作系统 2.Ubuntu的用户使用 在登录系统一般使用在安装系统时建立的普通用户登录&#xff0c;如果要使用超级用户权限 #sudo ---执行命令 sudo passwd ---修改用户密码 su - root ---切换超级用户 系统的不同&#xff0c;命令也不…