【音视频 | HTTP协议】HTTP协议详细介绍(HTTP方法、报文格式、报文头部字段、状态码)

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
🤣本文内容🤣:🍭介绍 🍭
😎金句分享😎:🍭你不能选择最好的,但最好的会来选择你——泰戈尔🍭
⏰发布时间⏰: 2024-07-18 18:20:51

本文未经允许,不得转发!!!

目录

  • 🎄一、概述
    • ✨1.1 HTTP 协议的工作过程
  • 🎄二、HTTP 方法
  • 🎄三、HTTP报文(请求报文、响应报文)格式
    • ✨3.1 、HTTP 的 请求报文
    • ✨3.2 、HTTP 的 响应报文
  • 🎄四、常见的HTTP报文头部字段
  • 🎄五、HTTP 状态码
    • ✨5.1、状态码格式
    • ✨5.2、常见状态码
    • ✨5.3、响应状态码有5类
  • 🎄六、总结



在这里插入图片描述

🎄一、概述

HTTP(Hyper Text Transfer Protocol): 全称超文本传输协议,是用于从万维网(WWW,World Wide Web )服务器传输超文本到本地浏览器的传送协议。

HTTP 是一种应用层协议,是基于 TCP/IP 通信协议来传递数据的,其中 HTTP1.0、HTTP1.1、HTTP2.0 均为 TCP 实现,HTTP3.0 基于 UDP 实现。现主流使用 HTTP1.0 和 HTTP3.0。

✨1.1 HTTP 协议的工作过程

  • 1、HTTP服务端创建一个HTTP端口(默认80)的TCP连接,等待HTTP客户端连接;
  • 2、HTTP客户端,通常是浏览器,创建一个TCP套接字连接HTTP服务器的HTTP端口(默认80);
  • 3、客户端向HTTP服务器发送一个请求报文,一个请求报文由请求行、请求头部、空行和请求数据组成。
  • 4、HTTP服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据组成。
  • 5、若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求。
  • 6、客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

HTTP 协议的重要特点: 一个请求,一个响应。


在这里插入图片描述

🎄二、HTTP 方法

HTTP 方法包括:GET、POST、PUT、HEAD、DELETE、OPTIONS、TRACE、CONNECT、LINK、UNLINE等。详细使用介绍如下:

方法描述
GET请求指定资源,
POST向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)
HEAD类似于GET,只不过返回的响应中没有具体内容,用于获得报文首部
PUT传输文件,向指定资源位置上传其最新内容
DELETE请求服务器删除Request-URI所标识的资源
OPTIONS使服务器传回该资源所支持的所有HTTP请求方法。用’*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。
TRACE回显服务器收到的请求,主要用于测试或诊断
CONNECTHTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接
LINK建立和资源之间的联系
UNLINE断开连接关系

其中,最常用的两个方法是GETPOST


在这里插入图片描述

🎄三、HTTP报文(请求报文、响应报文)格式

HTTP有两类报文:请求报文和响应报文。请求报文是指从客户向服务器发送请求报文,响应报文是指从服务器到客户的应答。

✨3.1 、HTTP 的 请求报文

