HTTP协议格式

目录

正文:

1.概述

2.主要特点

3.请求协议格式

4.响应协议格式

5.响应状态码

总结:


正文:

1.概述

HTTP 协议是用于传输超文本数据(如 HTML)的应用层协议,它建立在传输层协议 TCP/IP 之上。当我们在浏览器中输入一个 "网址" (URL) 时,浏览器就会给相应的服务器发送一个 HTTP请求,该服务器也返回一个 HTTP 响应。这个响应结果被浏览器解析之后,就展示成我们看到的页面内容. (这个过程中浏览器可能会给服务器发送多个 HTTP 请求,服务器会对应返回多个响应,这些响应里就包含了页面 HTML,CSS,JavaScript,图片,字体等信息)。

2.主要特点

  1. 无连接性:HTTP 是一种无连接的协议,即每个请求-响应对之间是相互独立的,服务器不会保留任何关于前一次请求的信息。这意味着每个请求都需要建立一个新的连接,处理完毕后就会关闭连接,这样有助于节省服务器资源。

  2. 无状态性:HTTP 是一种无状态的协议,服务器不会维护客户端的状态信息。即使多次请求来自同一个客户端,服务器也视为多个独立的请求。为了实现状态保持,通常使用 Cookie ,Session或者jwt令牌 技术来维护客户端的状态信息。

  3. 支持多种请求方法:HTTP 协议定义了多种请求方法,如 GET、POST、PUT、DELETE 等,每种请求方法有不同的语义和用途。GET 用于从服务器获取资源,POST 用于向服务器提交数据,PUT 用于更新资源等。

  4. 基于文本:HTTP 协议的请求和响应报文是基于文本的,使用可读性强的ASCII字符编码。这种简单的文本格式使得开发人员和系统能够轻松理解和调试,同时也降低了实现成本。

3.请求协议格式

HTTP请求协议格式是客户端向服务器发送请求时遵循的规则。一个标准的HTTP请求由以下几个部分组成:

  1. 请求行(Request Line):

    • 方法:指定要执行的操作,如GET、POST、PUT、DELETE等。
    • 资源路径:请求的资源的URI(统一资源标识符),通常是URL。
    • HTTP版本:使用的HTTP协议版本,如HTTP/1.1或HTTP/2。

    格式示例:GET /index.html HTTP/1.1

  2. 请求头(Request Headers):

    • 包含一系列键值对,提供关于请求的附加信息,如:
      • Host:请求的服务器的域名。
      • User-Agent:发起请求的客户端软件信息。
      • Accept:客户端能够处理的媒体类型。
      • Content-Type:请求体的媒体类型。
      • Content-Length:请求体的长度。
      • 其他自定义头或特定用途的头。
  3. 空行(Empty Line):

    请求头部结束后,需要一个空行来分隔头部信息和消息主体(如果有)。
  4. 请求体(Request Body,可选):

    消息主体包含客户端向服务器发送的数据内容,例如 POST 请求中包含的表单数据或请求体内容。对于 GET 请求通常为空。

我们可以打开网页的开发者工具或者使用抓包工具看到一个http完整的请求:

下面是一个https的但是基本和http差不多:

 需要注意的是,HTTP 请求协议格式中的请求行和请求头部是必须的,而消息主体在某些情况下是可选的。请求头的顺序并不影响其含义,但是出于可读性,它们通常会按照一定的逻辑顺序排列。请求体的大小必须在请求头中通过Content-Length头指定,除非使用分块传输编码(chunked transfer encoding)。 请求体的内容类型应该通过Content-Type头指定,以便服务器知道如何处理接收到的数据。

4.响应协议格式

