四、web应用程序技术——HTTP

news2024/11/16 18:05:56

文章目录

  • 1 HTTP请求
  • 2 HTTP响应
  • 3 HTTP方法
  • 4 URL
  • 5 HTTP消息头
    • 5.1 常用消息头
    • 5.2 请求消息头
    • 5.3 响应消息头
  • 6 cookie
  • 7 状态码
  • 8 HTTP代理
  • 9 HTTP身份验证

  HTTP(HyperText Transfer Protocol,超文本传输协议)是访问万维网使用的核心通信协议,也是今天web应用程序使用的通讯协议。
  HTTP使用一种基于消息的模型:客户端发出一条请求消息,而后由服务端返回一条响应消息

1 HTTP请求

  所有HTTP消息(请求与响应)中都包含一个或几个单行显示的消息头,然后是一条强制空白行,最后是消息主体(可选)。以下是一个典型的HTTP请求(部分):
在这里插入图片描述
在这里插入图片描述

  每个HTTP请求的第一行都由3个以空格相隔的项目组成:

  • 一个说明HTTP方法的动词。最常见的方法是GET,它的主要作用是从web服务器获取一个资源。GET请求并没有消息主体,因此在消息头后的空行中没有其他资源。
  • 所请求的URL。该URL通常由所请求的资源名称,以及一个包含客户端向该资源提交的参数的可选查询字符串组成,查询字符串以?字符标识。
  • 使用的HTTP版本

  其他要点如下:

  • Referer消息头表示发出请求的原始URL;
  • User_Agent消息头提供与浏览器或其他生成请求的客户端软件相关的信息。请注意,由于历史原因,大多数浏览器都包含Mozilla前缀。
  • Host消息头用于指定出现在被访问的完整URL中的主机名称。如果几个web站点以相同的一台服务器为主机,就需要使用Host消息头,因为请求第一行中的URL内通常并不包含主机名称。
  • Cookie消息头用于提交服务器向客户端发布的其他参数。

2 HTTP响应

  以下是一个典型的HTTP响应:

在这里插入图片描述
在这里插入图片描述
  每个HTTP响应的第一行由3个以空格间隔的项目组成。

  • 使用的HTTP版本
  • 表示请求结果的数字状态码。200是最常见的状态码,它表示成功提交了请求,正在返回所请求的资源。
  • 一段文本形式的“原因短语”,进一步说明响应状态。

  响应示例的其他一些要点如下:

  • Server消息头中包含一个旗标,指明所使用的web服务器软件。有时还包含其他消息,如所安装的模块和服务器操作系统,其中包含的信息可能并不准确。
  • Set-cookie消息头向浏览器发送另一个cookie,它将在随后向服务器发送的请求中由Cookie消息头返回;
  • Pragma消息头指示浏览器不要将响应保存在缓存中。Expires消息头指出响应内容已经过期,因此不应保存在缓存中。当返回动态内容时常常发送这些指令,以确保浏览器随时获得最新内容。
  • 几乎所有的HTTP响应在消息头后的空白行下面都包含消息主体,Content-Type消息头表示这个消息主体中包含一个HTML文档。
  • Content-Length消息头规定消息主体的字节长度。

3 HTTP方法

  当渗透测试人员攻击Web应用程序时,几乎肯定会遇到最常用的方法:GETPOST

  • GET方法的作用在于获取资源。它可以用于URL查询字符串的形式向所请求的资源发送参数。
  • POST方法的主要作用是执行操作。使用这个方法可以在URL查询字符串与消息主体中发送请求参数。

  此外,还有其他方法:

  • HEAD。这个方法的功能与Get方法相似,不同之处在于服务器不会在其响应中返回消息主体。服务器返回的消息头应与对应GET请求的消息头相同。这种方法可用于检查某一资源在向其提交GET请求前是否存在。
  • TRACE。这种方法主要用于诊断,服务器应在响应主体中返回其收到的请求消息的具体内容。这种方法可用于检测客户端与服务器之间是否存在任何操纵请求的代理服务器。
  • OPTIONS。这种方法要求服务器报告对某一特殊资源有效的HTTP方法。服务器通常返回一个包含ALLOW消息头的响应,并在其中列出所有有效的方法。
  • PUT。这个方法试图使用包含在消息主体中的内容,向服务器上传指定资源。