HTTP 的 请求报文格式如下图:包含了 3个部分:请求行、请求头部、请求数据。
注意,请求头部后必须加空行(\r\n),用来表示请求头部结束。
在这里插入图片描述

  • 请求行:请求行包含一个方法、一个请求URL和一个协议版本,它们之间以空格分隔,并以CRLF(即:\r\n)结束;
    下面是一个完整的请求行的示例:
    GET https://www.baidu.com/ HTTP/1.1
    
  • 请求头部:请求头部的整体格式是 键值对 结构,每个 键值对 占一行,键和值之间使用 冒号+空格(: ) 进行分割,每一行结尾以CRLF(即:\r\n)结束。
    下面是常见的请求头部的一部分:
    Connection: close
    Accept: application/json, text/plain, */*
    User-Agent: C++ HTTP Client
    
  • 请求数据(请求体):请求体是用于传输额外的数据。请求体的具体内容,取决于请求行中所使用的HTTP方法。注意:在请求头部之后,需要插入一个空行(CRLF),用于区分请求头部与请求体。大部分请求报文是没有请求体的。

✨3.2 、HTTP 的 响应报文

HTTP 的 响应报文格式如下图:包含了 3个部分:状态行、响应头部、响应数据。
注意,响应头部后必须加空行(\r\n),用来表示响应头部结束。
在这里插入图片描述

  • 状态行:状态行包含一个协议版本、一个状态码和一个状态文本,它们之间由空格分隔,并以CRLF(即:“\r\n”)结束。
    下面是状态行例子:
    RTSP/1.0 200 OK
    
  • 响应头部:响应头部包含与请求头部类似的信息,也都是键值对结构的信息。故这里不再赘述。
  • 响应正文(响应体):某些HTTP响应可能包含响应体,用于传输额外的数据。注意:在响应头部之后,需要插入一个空行(CRLF),用于区分响应头部与响应体

在这里插入图片描述

🎄四、常见的HTTP报文头部字段

HTTP报文头部包括 请求报文头部、响应报文头部,前面介绍了这些报文头部都是一些 键值对 结构的信息,下面介绍一些常见的头部字段:

  • Host:HOST 的值表示服务器主机的地址和端口(地址可以是域名,也可以是 IP;端口号可以省略或者手动指定)
  • Content-Length:该字段指明在RTSP协议最后一个标头之后的双 CRLF 之后的内容长度,也就是 body 的数据长度,长度单位是字节
  • Content-Type:Content-Type 表示 body 的数据格式,以下介绍三种请求中的数据格式
    • application/x-www-form-urlencoded:这是 form 表单提交的数据格式,此时 body 的格式就类似于 query string(是键值对的结构,键值对之间使用 & 分割,键与值之间使用 = 分割
    • multipart/form-data:这是 form 表单提交的数据格式(需要在 from 标签上加上 enctyped=“multipart/form-data”),通常用于 HTML 提交图片或者文件
    • application/json:此时 body 数据为 json 格式,json 格式就是源自 js 的对象的格式。用一个 { } 括住,里面有多个键值对,键值对之间使用逗号分割,键和值之间使用冒号分割
  • User-Agent: 该字段用来让网络协议的对端来识别发起请求的用户代理软件的应用类型、操作系统、软件开发商以及版本号。
  • Referer:Referer 表示这个页面是从哪个页面跳转过来的,这是一个很有用的字段
  • Accept: 用于指定客户端通知服务器自己可以接受的实体数据结构类型。例如: Accept: application/sdp,之后服务器通过Content-Type字段返回其实体数据结构类型;
  • Accept-Encoding:用于客户端通知服务器自己可以接受的数据压缩格式,例如:Accept-Encoding: gzip, compress, br,之后服务器将通过Content-Encoding字段通知客户端它的选择。
  • Accept-Language: 用于客户端通知服务器自己可以理解的语言及其接受度,例如:Accept-Language: fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5 ,之后服务器将通过Content-Language字段通知客户端它的选择
  • Authorization:客户端请求消息头含有服务器用于验证用户代理身份的凭证
  • Bandwidth: 用于描述客户端可用的带宽值。例如: Bandwidth: 4000
  • Blocksize:此字段由客户端发送到媒体服务器,要求服务器提供特定的媒体包大小,服务器可以自由使用小于请求的块大小。 此数据包大小不包括 IP、UDP 或 RTP 等低层标头
  • CSeq: 指定了RTSP请求响应的序列号,每个RTSP请求都必须包含一个唯一的CSeq值,以便服务器能够正确地识别和处理请求。这个序列号随着请求消息递增。服务器响应必须有CSeq值,指明响应哪个请求。
  • Cache-Control:通过指定指令来实现缓存机制。缓存指令是单向的,这意味着在请求中设置的指令,不一定被包含在响应中
  • Connection:该字段决定当前的事务完成后,是否会关闭网络连接。如果该值是“keep-alive”,网络连接就是持久的,不会关闭,使得对同一个服务器的请求可以继续在该连接上完成。如果是Connection: close,则表示这个请求结束后就会关闭网络连接。
  • Date:提供服务器生成响应的日期和时间,有助于客户端判断响应的新鲜度或进行时间同步。Date字段的格式符合RFC 1123,比如:Sat, 06 Apr 2024 11:15:00 GMT。
  • Expires:指明过期的时间
  • Rang: 用于指定一个时间范围,可以使用SMPTE、NTP或clock时间单元。
  • Session: Session头字段标识了一个RTSP会话。Session ID 是由服务器在SETUP的回应中选择的,客户端一当得到Session ID后,在以后的对Session 的操作请求消息中都要包含Session ID.例如:Session: 4581E0AE;timeout=65
  • Transport: Transport头字段包含客户端可以接受的传输选项列表,包括传输协议,地址端口,TTL等。服务器端也通过这个头字段返回实际选择的具体选项。如: Transport: RTP/AVP/TCPunicast;destination=192.168.31.222;source=192.168.31.222;interleaved=0-1

在这里插入图片描述

🎄五、HTTP 状态码

✨5.1、状态码格式

1xx:指示信息–表示请求已接收,继续处理
2xx:成功–表示请求已被成功接收、理解、接受
3xx:重定向–要完成请求必须进行更进一步的操作
4xx:客户端错误–请求有语法错误或请求无法实现
5xx:服务器端错误–服务器未能实现合法的请求

✨5.2、常见状态码

200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码需和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

✨5.3、响应状态码有5类

100~199 表示成功接收请求。要求客户端继续提交下一次请求才能完成整个处理过程。
200~299:表示成功接睡请求并完成整个处理过程。常用是200。
300~399:为完成请求,客户需要进一步细化请求,例如,请求的资源已移动一个新地址,常用302 307 304。
400~499:客户端的请求错误,通常拽请的资源不在服务器上,常用是404 ,403指是浏览器没有权限去访问页面。
500~599:服务器端出现错误,常用是500。


在这里插入图片描述

🎄六、总结

本文注意介绍HTTP协议,介绍了HTTP常用的方法、HTTP协议的报文格式、常见的报文头部字段、常见的状态码。

在这里插入图片描述
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁

参考:
https://blog.csdn.net/weixin_46913514/article/details/116480652
https://blog.csdn.net/weixin_51367845/article/details/123313047

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

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

相关文章

怎样在 PostgreSQL 中优化对大表的分区裁剪和索引选择?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会!📚领书:PostgreSQL 入门到精通.pdf 文章目录 怎样在 PostgreSQL 中优化对大表的分区裁剪和索引选择一、分区裁剪:精准切割,提…

JVM监控及诊断工具-命令行篇--jinfo命令介绍

JVM监控及诊断工具-命令行篇02-jinfo:实时查看和修改JVM配置参数 一 基本情况二 基本语法2.1查看jinfo -sysprops PIDjinfo -flags PIDjinfo -flag 具体参数 PID 2.2修改 三 拓展java -XX:PrintFlagsInitialjava -XX:PrintFlagsFinaljava -XX:PrintCommandLineFlags…

使用第三方工具连接Redis

Tiny RDM 官网地址:https://redis.tinycraft.cc/zh/ Tiny RDM | Redis桌面管理客户端 (tinycraft.cc) 点击下一步,安装完成 添加redis 后面三个都无需改动 哨兵模式和集群模式如有哨兵或集群节点都需勾选 测试连接 确认后双击187.137进入ui界面

npm安装依赖包报错,npm ERR! code ENOTFOUND

一、报错现象: npm WARN registry Unexpected warning for https://registry.npmjs.org/: Miscellaneous Warning ETIMEDOUT: request to https://registry.npmjs.org/vue failed, reason: connect ETIMEDOUT 104.16.23.35:443 npm WARN registry Using stale data…

ClickHouse 入门(二)【基础SQL操作】

1、ClickHouse 1.1、SQL 操作 这里只介绍一些和我们之前 MySQL 不同的语法; 1.1.1、Update 和 Delete ClickHouse 提供了 Delete 和 Update 的能力,这类操作被称为 Mutation 查询(可变查询),它可以看 做 Alter 的一…

设计分享—国外网站设计赏析

今天还是给大家分享一些国外的网站设计案例~ 蓝蓝设计是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的大数据可视化界面设计、B端界面设计、桌面端界面设计、APP界面设计、图标定制、用户体验设计、交互设计、UI咨询、高端网站设计、平…

安装caffe-CPU版本并进行训练

目录 前言 0、安装Ubuntu 18.04 版本 输入ls没有反应 ubuntu换源 换源出现的问题 1、安装caffe出现E:Unable to locate package caffe-cpu问题 2、把 code 文件夹下载到 ubuntu 3、在本地使用caffe-CPU,并部署数据标注工具 ATool 问题1 问题2 问题3 命令行…

AI智能名片S2B2C商城小程序在社群去中心化管理中的应用与价值深度探索

摘要:随着互联网技术的飞速发展,社群经济作为一种新兴的商业模式,正逐渐成为企业与用户之间建立深度连接、促进商业增长的重要途径。本文深入探讨了AI智能名片S2B2C商城小程序在社群去中心化管理中的应用,通过详细分析社群去中心化…

最新开源的解析效果非常好的PDF解析工具MinerU (pdf2md pdf2json)

毫不夸张的说 PDF解析工具MinerU是照进RAG黑暗中的一道光——这是我对它的评价。我测过太多了文档解析工具! 最近在做文档解析的工作。看了很多的开源的文档解析的工具,版面分析的工具,其中包括paddelpaddel这样30kstar的明星工具。但是效果都…

STM32全栈嵌入式人脸识别考勤系统:融合OpenCV、Qt和SQLite的解决方案

1. 项目概述 本项目旨在设计并实现一个基于STM32的全栈人脸识别考勤系统。该系统结合了嵌入式开发、计算机视觉和数据库技术,实现了自动人脸检测、识别和考勤记录功能。 主要特点: 使用STM32F4系列微控制器作为主控制器采用OpenCV进行人脸检测和识别Qt开发跨平台…

将达梦数据库的JDBC驱动包 DmJdbcDriver18.jar 安装到本地 Maven 仓库

项目打包报错:Failure to find com.dameng:DmJdbcDriver18:jar:8.1.3.12 in http://maven.aliyun.com/nexus/content/groups/public 解决方式如下: 从 https://eco.dameng.com/download/ 中下载 达梦JDBC 驱动包,如下 JDK 1.8 对应的 JDBC…

GPT LangChain experimental agent - allow dangerous code

题意:GPT LangChain 实验性代理 - 允许危险代码 问题背景: Im creating a chatbot in VS Code where it will receive csv file through a prompt on Streamlit interface. However from the moment that file is loaded, it is showing a message with…

大语言模型在病理AI领域中的应用2|文献速递·24-07-18

小罗碎碎念 本期文献主题:大语言模型在病理AI领域中的应用 本期推文是大模型4病理AI系列的第2期,每一篇文献都使用了ChatGpt,应用场景如下: 直接用ChatGpt生成回答比较多种主流大模型在指定任务中的性能表现比较大模型与专用模型…

【Linux】Linux环境设置环境变量操作步骤

Linux环境设置环境变量操作步骤 在一些开发过程中本地调试经常需要依赖环境变量的参数,但是怎么设置对小白来说有点困难,今天就介绍下具体的操作步骤,跟着实战去学习,更好的检验自己的技术水平,做技术还是那句话&…

【python】OpenCV—Scanner

文章目录 1、需求描述2、代码实现3、涉及到的库函数cv2.arcLengthcv2.approxPolyDPskimage.filters.threshold_localimutils.grab_contours 4、完整代码5、参考 1、需求描述 输入图片 扫描得到如下的结果 用OpenCV构建文档扫描仪只需三个简单步骤: 1.边缘检测 2.使用图像中…

HarmonyOS NEXT零基础入门到实战-第一部分

构建节页面思路: 1、排版 (分析布局) 2、内容(基础组件) 3、美化(属性方法) 设计资源-svg图标 界面中展示图标 ->可以使用svg图标(任意放大缩小不失真,可以改颜色) 使用方式&a…

Floyd 算法 求最短路

推荐阅读:最短路 - OI Wiki 练习题目:力扣 - 1334 简介: 初始化:我们先把题目给的,两点直接相连的边的加入初始存在连接中。更新:然后每次只加入一个点对已有合法连接进行“拓展”更多的连接。结果&#…

【python】OpenCV—Coordinates Sorted Clockwise

文章目录 1、需求介绍2、算法实现3、完整代码 1、需求介绍 调用 opencv 库,绘制轮廓的矩形边框,坐标顺序为右下→左下→左上→右上,我们实现一下转化为熟悉的 左上→右上→右下→左下 形式 按照这样的顺序组织边界框坐标是执行透视转换或匹…

数学基础【俗说矩阵】:矩阵相乘

矩阵乘法 矩阵乘法推导过程 一、两个线性方程复合代入 二、X1和X2合并同类项 三、复合后方程组结果 四、线性方程组矩阵表示 五、线性方程组矩阵映射表示 复合映射表示 六、矩阵乘法导出 矩阵乘法法则 1、规则一推导过程 左取行,右取列,对应相乘后…

第122天:内网安全-域信息收集应用网络凭据CS 插件AdfindBloodHound

目录 前置知识 背景和思路 判断是否在域内 案例一:架构信息类收集-网络&用户&域控等 案例二:自动化工具探针-插件&Adfind&BloodHound Adfind(域信息收集工具) ​BloodHound(自动化域渗透工具) 前置知识 本…