【网络安全 | 网络协议】一文讲清HTTP协议

HTTP概念简述

HTTP(Hypertext Transfer Protocol)协议,又称超文本传输协议,用于传输文本、图像、音频、视频以及其他多媒体文件。它是Web应用程序通信的基础,通过HTTP协议,Web浏览器可以向Web服务器发起请求,并接收来自Web服务器的响应,从而实现Web页面的访问和数据传输。

HTTP协议的结构

HTTP协议包含了HTTP请求和HTTP响应两个部分,其中HTTP请求由请求行、请求头和请求体组成;HTTP响应由状态行、响应头和响应体组成。HTTP协议还定义了一些请求方法,不同的请求方法对应不同的操作。

在这里插入图片描述

请求结构

如图为HTTP请求的完整结构(以GET请求为例):

在这里插入图片描述

请求行

HTTP请求中的首行称为请求行,其包括三个部分:请求方法、请求的资源路径和使用的协议版本。

GET /2301_77485708/article/details/136169661?spm=1001.2014.3001.5501 HTTP/1.1

在本例中请求方法为GET,请求路径URI为/2301_77485708/article/details/136169661?spm=1001.2014.3001.5501,协议Protocol为HTTP/1.1。

请求方法是在进行网络通信时,客户端向服务器发送请求的方式。

常见的请求方法有以下几种:

  1. GET:用于请求获取服务器上的资源,可以在请求中附加参数。一般用于获取数据。
  2. POST:用于向服务器提交数据,比如表单数据、上传文件等。
  3. PUT:用于向服务器上传或更新资源,通常需要提供完整的资源信息。
  4. DELETE:用于删除服务器上的资源。
  5. PATCH:用于对服务器上的资源进行部分更新。
  6. HEAD:类似于GET请求,但只返回响应头部信息,不返回实际内容。
  7. OPTIONS:用于获取目标资源支持的请求方法列表。

在提交如"ice"、"Sec"等不可识别的方法时,部分服务器支持以GET方法返回,即默认GET。

请求资源路径是指客户端在向服务器发起HTTP请求时,指定所要访问的资源在服务器上的路径信息。请求方法与URI之间通常以一个空格分隔。

为了在同一个服务器上的不同资源之间相互引用时简化URL的书写,并且避免需要在每个资源链接中都包含完整的URL,请求行中的资源路径为相对路径。

在本例中,请求的资源路径为:

/2301_77485708/article/details/136169661?spm=1001.2014.3001.5501

浏览器会将HOST与该路径自动填充,从而构建完整的URL进行请求。

出于跨平台兼容性等方面的考虑,换行符"\r\n"(回车符+换行符)被用作报文头部和报文主体之间以及各个字段之间的分隔符。

请求头

请求头(Headers)用于携带关于请求或响应的元数据信息。

  1. Accept:指定客户端能够处理的媒体类型,用于请求中。

  2. Content-Type:指定请求或响应中的实体的媒体类型。

  3. User-Agent:标识客户端的应用程序、操作系统和版本信息。

  4. Host:指定服务器的主机名和端口号。

  5. Cookie:包含在请求中发送的Cookie信息。

  6. Referer:指示请求来源页面的URL。

  7. Location:指定重定向的目标URL。

  8. Content-Length:指定请求或响应正文的长度(以字节为单位)。

  9. Content-Encoding:指定响应正文的编码方式,如gzip或deflate。

在本例中:

  1. Host: blog.csdn.net
    • 指定请求的目标主机,即要访问的服务器地址为blog.csdn.net。
  2. Cookie: ICE
    • 包含用户身份验证或其他相关信息。
  3. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/118.0
    • User-Agent字段包含了发送请求的客户端应用程序和操作系统的详细信息
  4. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,/;q=0.8
    • 表示客户端能够接受的媒体类型,优先顺序为text/html、application/xhtml+xml等。
  5. Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
    • 指定客户端接受的自然语言及其优先级,表示首选中文(中国)、次选中文(通用)等。
  6. Accept-Encoding: gzip, deflate, br
    • 表示客户端支持的内容编码方式,包括gzip、deflate和br(Brotli)。
  7. Referer: https://blog.csdn.net/2301_77485708/
    • 指示该请求来源页面的URL,即当前请求是从https://blog.csdn.net/2301_77485708/页面发起的。

请求体

请求体(Request Body)是客户端发起POST、PUT等请求时发送给服务器的数据部分。

请求体中包含客户端想要提交给服务器的数据,以表单、JSON、XML、二进制数据等格式存在。在POST请求中,请求体通常包含了表单数据或上传的文件;在PUT请求中,请求体通常包含了要更新的资源信息;在DELETE、GET请求中,请求体通常为空。