4 URL

  URL(Uniform Resource Locator,统一资源定位符)是标识web资源的唯一标识符,通过它即可获取其标识的资源。最常用的URL格式如下:
在这里插入图片描述

5 HTTP消息头

  HTTP支持许多不同的消息头,一些消息头可用在请求与响应中,而其他一些消息头只能专门用在某个特定的消息中。

5.1 常用消息头

  • Connection:这个消息头告诉通信的另一端,在完成HTTP传输后是关闭TCP连接,还是保持连接开放以接受其他消息。
  • Content-Encoding:这个消息头为消息主体中的内容指定编码形式。为了尽快传输,特指传输之前的编码方案。
  • Content-Length:这个消息头用于规定消息主体的字节长度。(HEAD语法的响应例外,它在对应的GET请求的响应中指出主体的长度)
  • Transfer-Encoding:这个消息头指的是传输时使用的编码形式。

5.2 请求消息头

  • Accept:这个消息头用于告诉服务器,客户端愿意接受哪些内容,如图像类型等。
  • Accept-Encoding:这个消息头用于告诉服务器,客户端愿意接受哪些内容编码(对应Content-Encoding)。
  • Authorization:这个消息头用于为一种内置HTTP身份验证向服务器提交证书。
  • Cookie:这个消息头用于向服务器提交它之前发布的cookie。
  • Host:这个消息头用于指定出现在所请求的完成URL中的主机名称。
  • IF-Modified-Since:这个消息头用于说明浏览器最后一次收到所请求的资源的时间。如果自那以后资源没发生变化,服务器就会发出一个带状态码304的响应,指示客户端使用资源的副本。
  • IF-None-Match:这个消息头用于指定一个实体标签。实体标签是一个说明消息主体内容的标识符。当最后一次收到所请求的资源时,浏览器提交服务器发布的实体标签,服务器可以使用实体标签确认浏览器是否使用资源的缓存副本。
  • Origin。这个消息头用在跨域Ajax请求中,用于指示提出请求的域。
  • Referer。这个消息头用于指示提出当前请求的原始URL。
  • User-Agent。这个消息头提供域浏览器或生成请求的其他客户端软件有关信息。

5.3 响应消息头

  • Access-Contro-Allow-Origin。这个消息头用于指示是否通过跨域Ajax请求获取资源。
  • Cache-Control。这个消息头用于向浏览器传送缓存指令。
  • ETag。这个消息头用于指示一个实体标签,客户端可在将来的请求中提交这个标识符,获得和IF-None-Match消息头相同的资源,通知服务器浏览器当前缓存中保存的是哪个版本的资源。
  • Expires。这个消息头用于向浏览器说明消息主体内容的有效时间。在这个时间之前,浏览器可以使用这个资源的缓存副本。
  • Location。这个消息头用于在重定向(那些状态码以3开头的响应)中说明重定向的目标。
  • Pragma。这个消息头用于向浏览器传送缓存指令。
  • Server。这个消息头提供所使用的web服务器软件的相关信息。
  • Set-Cookie。这个消息头用于向浏览器发布cookie,浏览器会在随后的请求中将其返回给服务器。
  • WWW-Authenticate。这个消息头用在带401状态码的响应中,提供于服务器所支持的身份验证类型有关的信息。
  • X-Frame-Options。这个消息头指示浏览器框架是否及如何加载当前响应。

6 cookie

  服务器使用cookie机制向客户端发送数据,客户端保存cookie并将其返回给服务器。具体而言,服务器使用Set-Cookie响应消息头发布cookie:
在这里插入图片描述
  然后,用户的浏览器自动在随后的请求包中添加cookie消息头发给服务器:
在这里插入图片描述
  cookie一般由一个名/值对构成,但也可包含任何不含空格的字符串。可以在服务器响应中使用几个Set-Cookie消息头发布多个cookie,并可在一个cookie消息头中用分号分隔不同的cookie,将它们全部返回给服务器。

7 状态码

  每个HTTP响应消息都必须在第一行包含一个状态码,说明请求结果。根据状态码的一个位数字,可将状态码分为以下5类。

  • 1XX——提供信息。
  • 2XX——请求被成功提交。
  • 3XX——客户端被重定向到其他资源。
  • 4XX——请求包含某种错误。
  • 5XX——服务器执行请求时遇到错误。

