【23-07-03:HTTP协议的结构学习】

news2024/11/23 18:28:50

目录

  • HTTP 请求的结构
    • HTTP 请求的整体架构
    • 请求方法(Method)
    • 请求路径(URI)
    • GET 参数(Parameters for GET)
    • 协议说明(Protocol)
    • 头部字段(Headers)
    • 请求体(Body)
  • HTTP 响应的结构
    • 协议说明(Protocol)
    • 状态码(StatusCode)与状态说明(StatusDescription)

HTTP协议主要分为请求和响应两部分。请求和响应都是采用标准的HTTP格式,分为“头(header)”和“体(Body)”两部分,使用单独的一行空行来隔开。请求头和响应头都是必需的(在HTTP/0.9,没有响应头,不做讨论),而请求体和响应体则可以缺省

HTTP 请求的结构

HTTP 请求的整体架构

在这里插入图片描述

请求方法(Method)

请求方法体现了本次请求的目的

方法名说明
GET最为常见的方法,单击链接打开网页通常使用的都是GET方法,表示一次普通的请求
POST提交数据时常用POST方法,主要用于登录、提交表单、上传文件等
OPTIONS返回服务器针对特定资源所支持的HTTP请求方法
HEAD与GET请求基本一致,但不返回响应体
PUT早期用于向服务器上传文件,后来被RESTFul架构所重用,用来更新资源
DELETE早期用于删除服务器上指定文件,后来被RESTFul架构所重用,用来删除资源
TRACE回显服务器收到的请求,主要用于调试和诊断
CONNECTHTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
  • 此外,被许多服务器认可的方法还有:ACL、CANCELUPLOAD(cancelupload),CHECKOUT、COPY、LOCK、MKCALENDAR、MKCOL、MOVE、UPDATE、SEARCH等

请求路径(URI)

(URI表示了请求的资源路径。)
(统一资源标识符(Uniform Resource Identifier,URI))

  • 请求方法与URI之间是以若干个空格或TAB(制表符)来分隔的,通常是一个空格
  • 传统架构下,URI对应了网站目录结构。在新型的web架构下,会配置Web路由,根据URI映射不同的处理接口。当服务器被配置为HTTP代理时,这里通常是一串形如“http://xxxx”或“http://xxxxx”的数据。但在一般情况下,这里都是一串以“/”开头的资源路径。若所请求的资源是该服务器主页时,往往写作“/”即网站根目录,这时Web Server会根据当前的配置返回默认的首页,通常是”/index.html“或”/index“等。

GET 参数(Parameters for GET)

GET参数通常是一些细化请求的描述

  • 例如:文章id、页码、请求时间等。MVC架构主要以GET参数作为请求路径和接口对应。在URI之后如果还需要提交 GET 参数会以"?"作为分割符,在问号之后是一串参数序列。
  • 特殊情况下,如果请求的是首页并且存在“?”,此时“/”可以缺省,但是这个特性仅限于Apache服务器,Nginx则不行。
  • “?”后面的一串参数序列也有特定的格式约束,总体来说是以“&”作为不同参数的分割。每个参数由“key=value”的形式组成,key和value以第一个“=”划分。当参数出现数组时,以"key[name]=value"的形似进行提交。

协议说明(Protocol)

协议说明表示了当前请求使用的协议和版本。

  • 以“HTTP/”开头,然后加上版本号,例如“HTTP/1.1”。URI(没有GET参数的情况)或GET参数与协议说明之间也是采用若干个空格或TAB(制表符)分割的,通常是一个空格。
  • 到这里,第一行的内容已经结束了,此时一般需要一个“\r\n”作为换行符,之后的几行是HTTP请求的头部字段,各字段之间的换行符默认均为“\r\n”,在一些Web Server中也是支持单独的“\n”.

头部字段(Headers)

头部字段说明了本次请求的域名(HOST)、使用的浏览器(User-Agent)以及Cookie等。头部字段有很多,下面列举几个常见的

字段名说明
Host指定所访问的域名,对于一台服务器搭建了多个网站的情况,Web Server 依据Host不同来决定分别交给哪个网站应用来处理请求。一般所说的修改本机Host文件,在HTTP请求中也可以通过修改HTTP包中的Host字段来完成
Referer当由一个页面A 单击超链接跳转到另外一个页面B,或通过提交表单到另外一个页面时,浏览器会自动将页面A的URL放在请求B页面的Referer字段中,这个字段主要时是告诉服务器这个请求时哪里来的。
User-Aagent浏览器特征说明会告诉服务器当前用户所用的操作系统以及浏览器的类型和版本号,方便网站呈现在适合当前用户的前端展示效果
Cookie这个字段十分重要,它会用来存储一些用户的状态,服务器通过读取这个字段可以清楚地了解用户当前地身份信息以及其他状态信息。