HTTP响应协议格式是服务器在接收到客户端的请求后,向客户端发送的响应。一个标准的HTTP响应同样由几个关键部分组成:

  1. 状态行(Status Line):

    • HTTP版本:响应使用的HTTP协议版本,如HTTP/1.1或HTTP/2。
    • 状态码:一个三位数字,表示请求的结果,如200表示成功,404表示未找到等。
    • 状态信息:状态码的简短描述。

    格式示例:HTTP/1.1 200 OK

  2. 响应头(Response Headers):

    • 包含一系列键值对,提供关于响应的附加信息,如:
      • Content-Type:响应体的媒体类型。
      • Content-Length:响应体的长度。
      • Server:服务器软件的名称和版本。
      • Set-Cookie:用于设置客户端的cookie。
      • Cache-Control:控制响应的缓存行为。
      • Connection:管理连接的选项,如是否关闭连接。
  3. 空行(Empty Line):

    响应头和响应体之间的分隔符,通常是一个空行,即连续的两个换行符(CRLF)。
  4. 响应体(Response Body,可选):

    服务器返回的数据,可能是HTML文档、图片、视频、JSON数据等,取决于请求的资源类型和Content-Type头的指定。

一个完整的HTTP响应示例:

同样抓的包是https的但差别不大:

如果服务器返回了一个html页面, 那么html页面内容就是在body中。 

5.响应状态码

在响应信息中的状态码有很多:

1.1xx:信息响应:

这类状态码表示请求已经被服务器接收,但还需要进一步处理。通常,这类响应是临时性的,用于与客户端进行双向通信。常见的状态码包括:

  • 100 Continue:服务器要求客户端继续发送请求,或忽略这个响应继续完成请求。
  • 101 Switching Protocols:服务器将遵照请求切换到另外一种协议。
  • 103 Early Hints:(HTML5新增)服务器推送资源的早期提示,用于预加载资源。

2.2xx:成功响应:

这类状态码表示请求已经被成功处理。最常见的状态码是:

  • 200 OK:请求成功,响应中包含了所请求的信息。
  • 201 Created:请求成功并且一个新的资源被创建,如POST请求。
  • 202 Accepted:请求已经被接受,但尚未被处理。
  • 204 No Content:服务器已经成功处理了请求,但没有返回任何内容。

3.3xx:重定向响应

这类状态码表示请求的资源已经被永久或暂时地移至别处。常见的状态码有:

  • 300 Multiple Choices:请求的资源有多个位置,服务器无法确定哪一个是最合适的,一般情况下很少使用。
  • 301 Moved Permanently:请求的资源已经被永久移动到新的URI,浏览器会自动跳转到新的URL。
  • 302 Found:(早期版本为“Moved Temporarily”,现在通常表示“Found”)请求的资源被临时移动到新的URI,浏览器会自动跳转到新的URL。
  • 304 Not Modified:如果使用缓存,则表示请求的资源自从缓存以来没有被修改过,因此可以继续使用缓存的版本。

4.4xx:客户端错误响应

这类状态码表示客户端的请求包含错误,或者请求无法被服务器理解。常见的状态码包括:

  • 400 Bad Request:服务器无法理解请求的格式。
  • 401 Unauthorized:请求要求用户的身份认证。
  • 403 Forbidden:服务器理解请求客户端的请求,但是拒绝执行此请求。
  • 404 Not Found:请求的资源在服务器上没有找到。
  • 405 Method Not Allowed:请求的方法不被允许。

5.5xx:服务器错误响应

这类状态码表示服务器在处理请求的过程中遇到了错误。常见的状态码有:

  • 500 Internal Server Error:服务器遇到未知错误。
  • 501 Not Implemented:服务器不支持请求的功能。
  • 502 Bad Gateway:服务器作为网关或代理,从上游服务器收到了一个无效的响应。
  • 503 Service Unavailable:服务器目前无法使用(可能是服务器过载或进行维护)。
  • 504 Gateway Timeout:作为代理或网关的服务器没有及时从上游服务器收到请求。

这些状态码帮助客户端和开发者理解请求的结果,对于调试和维护Web应用非常重要。在开发Web应用时,正确处理和返回恰当的状态码是确保应用程序正常运行的关键。