8 HTTP代理

  HTTP代理服务器是一个协调客户端浏览器于目标web服务器之间访问的服务器。当配置浏览器使用代理服务器时,它会将请求提交到代理服务器,代理服务器再将请求传送到相关web服务器,并将响应返回给浏览器。

  值得注意的是,如果使用代理服务器,HTTP的工作机制会出现两方面的差异:

  • 当浏览器向代理服务器发布HTTP请求时,它会将完整的URL(包括协议前缀http://与服务器主机名称,在非标准URL中,还包括端口号)插入到请求中。代理服务器将提取主机名称和端口,并使用这些信息将请求只想正确的目标web服务器。
  • 当使用HTTPS时,浏览器无法与代理服务器进行SSL握手,浏览器必须将代理作为一个纯粹的TCP级中继,由代理传递浏览器与目标web服务器之间的所有网络数据,并与浏览器进行正常的SSL握手。

9 HTTP身份验证

  HTTP拥有以下机制用户身份验证机制:

  • Basic。这是一种非常简单的身份验证机制,它在请求头中以Base64编码字符串的形式发送用户证书。
  • NTLM。一种质询-响应式机制,它使用某个windows NTLM协议版本。
  • Digest。一种质询-响应式机制,它随同用户证书一起使用一个随机值MD5校验和。

  ❗️❗️❗️因特网上的web应用程序基本很少使用这些身份验证机制。

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

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

相关文章

Linux 1.2.13 -- IP分片重组源码分析

Linux 1.2.13 -- IP分片重组源码分析 引言为什么需要分片传输层是否存在分段操作IP分片重组源码分析ip_createip_findip_frag_createip_doneip_glueip_freeip_expireip_defragip_rcv 总结 本文源码解析参考: 深入理解TCP/IP协议的实现之ip分片重组 – 基于linux1.2.13 计网理论…

2023Android面试,如果想卷请继续。备战金九银十

随着移动互联网的快速发展,Android开发岗位竞争也越来越激烈。作为一名Android程序员,面试是进入理想公司的重要一步。本文将分析市场对Android开发岗位的需求,分析2022年的Android开发岗位面试情况,并总结出历年来常见的面试题目…

MySQL中同比和环比语句如何写?

营收表如下(表名:a)如下图: 营收表 year month money 2021 1 1000 2021 2 1200 2022 1 1300 2022 2 1500 需要算出2022年营收同比与环比: 同比:和去年同月相比(1300-1000/1000*100%&#xff0…

Python类的设计

Python类的设计 # 定义一个闹钟类 class Clock:__cureen_keyNone # 私有成员不能改变和使用def __init__(self, id, price): # 类对象是立即自动执行self.id idself.price pricedef ring(self):import winsound # 内置声音方法winsound.Beep(2000,3000)clock1 Clock(…

自然语言处理学习笔记(六)————字典树

目录 1.字典树 (1)为什么引入字典树 (2)字典树定义 (3)字典树的节点实现 (4)字典树的增删改查 DFA(确定有穷自动机) (5)优化 1.…

Python基础--序列操作/函数

Python基础 1.序列的操作 2.函数 1. 数据类型的具体操作 1.1 序列操作--列表具体操作: #定义列表 listA [] #定义一个空列表 listB [1,2.8,"你好",listA,[1,2,3]] # 访问列表 print(listB)#查看整个列表 print(listB[2])#查看单个…

docker 安装mongodb 虚拟机安装mongodb

生产环境直接安装比较好,以及使用集群环境,本文仅测试交流使用,我用来写分布式im测试使用: nami-im: 分布式im, 集群 zookeeper netty kafka nacos rpc主要为gate(长连接服务) logic (业务&…

MySQL:内置函数、复合查询和内外连接

内置函数 select 函数; 日期函数 字符串函数 数学函数 其它函数 复合查询(多表查询) 实际开发中往往数据来自不同的表,所以需要多表查询。本节我们用一个简单的公司管理系统,有三张 表EMP,DEPT,SALGRADE来演示如何进行多表查询…

设计模式行为型——访问者模式

目录 访问者模式的定义 访问者模式的实现 访问者模式角色 访问者模式类图 访问者模式举例 访问者模式代码实现 访问者模式的特点 优点 缺点 使用场景 注意事项 实际应用 访问者模式的定义 访问者模式(Visitor Pattern)属于行为型设计模式&am…

总结950

7:00起床 7:30~8:00复习单词300个,记忆100个 8:10~9:30数学660,只做了10道题,发现对各知识点的掌握程度不一。有些熟练,有些生疏 9:33~10:25计算机网络课程1h 10:32~12:02继续660,也不知道做了几道 2:32~4:00数据…

Node.js |(四)HTTP协议 | 尚硅谷2023版Node.js零基础视频教程

学习视频:尚硅谷2023版Node.js零基础视频教程,nodejs新手到高手 文章目录 📚HTTP概念📚窥探HTTP报文📚请求报文的组成🐇HTTP请求行🐇HTTP请求头🐇HTTP的请求体 📚响应报文…

阔别三年,领先回归!别克LPGA锦标赛申城十月再启高球盛会

2023年8月4日——2023年金秋十月,阔别中国赛场已久的别克LPGA锦标赛将强势归来,于10月12日至15日在上海旗忠花园高尔夫俱乐部再次拉开帷幕。作为三年来首个回归、同时也是今年国内唯一开赛的国际顶级高尔夫职业赛事,别克LPGA锦标赛将吸引全世…

零代码集成融云连接更多应用

融云是安全、可靠的全球互联网通信云服务商,向开发者和企业提供即时通讯和实时音视频通信云服务。 场景描述: 基于融云的开放api能力,无代码集成融云平台的音视频通话、即时通信、聊天室、短信等业务,使融云连通其它应用。通过A…

Mirror网络库 | 说明

此篇为上文,下篇:Mirror网络库 | 实战 一、介绍 基于UNET,从2014年经过9年实战测试;服务器和客户端是一个项目;使用NetworkBehaviour而不是MonoBehaviour,还有NetworkServer和NetworkClient;Mi…

nodejs安装ffi报错,windows-build-tools安装不成功

首先要确定nodejs的版本 要使用v17.x.x版本的nodejs Index of /dist/latest-v17.x/,才能安装windows-build-tools npm install --global --production windows-build-tools 执行命令 他会去下载很多编译需要用的文件。一方面是python27,另一方面是B…

双周赛110(模拟、枚举+哈希表)

文章目录 双周赛110[2806. 取整购买后的账户余额](https://leetcode.cn/problems/account-balance-after-rounded-purchase/)模拟 [2807. 在链表中插入最大公约数](https://leetcode.cn/problems/insert-greatest-common-divisors-in-linked-list/)模拟 [2808. 使循环数组所有元…

Linux 终端操作命令(2)内部命令分类

Linux 终端操作命令 也称Shell命令,是用户与操作系统内核进行交互的命令解释器,它接收用户输入的命令并将其传递给操作系统进行执行,可分为内部命令和外部命令。内部命令是Shell程序的一部分,而外部命令是独立于Shell的可执行程序…

06-4_Qt 5.9 C++开发指南_MDI应用程序设计

文章目录 1. MDI简介2. 文档窗口类 QFormDoc 的设计3. MDI主窗口设计与子窗口的使用3.1 主窗口界面设计3.2 MDI子窗口的创建与加入3.3 QMdiArea 常用功能函数3.4 MDI的信号 4. 源码4.1 qwmainwindow.h4.2 qwmainwindow.cpp 1. MDI简介 传统的应用程序设计中有多文档界面(Multi…

canal 嵌入式部署 监听binlog

canal 嵌入式部署 背景技术选型canal原理用途嵌入式代码实现引入pom引入工具pommain方法引入常量定义install方法buildCanal方法pull方法printSummaryprintEntry2 总结谢谢 背景 最近发现一个需求,需要监听mysql 数据库里的数据变动, 但由于架构方面的原因, 只能做成单体嵌入式…

7.4 并行连接网路GoogLeNet

由来:吸收了NiN网络的串联网络思想,并在此基础上做了改进 解决的问题:什么样大小的卷积核最合适的问题。使用不同大小的卷积核组合是有利的。 GoogLeNet架构 GoogLeNet的Inception块的架构 上图中的复杂小块的具体内容如下: i…