请求体(Body)

GET请求通常没有请求体,而POST请求通常会有。

  • 注意,这里使用了了两个“通常”,表示都不是绝对地。HTTP协议地任何字段都是可以人为修改的,这也是我在接触和学习web安全非常重要的心得体会,不少漏洞正是存在这样的修改之中。
  • 请求体主要用于提交大量不便于在请求头中传递的信息,之所以不便于在请求头中传递,主要是受长度限制和字符编码等因素影响,另外,如密码之类的信息,也比较适合放在请求体中传递,能够起到一定的保护作用。请求体的应用常见于POST方式提交的请求中。

HTTP 响应的结构

在这里插入图片描述

协议说明(Protocol)

  • 协议说明用于说明当前响应是基于HTTP协议的哪一个版本,通常以“HTTP/”开头,后面加协议版本号,如:“HTTP/1.1”

状态码(StatusCode)与状态说明(StatusDescription)

  • 这个字段相当重要,它说明了当前请求执行的结果。对有些漏洞的检测就是以响应状态码来判断的,比如大家熟知的“200 OK”"404 Not Found"等,常见的状态码及说明如下表在这里插入图片描述
  • HTTP状态码与安全息息相关。在漏洞挖掘中,不同的状态码表达了不同的服务器内部情况,细心的人往往能通过服务器细微的变化来感知漏洞是否存在。

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

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

相关文章

论文与专利查找和下载

例如我想查找和下载视频理解(video understanding)相关论文 路线大纲如下: 一、最主要方式: 大纲,蓝色都是有超级链接的可以直接打开: 第一步 谷歌搜索(英文) 学校的知网(中文)第二步 下载论文(谷歌学术--英文 学校的知网--中文)下载不了…

CMA

文章目录 前言概念功能启用CMA 内存的创建方式一、使用 cmdline方式二、使用 dts CMA 内存分配和释放实例(dts 方式) 前言 在嵌入式设备中,很多外设(如摄像机、硬件视频解码器等)需要较大的内存缓冲区,kma…

clickhouse日志表占用大量磁盘空间