在下图的POST请求包中,存在请求体:

在这里插入图片描述

表示提交的ice.txt文件的内容为ice。

同时由上图可以看到,该POST上传格式为multipart/form-data,其有利于传输多个字段的数据。

Content-Type: multipart/form-data; boundary=---------------------------31280281959535052723427005512-----------------------------31280281959535052723427005512
Content-Disposition: form-data; name="MAX_FILE_SIZE"100000
-----------------------------31280281959535052723427005512
Content-Disposition: form-data; name="uploaded"; filename="ice.txt"
Content-Type: text/plainice
-----------------------------31280281959535052723427005512
Content-Disposition: form-data; name="Upload"Upload
-----------------------------31280281959535052723427005512--

特殊的是,Content-Type中存在boundary,其定义了请求体中的分界线,使各部分数据相互独立互不干扰。若数据块中存在**filename=**字段,则表示上传文件,否则为POST参数。

请求差异及参数说明

POST请求头比GET请求头多引入了两个字段:Content-Length、Content-Type,分别指定请求体的长度及请求体内容类型。

在参数上,需要谨记的是:GET、POST参数的定义取决于参数所处位置。POST请求中,GET参数仍然存在于请求行中。

简单例题参考:https://blog.csdn.net/2301_77485708/article/details/130786891

在这里插入图片描述

响应结构

如图为HTTP响应的完整结构(以POST请求为例)

HTTP/1.1 200 OK
Server: nginx/1.15.11
Date: Mon, 19 Feb 2024 13:37:27 GMT
Content-Type: text/html;charset=utf-8
Connection: close
X-Powered-By: PHP/7.3.4
Pragma: no-cache
Cache-Control: no-cache, must-revalidate
Expires: Tue, 23 Jun 2009 12:00:00 GMT
Content-Length: 4134<!DOCTYPE html><html lang="en-GB"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Vulnerability: File Upload :: Damn Vulnerable Web Application (DVWA)</title><link rel="stylesheet" type="text/css" href="../../dvwa/css/main.css" /></head></html>

在这里插入图片描述

状态行

HTTP/1.1 200 OK

响应结构中首行称为状态行,包括三个部分,分别是HTTP版本、状态码和状态消息。

  1. HTTP版本:指定使用的HTTP协议版本,例如HTTP/1.0、HTTP/1.1、HTTP/2等。
  2. 状态码(status code):指示对请求的处理结果,通常是一个3位数字,例如200表示成功,404表示未找到请求的资源等。
  3. 状态消息(reason phrase):对状态码的简要描述,通常是一个文本字符串,例如"OK"、"Not Found"等。状态消息不是HTTP协议必需的,但是它可以提供更多的信息。

附上状态码说明:

  • 1xx(信息性状态码):表示接收到请求并且正在处理。
    • 100 Continue: 继续。服务器已经接收到请求头,客户端应该继续发送请求体。
    • 101 Switching Protocols: 切换协议。服务器要求客户端切换协议,例如从HTTP协议切换到WebSocket协议。
  • 2xx(成功状态码):表示请求已成功处理。
    • 200 OK: 请求成功。服务器成功处理了请求。
    • 201 Created: 已创建。请求成功,并且服务器创建了新的资源。
    • 204 No Content: 无内容。服务器成功处理了请求,但没有返回任何内容。
  • 3xx(重定向状态码):表示需要进一步的操作来完成请求。
    • 301 Moved Permanently: 永久重定向。请求的资源已被永久移动到新位置。
    • 302 Found: 临时重定向。请求的资源暂时移动到新位置。
    • 304 Not Modified: 未修改。客户端发送了一个条件请求,服务器确认资源未被修改。
  • 4xx(客户端错误状态码):表示请求包含语法错误或无法完成请求。
    • 400 Bad Request: 错误的请求。服务器无法理解请求的语法。
    • 401 Unauthorized: 未授权。需要身份验证才能访问资源。
    • 404 Not Found: 未找到。请求的资源不存在。
  • 5xx(服务器错误状态码):表示服务器在处理请求时发生了错误。
    • 500 Internal Server Error: 内部服务器错误。服务器遇到了意外错误,无法完成请求。
    • 503 Service Unavailable: 服务不可用。服务器暂时无法处理请求,通常是因为过载或维护。

响应头

响应头用于提供关于响应的元数据和控制。

Content-Type:指定响应主体的媒体类型。

Content-Length:指定响应主体的长度(字节数)。

Server:指定服务器软件的名称和版本。

Date:指定响应产生的日期和时间。

Set-Cookie:在响应中设置一个或多个Cookie。

