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

news2024/11/14 15:43:30

😁博客主页😁:🚀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.coloradmin.cn/o/1934713.html

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

相关文章

农业旅游与乡村旅游:融合绿色田野与诗意远方的经济新篇章

在这个快节奏的时代,人们对于回归自然、体验淳朴生活的渴望日益增强。农业旅游与乡村旅游,作为新兴的旅游形态,正逐步成为连接城市与乡村的桥梁,不仅为都市人提供了一片心灵的栖息地,也为农村地区带来了前所未有的发展…

pycharm如何debug for循环里面的错误值

一般debug时,在for循环里面的话,需要自己一步一步点。如果循环几百次那种就比较麻烦。此时可以采用try except的方式来解决 例子如下 #ptyhon debug for循环的代码 num[1,2,3,s,4] ans0 for i in num:try:ansiexcept:print(错误) print(ans) 结果如下&a…

m个人拉m盏灯后求灯的状态问题

之前看过一道题:有m盏灯,编号分别为1,2,3,...,m,每拉一次灯的开关,灯的亮灭状态就发生一次变化。这m盏灯初始状态都是亮着的,有m个人去拉灯,第1个人把所有的灯…

【Qt】之【Bug】error:C1083 无法打开包括文件

背景 a.cpp引用b.h正常,但是a.h引用b.h就报 “无法打开包括文件”的错误 分析 查看“编译输出”,显示不是a.h引起的错误,而是C插件, 查看后发现,C插件引用了a所在插件pro,但是没有引用a依赖的b所在的插件…

AI 模型本地推理 - YYPOLOE - Python - Windows - GPU - 吸烟检测(目标检测)- 有配套资源直接上手实现

Python 运行 - GPU 推理 - windows 环境准备python 代码 环境准备 FastDeploy预编译库下载 conda config --add channels conda-forge && conda install cudatoolkit11.2 cudnn8.2 pip install fastdeploy_gpu_python-0.0.0-cp38-cp38-win_amd64.whlpython 代码 impo…

[Doris]阿里云搭建Doris,测试环境1FE 1BE

首先:阿里云的国内服务器千万不要用容器搭建,或者自己Dockfile构建镜像。两种方式都不得行,压根拉不到github的镜像,开了镜像加速器也拉不到,不要折腾了,极其愚蠢。 背景:现在测试环境&#xff…

排序算法(4)之快速排序(2)

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 排序算法(4)之快速排序(2) 收录于专栏【数据结构初阶】 本专栏旨在分享学习数据结构学习的一点学习笔记,欢迎大家在评论区交流讨论💌 目…

Pytorch学习笔记day3——用神经网络学习一组函数

好的,我们开始吧。首先第一个问题,神经网络的本质是什么?是古典主义的人类的神经元吗?绝对不是,他只是一个优化函数 y f θ ( x ) y f_{\theta}(x) yfθ​(x) 这和小学学到的线性函数拟合并无本质区别。只是其中参数…

使用IDEA编写lua脚本并运行

下载lua https://github.com/rjpcomputing/luaforwindows/releases 是否创建桌面快捷方式:我们的目标是使用IDEA编写lua脚本,所以不需要勾选。后面需要的话,可以到安装目录下手动创建快捷方式 环境变量自动配置 安装后会自动配置好环境变量…

Net8 Spire最新版去水印,去页数限制,转word/pptx/ofd等

新建控制台程序,添加Spire.pdf,最新版本为2024年7月17日 try {Spire.Pdf.PdfDocument pdf new Spire.Pdf.PdfDocument();pdf.LoadFromFile("test.pdf");pdf.SaveToFile("newpdf.pdf");pdf.SaveToFile("newppx.pptx", Spi…

20分钟迁移完阿里云ECS跨区域迁移,用老操作系统作为新服务操作系统

由于特殊原因或者数据备份需要迁移ecs服务器 跨区域复制 镜像复制 由于特殊原因或者数据备份需要迁移ecs服务器 1.老服务快照 选择ecs实例,点开实例 进入云盘 https://ecs.console.aliyun.com/disk 在云盘上点击建立快照 https://oss.console.aliyun.com/bu…

PyTorch 深度学习实践-循环神经网络基础篇

视频指路 参考博客笔记 参考笔记二 文章目录 上课笔记基于RNNCell实现总代码 基于RNN实现总代码 含嵌入层的RNN网络嵌入层的作用含嵌入层的RNN网络架构总代码 其他RNN扩展基本注意力机制自注意力机制(Self-Attention)自注意力计算多头注意力机制&#xf…

纯前端小游戏,4096小游戏,有音效,Html5,可学习使用

// 游戏开始运行create: function(){this.fieldArray [];this.fieldGroup this.add.group();this.score 0;//4096 增加得分this.bestScore localStorage.getItem(gameOptions.localStorageName) null ? 0 : localStorage.getItem(gameOptions.localStorageName);for(var …

vscode通过ssh链接远程服务器上的docker

目录 1 编译docker image1.1 编译镜像1.2 启动镜像 2 在docker container中启动ssh服务2.1 确认是否安装ssh server2.2 修改配置文件2.3 启动ssh服务 3 生成ssh key4 添加ssh公钥到docker container中5 vscode安装插件Remote - SSH6 在vscode中配置 1 编译docker image 一般来…

uni-app开发日志:unicloud使用时遇到的问题解决汇总(不断补充)

插件安装后提示与原数据库表冲突(2024.7.18) 安装uni-admin后再安装uni-cms,在uni-admin中添加好菜单,结果提示该错误 回到hbuilder中uniCloud/database中找到冲突的部分 比较一下,选中老的删除 opendb-news-articl…

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

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

【Git标签管理】理解标签 | 创建标签 | 查看标签 | 删除标签 | 推送标签

目录 1.理解标签 2.创建标签 3.查看标签 4.删除本地仓库的标签 5.推送标签 6.删除远程仓库的标签 1.理解标签 Git提供一个打标签的功能tag,对某一次事务/提交的表示(作用/意义)。标签 tag ,可以简单的理解为是对某次 comm…

【Git】(基础篇四)—— GitHub使用

GitHub使用 经过上一篇的文章,相信大家已经对git的基本操作熟悉了,但哪些使用git的方法只是在本地仓库进行,本文介绍如何使用git和远程仓库进行连接使用。 Github和Gitee 主要用到的两个远程仓库在线平台是github和gitee GitHub GitHub …

Postman导出excel文件

0 写在前面 在我们后端写接口的时候,前端页面还没有出来,我们就得先接口测试,在此记录下如何使用postman测试导出excel接口。 如果不会使用接口传参可以看我这篇博客如何使用Postman 1 方法一 2 方法二 3 写在末尾 虽然在代码中写入文件名…

node解析Excel中的考试题并实现在线做题功能

1、背景 最近公司安排业务技能考试,下发excel文件的题库,在excel里查看并不是很方便,就想着像学习驾考题目一样,一边看一边做,做完之后可以查看正确答案。 2、开始分析需求 题目格式如下图 需求比较简单,…