clickhouse日志表占用大量磁盘空间 sql: SELECT sum(rows) AS 总行数, formatReadableSize(sum(data_uncompressed_bytes)) AS 原始大小, formatReadableSize(sum(data_compressed_bytes)) AS 压缩大小, round((sum(data_compressed_bytes) / sum(data_uncompresse…

<DB2> 《IBM DB2 备份恢复实用文档》(第一部分)

[TOC](《IBM DB2 备份恢复实用文档》(第一部分)) 1 理论 1.1 关于备份恢复说明 a、DB2数据库备份和恢复的数据都是已经提交落地在磁盘的数据 。 b、DB2数据库备份和恢复使用的日志都是归档日志。 c、只有开启归档日志,才能进行在线全备、在线增备。否则只能进行离…

基于单片机智能手环心率老人防跌倒心率体温 步数里程

功能介绍 以STM32单片机作为主控系统; OLED液晶显示心率体温步数等信息;通过按键设置心率、体温上限设置;当心率或者体温超过按键设置上限蜂鸣器进行声光报警提醒;通过wifi模块esp8266把数据发送到手机端进行显整个电路以5v供电&a…

Three.js卡通材质实现简明教程

继 Harry Alisavakis 令人惊叹的汤着色器之后,我想使用 Three.js 重新创建类似的卡通着色效果。 我从 Roystan 的卡通着色器教程开始,它是为 Unity 编写的。 在这篇文章中,我将把 Roystan 教程中概述的原则翻译成 Three.js。 下面描述的着色器…

mysql索引之Hash

在存储引擎中Memory引擎是支持Hash索引的,Hash索引跟java中的HashMap很像,有很多槽,存的也是键值对,键值为索引列,值为这条数据的行指针,通过指针就可以找到数据。 但是Hash索引应用的并不多,原…

一篇文章解释清楚IOC和DI

背景 众所周知我们要学习Spring,必不可少的就是IOC和AOP,那就让我们了解一下什么是IOC,开启下面的学习吧。 过程 什么是IOC? Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一…

VSCode 2019 “对COM组件的调用返回了错误HRESULT E_FAIL” 的解决

问题: VSCode使用 “MFC应用”模板创建项目时,出现:文件夹打不开,并弹出 “对COM组件的调用返回了错误HRESULT E_FAIL” 错误 解决方案: 1. 以管理员身份打开Developer Command Prompt for VS 2019(vs2…

敏捷开发发展和优缺点

目录 1 概述1.1 四种开发模式1.1.1 瀑布式开发1.1.2 螺旋模型1.1.3 迭代式开发1.1.4 敏捷开发 1.2 开发模式对比 2 敏捷开发2.1 敏捷宣言2.1.1 敏捷宣言解读2.1.2 敏捷宣言价值观 2.2 敏捷准则2.2.1 目的:是客户满意2.2.2 态度:欢迎需求变更2.2.3 关注&a…

加油,也可以更智慧

摘要:智慧加油站及油库管理系统的应用引擎是结合了华为云Roma Exchange能力,提升应用开发、部署和升级效率,支撑应用快速开发、远程部署。 停车、加油、驶离…… 从开车进场到离场,2分钟内即可完成“即加即走”的无感加油支付有没…

如何自动批量查询手机号归属地?

我们在工作生活中可能会收集到很多用户的手机号,我们如果想获取手机号归属地,只能一个个人工查询。如果数据量较多的情况就会比较耗费时间。有没有什么方法可以自动查询手机号归属地呢?当然可以,并且这个方法还是免费的。 首先&a…

qt-线程竞争共享资源和读写锁--QReadWriteLock

目录 一、线程竞争的概念2、什么是线程竞争2、什么是线程竞争共享资源? 二、读写锁1、读写锁的概念2、读写锁的工作原理如下:3、使用读写锁的示例(QReadWriteLock) 三、总结: 一、线程竞争的概念 2、什么是线程竞争 …

网络安全进阶学习第五课——文件上传漏洞

文章目录 一、常见文件上传点二、任意文件上传漏洞三、任意文件上传危害四、webshell五、上传木马所需条件六、木马上传流程七、上传绕过1、绕过JS验证1)Burpsuite剔除响应JS。2)浏览器审计工具剔除JS 2、绕过MIME-Type验证1)利用抓包工具&am…

Session 反序列化漏洞

将$_SESSION中保存的所有数据序列化存储到PHPSESSID对应的文件中有三种存取格式: (1)默认使用php:键名|键值(经过序列化函数处理的值) name|s:6:"1FonlY"; (2)php_seri…

Multi-level Wavelet-CNN for Image Restoration论文总结

论文:Multi-level Wavelet-CNN for Image Restoration 源码:GitHub - lpj0/MWCNN: Multi-level Wavelet-CNN for Image Restoration 目录 一、背景和出发点 二、创新点 三、MWCNN具体实现 四、DWT与池化运算和膨胀卷积相关性证明 五、DWT、IWT代码实…

阿里云服务器白嫖教程

阿里云服务器白嫖教程 第一步:打开百度第二步:进入阿里云官方,注册登录账号第三步:点击免费试用第四步:点击立即试用第五步:选择操作系统第五步:选择到期释放设置![在这里插入图片描述](https://img-blog.csdnimg.cn/d02f4582dd5943319441df9ccbae60f0.png)第六步:同意协议,并立…

3D深度视觉与myCobot 320机械臂无序抓取

今天我记录使用myCobot320 M5跟FS820-E1深度相机进行一个无序抓取物体的分享。 为什么会选择深度相机和机械臂做一个案例呢? 2D相机(最常见使用的相机)可以捕捉二维图像,也就是在水平和垂直方向上的像素值。它们通常用于拍摄静态…

F#奇妙游(5):计算π的值

F#到底有什么用? 奇妙游写到第五篇,前面的几篇都是开场白: 一个用F#编写WinForm的例子donet命令行工具,也就是F#的开发环境关于函数和函数式编程的碎碎念函数式编程的核心概念:值 下面,我们开始正式来搞…

数据库左、右、内、逗号、全连接(mysql不包含全连接)方式

1、准备数据 学生有归属班级 学生表 班级表 2、执行查询语句 2.1执行左关联 select * from student stu left join class cla on (stu.class_idcla.class_id); 结果如下 2.2执行右关联 2.3、执行内连接 2.4执行逗号分隔表的连接方式 和内连接的查询结果是一样的