Location:用于重定向,指定新的URL地址。

Cache-Control:指定响应的缓存策略。

Content-Encoding:指定响应主体的内容编码方式。

Access-Control-Allow-Origin:用于跨域资源共享(CORS),指定允许访问资源的源。

响应头与前端漏洞间存在些许联系,这里不过多叙述。

响应体

响应体(Response Body)是服务器返回给客户端的数据部分。与响应头部分不同,响应体通常是必须要有的部分,因为它包含了客户端所请求的资源或执行结果的具体内容。

响应体的格式通常使用Content-Type首部字段来指定,而响应体的长度则使用Content-Length首部字段来指定。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在本例中,响应体的格式遵循HTML。

当响应体语言为HTML时,可将响应体复制后使用浏览器打开,获取直观界面,也可使用Burp中的Render功能:

在这里插入图片描述

结果的具体内容。

响应体的格式通常使用Content-Type首部字段来指定,而响应体的长度则使用Content-Length首部字段来指定。

[外链图片转存中…(img-AhACFGkh-1708354477870)]

在本例中,响应体的格式遵循HTML。

当响应体语言为HTML时,可将响应体复制后使用浏览器打开,获取直观界面,也可使用Burp中的Render功能:

[外链图片转存中…(img-Qd991f6z-1708354477870)]

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电路设计(20)——数字电子钟的multism仿真

1.设计要求 使用数字芯片&#xff0c;设计一个电子钟&#xff0c;用数码管显示&#xff0c;可以显示星期&#xff0c;时、分、秒&#xff0c;可以有按键校准时间。有整点报警功能。 2.设计电路 设计好的multism电路图如下所示 3.芯片介绍 时基脉冲使用555芯片产生。在仿真里面…

挑战杯 地铁大数据客流分析系统 设计与实现

文章目录 1 前言1.1 实现目的 2 数据集2.2 数据集概况2.3 数据字段 3 实现效果3.1 地铁数据整体概况3.2 平均指标3.3 地铁2018年9月开通运营的线路3.4 客流量相关统计3.4.1 线路客流量排行3.4.2 站点客流量排行3.4.3 入站客流排行3.4.4 整体客流随时间变化趋势3.4.5 不同线路客…

NodeLocal DNS介绍及部署应用

1 NodeLocal DNS是什么&#xff1f; NodeLocal DNSCache 通过在集群节点上运行一个 DaemonSet 来提高 clusterDNS 性能和可靠性。处于 ClusterFirst 的 DNS 模式下的 Pod 可以连接到 kube-dns 的 serviceIP 进行 DNS 查询。通过 kube-proxy 组件添加的 iptables 规则将其转换为…

蓝桥杯DP算法——背包问题(C++)

目录 一、01背包问题 二、完全背包问题 三、多重背包问题 四、多重背包问题&#xff08;优化版&#xff09; 五、分组背包问题 一、01背包问题 01背包问题就是有N件物品&#xff0c;一个空间大小为V的背包&#xff0c;每个物品只能使用一次&#xff0c;使得背包中所装物品…

2019年江苏省职教高考计算机技能考试——一道程序改错题的分析

题目&#xff1a;函数将str字符串中的5个数字字符串转换为整数&#xff0c;并保存在二维数组m的最后一行&#xff0c;各元素为3、-4、16、18、6。并经函数move处理后&#xff0c;运行结果如下&#xff1a; 18 6 3 -4 16 16 18 6 3 -4 -4 16 …

【AIGC】Stable Diffusion之模型微调工具

推荐一款好用的模型微调工具&#xff0c;cybertron furnace 是一个lora训练整合包&#xff0c;提供训练 lora 模型的工具集或环境。集成环境包括必要的依赖项和配置文件、预训练脚本&#xff0c;支持人物、二次元、画风、自定义lora的训练&#xff0c;以简化用户训练 lora 模型…

【Linux】软件包管理器 yum | vim编辑器

前言: 软件包管理器 yum和vim编辑器讲解 文章目录 软件包管理器 yum编辑器-vim四种模式普通模式批量化注释和批量化去注释末行模式临时文件 软件包管理器 yum yum&#xff08;Yellowdog Updater, Modified&#xff09;是一个在基于 RPM&#xff08;管理软件包的格式和工具集合&…

软考学习--计算机组成原理与体系结构

计算机组成原理与体系结构 数据的表示 进制转换 R 进制转换为 10 进制–按权展开法 10进制转换为2进制 原码 反码 补码 移码 原码 &#xff1a;数字的二进制表示反码 &#xff1a; 正数的反码等于原码&#xff0c;负数的反码等于原码取反补码&#xff1a; 正数的补码等…