总结:

请求格式:

响应格式:

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

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

相关文章

stm32定时器与pwm波

文章目录 4 TIM4.1 SysTick系统定时器4.2 TIM定时器中断与微秒级延时4.3 TIM使用PWM波4.3.1 PWM介绍4.3.2 无源蜂鸣器实现 4.4 TIM ,PWM常用函数 4 TIM 4.1 SysTick系统定时器 ​ Systick系统滴答,(同时他有属于自己的中断,可以利用它来做看…

Unity 使用AVProMovieCapture实现Game视图屏幕录制

内容将会持续更新,有错误的地方欢迎指正,谢谢! Unity 使用AVProMovieCapture实现Game视图屏幕录制 TechX 坚持将创新的科技带给世界! 拥有更好的学习体验 —— 不断努力,不断进步,不断探索 TechX —— 心探索、心…

【二】Ubuntu24虚拟机在Mac OS的VMware Fusion下无法联网问题

文章目录 1.环境背景2. 需求背景3. 解决方法3.1 在mac的终端查看虚拟机NAT网络3.2 查看unbuntu节点2的网络配置3.3 问题定位与解决3.3.1 检查是否有冲突3.3.2 冲突解决方法 4. 总结4.1 NAT 网关的原理4.2 VMware Fusion 的 NAT 模式4.3 为什么网关冲突会引起问题4.4 理解配置冲…

Linux 程序卡死的特殊处理

一、前言 Linux环境。 我们在日常编写的程序中,可能会出现一些细节问题,导致程序卡死,即程序没法正常运行,界面卡住,也不会闪退... 当这种问题出现在客户现场,那就是大问题了。。。 当我们暂时还无法排…

利用 STM32 实现多协议物联网网关:Modbus/Zigbee 到以太网/Wi-Fi 的数据桥接

摘要: 随着物联网技术的飞速发展,不同通信协议之间的互联互通成为了构建智能化系统的一大挑战。本文将以实战项目为例,详细介绍如何利用 STM32 微控制器实现 Modbus/Zigbee 与以太网/Wi-Fi 之间的协议转换,从而打通传感器数据上传至服务器的“…

代码随想录Day69(图论Part05)

并查集 // 1.初始化 int fa[MAXN]; void init(int n) {for (int i1;i<n;i)fa[i]i; }// 2.查询 找到的祖先直接返回&#xff0c;未进行路径压缩 int.find(int i){if(fa[i] i)return i;// 递归出口&#xff0c;当到达了祖先位置&#xff0c;就返回祖先elsereturn find(fa[i])…

实现沉浸式体验的秘诀:深入了解折幕投影技术!

在当今多媒体技术的浪潮中&#xff0c;投影技术已蜕变成为超越传统内容展示范畴的非凡工具&#xff0c;它深度融合了互动性与沉浸感&#xff0c;成为连接观众与虚拟世界的桥梁。折幕投影技术&#xff0c;作为这一领域的璀璨明珠&#xff0c;更是以其独特而神奇的手法&#xff0…

如何从相机的存储卡中恢复原始照片

“不好了。” 当您意识到自己不小心从存储卡中删除了照片&#xff0c;或者错误地格式化了相机的记忆棒时&#xff0c;您首先会喊出这两个词。这是一种常见的情况&#xff0c;每个人一生中都会遇到这种情况。幸运的是&#xff0c;有办法从相机的 RAW 记忆棒中恢复已删除的照片。…

笛卡尔集的情况 rows 1

running ~ 1 hour and TEMP Space using > 450 GB 1000*4.9k4.9M 1*4.9K4.9K

【LabVIEW学习篇 - 3】:程序结构——顺序结构、for循环、while循环

文章目录 顺序结构案例一案例二 for循环while循环 顺序结构 LabVIEW中的顺序结构是一种常用的控制结构&#xff0c;用于按顺序执行程序的不同部分。顺序结构在程序中按照从左到右的顺序依次执行各个子结构&#xff0c;类似于传统的文本编程语言中的顺序执行。 案例一 案例一…

查询数据库下所有表的数据量

个人思路: 首先把库里Schema下表名拿出来放记事本(EmEditor)里, 用一下正则匹配替换 (\w) → select \1 tableName,count(1) from \1 union all 然后把最后的union all删除掉,替换为order by tableName

C++部分复习笔记上

C语法复习 1. C入门基础 缺省参数 半缺省参数必须从右往左依次来给出&#xff0c;不能间隔着给缺省参数不能在函数声明和定义中同时出现缺省值必须是常量或者全局变量C语言不支持&#xff08;编译器不支持&#xff09; 函数重载 函数重载是函数的一种特殊情况&#xff0c;…

红薯小眼睛接口分析与Python脚本实现

文章目录 1. 写在前面2. 接口分析3. 算法脚本实现 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Py…

数据库系统原理练习 | 作业2-第2章关系数据库(附答案)

整理自博主本科《数据库系统原理》专业课完成的课后作业&#xff0c;以便各位学习数据库系统概论的小伙伴们参考、学习。 *文中若存在书写不合理的地方&#xff0c;欢迎各位斧正。 专业课本&#xff1a; 目录 一、选择题 二、填空题 三、简答题 四、关系代数 1.课本p70页&…

Vatee万腾平台:引领智能互联新时代

在科技浪潮的推动下&#xff0c;我们正步入一个前所未有的智能互联新时代。在这个时代里&#xff0c;万物皆可互联&#xff0c;数据成为新的生产要素&#xff0c;智能技术深刻改变着人类社会的每一个角落。而Vatee万腾平台&#xff0c;正是这一新时代的引领者&#xff0c;以其卓…

盘点各个国家的国宝

中国&#xff1a;熊猫 熊猫已有800万年的历史&#xff0c;和它们同时代的动物都已灭绝&#xff0c;大熊猫生存至今成为“活化石”。 俄罗斯&#xff1a;北极熊 北极熊是世界上最大的陆地食肉动物&#xff0c;体型巨大&#xff0c;性格凶猛。 美国&#xff1a;白头海雕 白头海雕…

事件分发机制:demo复现自定义ViewGroup点击事件不起作用

几年前遇到的一个bug&#xff0c;不弄清楚心里就是不舒服&#xff01; 平时应用开发中&#xff0c;经常遇到的UI需求&#xff0c;例如抖音的设置界面&#xff0c;如下图所示&#xff1a; 很容易想到&#xff0c;自定义一个Layout&#xff0c;左边一个图标&#xff0c;中间文…

二维树状数组区域查询

落谷4514 过关代码如下 #define _CRT_SECURE_NO_WARNINGS #include<bits/stdc.h> using namespace std; //#define int long longconst int N 2050; int t1[N][N], t2[N][N], t3[N][N], t4[N][N]; int lowbit(int x) { return x & (-x); } int n, m; void update(…

@Slf4j idea标红Cannot resolve symbol ‘log‘

一、背景 时间久了没有应用idea,打开工程后项目 log 提示报红&#xff0c;未能解析&#xff0c;Cannot resolve symbol log &#xff0c;Slf4j 注解正常&#xff0c;应用的lombok插件。 检查lombok插件安装情况&#xff0c;发现未安装&#xff0c;重新安装重启idea后正常。 二…

zxing-cpp+OpenCV根据字符串生成条形码

编译构建 需要使用到 CMake、Git、GCC 或 MSVC。 github 链接&#xff1a;https://github.com/zxing-cpp/zxing-cpp 编译之前请确保&#xff1a; 确保安装了 CMake 版本 3.15 或更高版本。 确保安装了与 C17 兼容的编译器(最低VS 2019 16.8 / gcc 7 / clang 5)。 编译构建…