😁博客主页😁:🚀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 | 回显服务器收到的请求,主要用于测试或诊断 |
CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接 |
LINK | 建立和资源之间的联系 |
UNLINE | 断开连接关系 |
其中,最常用的两个方法是GET
、POST
。
🎄三、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