跟着pink老师前端入门教程-day24

四、移动端WEB开发之响应式布局 1、响应式开发 1.1 响应式开发原理 就是使用媒体查询针对不同宽度的设备进行布局和样式的设置&#xff0c;从而适配不同设备的目的。 1.2 响应式布局容器 响应式需要一个父级做为布局容器&#xff0c;来配合子级元素来实现变化效果。 原理…

世界顶级名校计算机专业,都在用哪些书当教材?(文末送书)

目录 01《深入理解计算机系统》02《算法导论》03《计算机程序的构造和解释》04《数据库系统概念》05《计算机组成与设计&#xff1a;硬件/软件接口》06《离散数学及其应用》07《组合数学》08《斯坦福算法博弈论二十讲》参与规则 清华、北大、MIT、CMU、斯坦福的学霸们在新学期里…

FL Studio 21.2.3.4004 All Plugins Edition Win/Mac音乐软件

FL Studio 21.2.3.4004 All Plugins Edition 是一款功能强大的音乐制作软件&#xff0c;提供了丰富的音频处理工具和插件&#xff0c;适用于专业音乐制作人和爱好者。该软件具有直观的用户界面&#xff0c;支持多轨道录音、混音和编辑&#xff0c;以及各种音频效果和虚拟乐器。…

《统计学简易速速上手小册》第6章:多变量数据分析(2024 最新版)

文章目录 6.1 主成分分析&#xff08;PCA&#xff09;6.1.1 基础知识6.1.2 主要案例&#xff1a;客户细分6.1.3 拓展案例 1&#xff1a;面部识别6.1.4 拓展案例 2&#xff1a;基因数据分析 6.2 聚类分析6.2.1 基础知识6.2.2 主要案例&#xff1a;市场细分6.2.3 拓展案例 1&…

探索设计模式的魅力:迭代器模式让你轻松驾驭复杂数据集合

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;并且坚持默默的做事。 文章目录 一、&#x1f4a1; 引言二、原理与结构 &#x1f4da;&#x1f465; 迭代器模式的关…

【二十八】springboot整合logback实现日志管理

本章节是记录logback在springboot项目中的简单使用&#xff0c;本文将会演示如何通过logback将日志记录到日志文件或输出到控制台等管理操作。将会从以下几个方面进行讲解。最后实现将特定级别的特定日志保存到日志文件。 一、依赖 <dependency><groupId>ch.qos.l…

基于python的遥感影像灰色关联矩阵纹理特征计算

遥感影像纹理特征是描述影像中像素间空间关系的统计特征&#xff0c;常用于地物分类、目标识别和变化检测等遥感应用中。常见的纹理特征计算方式包括灰度共生矩阵&#xff08;GLCM&#xff09;、灰度差异矩阵&#xff08;GLDM&#xff09;、灰度不均匀性矩阵&#xff08;GLRLM&…

51_蓝桥杯_led流水灯

一 原理图分析 二 三八译码器工作原理 三八译码器&#xff1a;3个输入控制8路互斥的低电平有效输出。 C B A 输出 0 0 0 Y0 0 0 1 Y1 0 1 0 Y2 0 1 1 Y3 1 0 0 Y4 1 0 1 Y5 1 1 0 Y6 1 1 1 Y7 三 锁存器工作原理 锁存器&#xff1a;当使…

OpenAI 全新发布文生视频模型 Sora,支持 60s 超长长度,有哪些突破?将带来哪些影响?

Sora大模型简介 OpenAI 的官方解释了在视频数据基础上进行大规模训练生成模型的方法。 我们下面会摘取其中的关键部分罗列让大家快速get重点。 喜欢钻研的伙伴可以到官网查看技术报告&#xff1a; https://openai.com/research/video-generation-models-as-world-simulator…

BDD - Python Behave 用户自定义配置文件

BDD - Python Behave 用户自定义配置文件 引言默认 behave.ini 配置文件自定义配置文件json 格式的配置文件ini 格式的配置文件 实例应用项目结构代码BDD/Features/user_data.feature 文件BDD/steps/user_data_steps.py 文件BDD/environment.py 文件默认配置文件 behave.ini自定…

BUGKU-WEB 留言板1

题目描述 题目截图如下&#xff1a; 进入场景看看&#xff1a; 解题思路 之间写过一题类似的&#xff0c;所以这题应该是有什么不同的那就按照之前的思路进行测试试试提示说&#xff1a;需要xss平台接收flag&#xff0c;这个和之前说的提示一样 相关工具 xss平台&#xf…

外包干了2个月,感觉技术明显退步...

先说情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…