【网络安全 | 网络协议】一文讲清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.mzph.cn/news/690985.shtml

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

相关文章

代码随想录算法训练营第三十六天|435. 无重叠区间 763.划分字母区间 56. 合并区间

435. 无重叠区间 链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 细节&#xff1a; 1. 这道题目和 452.用最少数量的箭引爆气球 &#xff0c;452中的弓箭数量其实就是 无重叠区间的数量&#xff0c;用总的区间数减去 无重叠区间的数…

vscode 开发代码片段插件

环境准备 node - 20v版本 &#xff0c;推荐使用nvm进行版本控制全局安装 "yo" 是 Yeoman 工具的命令行工具&#xff0c; npm i yo -g全局安装 generator-code 是一个 Yeoman 脚手架 gernerator-code npm i gernerator-code -g全局安装 npm install -g vsce官方文档 …

使用openai-whisper实现语音转文字

使用openai-whisper实现语音转文字 1 安装依赖 1.1 Windows下安装ffmpeg FFmpeg是一套可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。 # ffmpeg官网 https://ffm…

Unity之闪电侠大战蓝毒兽

目录 &#x1f3a8;一、创建地形 &#x1f3ae;二、创建角色 &#x1f3c3;2.1 动画 &#x1f3c3;2.2 拖尾 &#x1f3c3;2.3 角色控制 ​&#x1f3c3;2.4 技能释放 &#x1f3c3;2.5 准星 &#x1f4f1;三、创建敌人 &#x1f432;3.1 选择模型 &#x1f432;3.…

Netty Review - NIO空轮询及Netty的解决方案源码分析

文章目录 Pre问题说明NIO CodeNetty是如何解决的&#xff1f;源码分析入口源码分析selectCntselectRebuildSelector Pre Netty Review - ServerBootstrap源码解析 Netty Review - NioServerSocketChannel源码分析 Netty Review - 服务端channel注册流程源码解析 问题说明 N…

专题十一、指针和数组

指针和数组 1. 指针的算术运算1.1 指针加上整数1.2 指针减去整数1.3 两个指针相减1.4 指针比较1.5 指向复合常量的指针 2. 指针用于数组处理3. 用数组名作为指针3.1 数组型实际参数&#xff08;改进版&#xff09;3.2 用指针作为数组名 4. 指针和多维数组4.1 处理多维数组的元素…

log4j2的使用

基础用法 1. pom文件导入依赖 junit用来做测试 <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.5</version></dependency><dependency><groupId>org.…

国际网络专线多少钱一年

国际网络专线作为企业扩展业务的重要通信渠道&#xff0c;已经成为许多企业不可或缺的选择。然而&#xff0c;对 于许多企业来说&#xff0c;选择一条稳定、高质量的国际网络专线&#xff0c;并不是一件容易的事情。那么&#xff0c;国际 网络专线到底多少钱一年呢&#xff1f;…

BGP 邻居建立

拓扑图 配置 BGP进程号及为AS号 使用环回口建立BGP邻居关系时&#xff0c;需要指定更新源地址 EBGP在使用环回口建立邻居关系时&#xff0c;需配置EBGP多跳&#xff0c;环回口路由可达 EBGP的路由器存在IBGP邻居时&#xff0c;需要配置next-hop-local&#xff0c;保证下一跳…

适合tiktok运营的云手机需要满足什么条件?

TikTok作为一款全球热门的社交媒体平台&#xff0c;具有无限的市场潜力。然而&#xff0c;卖家在运营过程中常常会面临到视频0播、账号被降权、限流等问题&#xff0c;甚至可能因为多人同时使用一个IP而导致封号的风险。为了规避这些问题&#xff0c;越来越多的卖家将目光投向了…

C语言—指针(2)

回原点(......?)当我没讲&#xff0c;好难 1. 编写函数,要求用指针做形参&#xff0c;实现将二维数组(行列相同)的进行转置&#xff08;行列数据互换&#xff09;&#xff1a; ...不会写 /*1. 编写函数,要求用指针做形参&#xff0c;实现将二维数组(行列相同)的进行转置&a…

看小姐姐的效果棒极了,写了一个工具,逐帧解析视频转成图片,有没有带上商业思维的小伙伴一起研究下

一个突然的想法&#xff0c;促成了这个项目雏形。 原理是&#xff1a; 上传一个视频&#xff0c;自动将视频每一帧保存成图片 然后前端访问 就能实现如图效果 后端是python/flask 数据库mysql 前端uniapp 项目演示&#xff1a; xt.iiar.cn 后端代码如下&#xff1a; #学习…

【C深剖】数组名的细节

本系列博客为个人刷题思路分享&#xff0c;有需要借鉴即可。 引言&#xff1a;我想我说的这个数组名细节可能很多人并没有留意&#xff0c;现在先来C设计者这样设计也很合理。 就是数组名本质上是一个指针&#xff0c;但是这个指针的内容也就是说指向的空间是固定的&#xff0c…

unplugin-vue-components解决命名冲突

我们在vue项目中通常会利用unplugin-vue-components插件进行自定义组件的自动引入 注&#xff1a;如果不知道怎么配置unplugin-vue-components插件&#xff0c;欢迎看我整理的这篇&#xff1a; vue3项目配置按需自动引入自定义组件unplugin-vue-components 当出现同名文件时&a…

先进电机技术——感应电机与同步电机

一、感应电机 感应电机&#xff08;Induction Motor&#xff09;是一种广泛应用的交流电动机&#xff0c;其工作原理基于电磁感应定律。在感应电机中&#xff0c;定子绕组连接到电源后会因通入的交流电而产生一个旋转磁场。这个磁场在空间中是连续变化并以恒定的速度&#xff…

【医学大模型】Text2MDT :从医学指南中,构建医学决策树

Text2MDT &#xff1a;从医学指南中&#xff0c;构建医学决策树 提出背景Text2MDT 逻辑Text2MDT 实现框架管道化框架端到端框架 效果 提出背景 论文&#xff1a;https://arxiv.org/pdf/2401.02034.pdf 代码&#xff1a;https://github.com/michael-wzhu/text2dt 假设我们有一…

算法-矩阵置零

1、题目来源 73. 矩阵置零 - 力扣&#xff08;LeetCode&#xff09; 2、题目描述 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1…

机器学习---规则学习(一阶规则学习、归纳逻辑程序设计)

1. 一阶规则学习 “一阶”的目的&#xff1a;描述一类物体的性质、相互关系&#xff0c;比如利用一阶关系来挑“ 更好的”瓜&#xff0c;但实际应用 中很难量化颜色、 …、敲声的属性值。一般情况下可以省略全称量词。 命题逻辑&#xff1a;属性-值数据 色泽程度&#xff1a…

CSS:BFC

BFC&#xff0c;Block Formatting Context&#xff0c;块级格式化上下文&#xff0c;是一个独立的渲染区域或隔离的独立容器&#xff0c;它决定了其子元素如何布局&#xff0c;并且与这个区域外部的元素无关。 形成 BFC 的条件 float 的值不为 none&#xff08;left、right&a…

爬虫入门一

文章目录 一、什么是爬虫&#xff1f;二、爬虫基本流程三、requests模块介绍四、requests模块发送Get请求五、Get请求携带参数六、携带请求头七、发送post请求八、携带cookie方式一&#xff1a;放在请求头中方式二&#xff1a;放在cookie参数中 九、post请求携带参数十、模拟登…