当前位置: 首页 > news >正文

XSS学习1之http回顾

1. HTTP的基本结构与工作流程

HTTP是一个请求-响应协议,基于客户端与服务器之间的交互。每次用户通过浏览器请求某个资源时,HTTP协议都会完成一系列的步骤。

HTTP请求:

HTTP请求由以下几个部分构成:

  • 请求行

    • 请求方法:如GET、POST、PUT、DELETE等,指示客户端希望对服务器上的资源执行什么操作。

    • 请求的URL:如https://www.example.com/index.html,指示客户端请求的资源路径。

    • HTTP版本:如HTTP/1.1,说明客户端和服务器之间使用的协议版本。

  • 请求头:提供关于请求的附加信息,如:

    • User-Agent:浏览器的类型。

    • Accept:客户端能够处理的响应内容类型。

    • Authorization:用于认证的凭证(如果有的话)。

    • Cookie:包含客户端存储的Cookies。

  • 请求体(可选):当客户端发送数据时(如表单提交或上传文件),请求体中包含数据内容。通常出现在POST请求中。

HTTP响应:

HTTP响应由以下几个部分构成:

  • 状态行

    • HTTP版本:响应使用的HTTP版本,如HTTP/1.1

    • 状态码:指示服务器处理请求的结果,分为不同类别,如2xx表示成功,4xx表示客户端错误,5xx表示服务器错误等。

    • 状态描述:一个简短的说明,帮助客户端理解状态码的含义。

  • 响应头:提供关于响应的附加信息,例如:

    • Content-Type:指定响应体的类型(如text/htmlapplication/json)。

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

    • Set-Cookie:设置新的cookie,客户端可保存并在后续请求中使用。

    • Cache-Control:指示缓存机制的行为。

  • 响应体:实际的资源数据,如HTML页面、图片、JSON数据等。

2. HTTP状态码详解

状态码分为5类:

  • 1xx(信息性状态码):表示请求已经接收,继续处理(例如:100 Continue)。

  • 2xx(成功状态码):表示请求已成功处理(例如:200 OK,201 Created)。

  • 3xx(重定向状态码):表示需要进一步的操作才能完成请求(例如:301 Moved Permanently,302 Found)。

  • 4xx(客户端错误状态码):表示请求错误,客户端可能需要修改请求(例如:404 Not Found,403 Forbidden)。

  • 5xx(服务器错误状态码):表示服务器处理请求时出现了错误(例如:500 Internal Server Error,502 Bad Gateway)。

3. HTTP方法与语义

常见的HTTP方法:
  • GET:请求资源,数据通过URL传输,通常用于查询资源。GET请求应是安全的和幂等的,即它不会修改服务器上的数据。

  • POST:向服务器发送数据,通常用于提交表单或上传文件。POST请求可以产生副作用(例如修改数据库内容)。

  • PUT:更新现有资源,通常通过传送完整的资源信息来替代现有资源。

  • DELETE:删除指定资源。

  • PATCH:对资源进行部分更新。

  • HEAD:与GET类似,但不返回响应体,仅返回响应头。

  • OPTIONS:请求获取服务器支持的HTTP方法,常用于跨域请求中的预检请求。

4. HTTP的连接机制:无状态与持久连接

HTTP协议是“无状态的”,这意味着每次请求都是独立的,服务器不会保存任何关于客户端请求的状态信息。因此,每次请求都必须携带完整的上下文信息(如Cookies)。

1.1 无状态的特点:
  • 服务器处理请求时不会记住任何过去的请求信息。

  • 每次请求都必须包含足够的上下文信息,确保服务器能够理解并正确处理该请求。

1.2 持久连接(HTTP/1.1及以上)

在HTTP/1.0中,每个请求和响应都需要重新建立TCP连接,这样效率较低。HTTP/1.1引入了持久连接(或称为“连接复用”),即在一个TCP连接中可以发送多个请求和响应。持久连接使用Connection: keep-alive头来告知服务器和客户端保持连接,不必每次都建立新的连接。

1.3 管道化(Pipelining)

HTTP/1.1还支持请求管道化,即多个请求可以同时在一个连接上发出,而无需等待每个请求的响应。这在HTTP/1.1中并未广泛使用,因为大多数代理服务器和浏览器并不支持完全的管道化。

5. HTTPS:加密的HTTP协议

HTTP是明文传输协议,数据可以被中间人监听或篡改。因此,HTTP在很多场合并不够安全。为此,HTTPS(HyperText Transfer Protocol Secure)应运而生,它通过SSL/TLS协议对HTTP请求和响应进行加密,提供以下优势:

  • 数据加密:确保传输的数据不会被中途拦截或篡改。

  • 身份认证:通过证书验证服务器身份,防止欺骗网站。

  • 数据完整性:确保数据在传输过程中不会被篡改。

HTTPS协议基于公钥和私钥加密机制,采用三阶段的握手过程来建立安全连接:客户端验证服务器身份、生成会话密钥、使用该密钥加密数据。

6. HTTP/2与HTTP/3的演进

随着Web应用对性能的要求越来越高,HTTP也经历了几次重要的演进,尤其是HTTP/2和HTTP/3。

6.1 HTTP/2

HTTP/2通过采用多路复用(Multiplexing)和流控制技术,显著提高了数据传输的效率:

  • 多路复用:允许多个请求和响应在同一TCP连接中并行传输,消除了HTTP/1.x中队头阻塞的问题。

  • 头部压缩:通过HPACK算法减少头部信息的传输大小,减少网络带宽占用。

  • 服务器推送:允许服务器主动将资源推送给客户端,减少等待时间。

6.2 HTTP/3

HTTP/3基于QUIC(Quick UDP Internet Connections)协议,它是一个基于UDP的传输协议。相比TCP,QUIC有以下优势:

  • 减少连接建立时间:QUIC支持0-RTT连接建立,极大地缩短了延迟。

  • 更好的抗丢包能力:QUIC在数据丢失时不会像TCP那样全局阻塞,从而提高了网络效率,尤其在移动网络上表现突出。

  • 内建加密:QUIC协议本身支持TLS加密,提升了安全性。

7. 缓存与代理

HTTP协议还涉及到缓存代理的概念,以提高性能和降低带宽消耗。

  • 缓存控制:通过HTTP头(如Cache-ControlETag)来控制资源的缓存策略。

  • 代理服务器:充当客户端与服务器之间的中介,缓存常用资源,减少请求次数,或进行负载均衡。

相关文章:

XSS学习1之http回顾

1. HTTP的基本结构与工作流程 HTTP是一个请求-响应协议,基于客户端与服务器之间的交互。每次用户通过浏览器请求某个资源时,HTTP协议都会完成一系列的步骤。 HTTP请求: HTTP请求由以下几个部分构成: 请求行: 请求方…...

小迪抓包技术算法加密(6-9天)

抓包技术 https://blog.csdn.net/2301_81015455/article/details/147014382 算法加密入门(了解) 在实际测试中安全性高一些得采用得都是AES等高安全加密,遇到这种,放弃你啥都不知道测个毛啊,所以直接run!!! 大部分解密时碰撞式…...

Tkinter与ttk模块对比:构建现代 Python GUI 的进化之路

在 Python GUI 开发中,标准库 tkinter 及其子模块 ttk(Themed Tkinter)常被同时使用。本文通过功能对比和实际案例,简单介绍这两个模块的核心差异。 1. 区别 Tkinter:Python 标准 GUI 工具包(1994年集成&…...

【数据结构入门训练DAY-18】信息学奥赛一本通T1331-后缀表达式的值

文章目录 前言一、题目二、解题思路总结 前言 本次训练内容: 栈的复习。栈模拟四则运算计算问题的练习。训练解题思维。 一、题目 从键盘读入一个后缀表达式(字符串),只含有0-9组成的运算数及加()、减…...

时序预测 | Transformer-LSTM-SVM时间序列预测(Matlab完整源码和数据,适合基础小白研究)

时序预测 | Transformer-LSTM-SVM时间序列预测(Matlab完整源码和数据,适合基础小白研究) 目录 时序预测 | Transformer-LSTM-SVM时间序列预测(Matlab完整源码和数据,适合基础小白研究)效果一览基本介绍代码…...

【HarmonyOS 5】makeObserved接口详解

【HarmonyOS 5】makeObserved接口详解 一、makeObserved接口是什么? makeObserved 接口(API version 12 起可用)用于将非观察数据转为可观察数据,适用于三方包类、Sendable 装饰的类、JSON.parse 返回的对象、collections.Array…...

色谱图QCPColorMap

一、QCPColorMap 概述 QCPColorMap 是 QCustomPlot 中用于绘制二维颜色图的类,可以将矩阵数据可视化为颜色图(热力图),支持自定义色标和插值方式。 二、主要属性 属性类型描述dataQCPColorMapData存储颜色图数据的对象interpol…...

【数据结构_12】二叉树(4)

一、二叉树的层序遍历 思路:可以按照先序的方式来遍历这个树,递归的时候,给递归方法,加上辅助的参数,level表示当前层数,递归过程中,根据level的值,决定当前整个节点要放到哪个list中…...

HCIA-Datacom高阶:vlan、vlanif、单臂路由、静态路由、ospf综合实验

本实验拓扑图如下:实验包含 AR1、AR2、AR3 路由器,LSW1(三层交换机)、LSW2、LSW3 交换机,以及 PC1-4 和 Server1。AR1 与 LSW2 通过单臂路由连接,AR2 与 AR3、LSW1 构成 OSPF 网络,AR1 与 AR2 间…...

HTTP 1.0 和 2.0 的区别

HTTP 1.0 和 2.0 的核心区别体现在性能优化、协议设计和功能扩展上,以下是具体对比: 一、核心区别对比 特性HTTP 1.0HTTP 2.0连接方式非持久连接(默认每次请求新建 TCP 连接)持久连接(默认保持连接,可复用…...

如何一键批量删除多个 Word 文档中的页眉和页脚

在工作中,许多 Word 文档的页眉页脚中包含公司名称、Logo、电话等信息,用于对外宣传。但有时我们需要批量删除这些页眉页脚信息,尤其当信息有误时,手动逐个删除会增加工作量,导致效率低下。本文将介绍一种便捷的方法&a…...

关于编译树莓派内核系统的总结

1.首先获取官方的内核系统源码: 然后在源码根目录执行命令: 🌟ARCHarm64 CROSS_COMPILEaarch64-linux-gnu- KERNELkernel8 make bcm2712_defconfig (注意这里的是树莓派5的64位的) 🌟ARCHarm CROSS_COM…...

AIGC赋能插画创作:技术解析与代码实战详解

文章目录 一、技术架构深度解析二、代码实战:构建AIGC插画生成器1. 环境配置与依赖安装2. 模型加载与文本提示词构建3. 图像生成与参数调优4. 风格迁移与多模型融合 三、进阶技巧:参数调优与效果增强四、应用场景代码示例1. 游戏角色设计2. 广告海报生成…...

平衡二叉树(leetcode刷题)

题目描述: 给定一个二叉树,判断它是否是 平衡二叉树 (平衡二叉树 是指该树所有节点的左右子树的高度相差不超过 1。) 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:true示例 2&#xff1…...

【数据结构 · 初阶】- 带环链表

目录 一.基本结构 二.判断一个单链表带不带环 三.2个问题 1.为什么 slow 走 1 步,fast 走 2 步,他们会相遇,会不会错过?请证明。 2.为什么 slow 走 1 步,fast 走 X 步 ( X > 3 ),他们会相遇&#x…...

ClickHouse简介

OLAP与ClickHouse的定位 OLAP的核心概念 OLTP:服务于高并发、低延迟的短事务操作(如银行转账、订单支付),强调数据的增删改查(CRUD)和事务一致性(ACID)。 OLAP:专注于大…...

强制重装及验证onnxruntime-gpu是否正确工作

#工作记录 我们经常会遇到明明安装了onnxruntime-gpu或onnxruntime后,无法正常使用的情况。 一、强制重新安装 onnxruntime-gpu 及其依赖 # 强制重新安装 onnxruntime-gpu 及其依赖 pip install --force-reinstall --no-cache-dir onnxruntime-gpu1.18.0 --extra…...

分布自定义shell脚本(详写)附带全代码

涉及知识全排列 常见指令 小知识点 操作系统 什么是进程 进程控制 步骤 1:项目准备 在开始编写代码之前,你需要创建一个新的项目文件夹,并在其中创建一个 .cpp 文件,例如 my_shell.cpp。同时,确保你已经安装了 C…...

windows拷贝文件脚本

1、新建脚本文件xxx.bat,名字任意,后缀未.bat即可,将以下内容拷贝进去,修改src和des为自己文件的目录即可。 echo off :: 设置字符集为UTF-8,命令窗口能正确显示中文字符。 chcp 65001 rem 读取当前目录并进入当前目…...

Arduino编译和烧录STM32——基于J-link SWD模式

一、安装Stm32 Arduino支持 在arduino中添加stm32的开发板地址:https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json 安装stm32开发板支持 二、安装STM32CubeProgrammer 从stm32网站中安装:https://ww…...

Java表达式2.0

1 .数据类型转换 自动类型转换的规则 自动类型转换遵循一定的规则,这些规则确保了转换的合理性和安全性。以下是自动类型转换的主要规则: 容量小的类型自动转换为容量大的类型 Java中,数据类型的容量从小到大依次为:byte → shor…...

【概率论,算法】排列的峰值期望

Surtr1 的珂学难题 题目链接:https://ac.nowcoder.com/acm/contest/107965/E 给定一个长度为 n n n 的排列 p p p,排列中任一位置如果满足以下条件,则称该位置为 峰值: 位置 1:若存在元素,满足 p [ 1 ] > p […...

清理C盘组合拳:最高释放空间80GB+

分享一套系统化的C盘清理方案,涵盖从基础清理到深度优化的8个关键步骤,结合安全性与效率,可快速释放5-50GB空间: 一、精准定位空间占用源(必备工具) 空间可视化分析 使用 TreeSize Free 或 WizTree 扫描C…...

容器中的对象切片问题

C 容器(如 std::vector、std::list 等) 通常存储对象的副本,而非指向对象的指针。因此,当与继承结合使用时,可能导致 切片(Object Slicing) 问题,即仅存储基类部分,丢失派…...

SpringBoot编写单元测试

pom.xml引入单元测试的坐标 <!--单元测试坐标--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>编写单元测试类 测试类…...

二、在springboot 中使用 AIService

在上一篇文章中&#xff0c;我们介绍了如何使用langchain4j实现简单的问答功能&#xff0c;本篇文章我们将介绍如何在springboot中使用AIService。 1.实现原理 先看下AiService注解所在的依赖langchain4j-spring-boot-starter中包含什么内容&#xff1a; 1.1 event.AiServi…...

拼多多面经,暑期实习Java一面

项目中的设计模式 mysql连接过程&#xff0c;索引&#xff0c;分库分表场景&#xff0c;路由策略 redis使用场景&#xff0c;分片集群怎么搭建与路由&#xff0c;数据一致性 分布式锁怎么用的&#xff0c;具体使用参数 线程池怎么用的&#xff0c;过程 sql having 分布式事务 如…...

Function calling LLMs 的 MCP:AI开发的双剑合璧

🧠 向所有学习者致敬! “学习不是装满一桶水,而是点燃一把火。” —— 叶芝 我的博客主页: https://lizheng.blog.csdn.net 🌐 欢迎点击加入AI人工智能社区! 🚀 让我们一起努力,共创AI未来! 🚀 在 MCPs 成为主流(或者像现在这样火得一塌糊涂)之前,大多数 AI …...

数字系统与编码

1. 数字系统&#xff08;Number Systems&#xff09; 1.1 常见数字系统 系统基数符号集示例应用场景二进制20, 11010计算机底层电路、数据存储八进制80-717Unix文件权限&#xff08;如chmod 755&#xff09;十进制100-942日常计算十六进制160-9, A-F0x1F内存地址、颜色编码&a…...

Pytorch实战

1、安装 安装 conda, Python工具大全&#xff0c;方便管理多个 Python 环境&#xff0c;必须选择跟自己环境配套的版本。 https://www.anaconda.com 网速慢的&#xff0c;可以参考国内源&#xff0c;也可以去这里看看&#xff1a; torch PyPI Index of /anaconda/miniconda…...

如何高效利用呼叫中心系统和AI语音机器人

要更好地使用呼叫中心系统和语音机器人&#xff0c;需要结合两者的优势&#xff0c;实现自动化、智能化、高效率的客户服务与业务运营。以下是优化策略和具体实践方法&#xff1a; 一、呼叫中心系统优化 1. 智能路由与IVR优化 智能ACD&#xff08;自动呼叫分配&#xff09; …...

LeetCode[232]用栈实现队列

思路&#xff1a; 一道很简单的题&#xff0c;就是栈是先进后出&#xff0c;队列是先进先出&#xff0c;用两个栈底相互对着&#xff0c;这样一个队列就产生了&#xff0c;右栈为空的情况&#xff0c;左栈栈底就是队首元素&#xff0c;所以我们需要将左栈全部压入右栈&#xff…...

using用法整理

using 的极简新手教程&#xff0c;用最直白的语言和代码解释&#xff1a; 美图美图 一、核心作用&#xff1a;给类型起别名 目的&#xff1a;让复杂类型名变短、变好记。 例子&#xff1a; // 原名&#xff1a;std::vector<std::string> // 起个别名就叫 StringList…...

《猎豹夕阳》

年少时很喜欢的一篇文章&#xff0c;曾和挚友一遍又一遍的记诵&#xff0c;今天又偶然遇到他&#xff0c;转载如下&#xff1a; 我第一次见到它&#xff0c;是在风雪的夜里。我不会抱怨这种天气&#xff0c;因为我是个优秀的登山探险者&#xff0c;我必须在这种天气下工作。我…...

【AI训练环境搭建】在Windows11上搭建WSL2+Ubuntu22.04+Tensorflow+GPU机器学习训练环境

一、安装Ubuntu 拿到该文件Ubuntu-22.04.tar 通过wsl导入该虚拟机镜像&#xff0c;然后查看wsl虚拟机列表。 wsl --import Ubuntu-22.04-tensorflow D:\wsl-data\Ubuntu-22.04-tensorflow D:\wsl-data\temp\Ubuntu-22.04.tarwsl -l 进入虚拟机 wsl -d Ubuntu-22.04-tensorfl…...

如何轻松实现用户充值系统的API自动化测试

在现代软件开发中&#xff0c;API&#xff08;应用程序编程接口&#xff09;作为连接不同系统和模块的关键组件&#xff0c;其重要性日益凸显。随着软件应用的互联性不断增强&#xff0c;API的数量和复杂度也在不断增加。传统的API测试方法面临着诸多挑战&#xff1a; 1.手动测…...

Python 一等函数( 高阶函数)

高阶函数 接受函数为参数&#xff0c;或者把函数作为结果返回的函数是高阶函数&#xff08;higherorder function&#xff09;。map 函数就是一例&#xff0c;如示例 5-2 所示。此外&#xff0c;内置函 数 sorted 也是&#xff1a;可选的 key 参数用于提供一个函数&#xff0c…...

用于手部康复设备的TinyML语音分类嵌入式人工智能模块

论文标题 英文标题&#xff1a;TinyML Speech Classification Embedded AI Module for Hand Rehabilitation Device 中文标题&#xff1a;用于手部康复设备的 TinyML 语音分类嵌入式人工智能模块 作者信息 Arkorn Numsomran&#xff1a;Triam Udom Suksa Pattanakarn Suvarna…...

【HarmonyOS 5】VisionKit人脸活体检测详解

【HarmonyOS 5】VisionKit人脸活体检测详解 一、VisionKit人脸活体检测是什么&#xff1f; VisionKit是HamronyOS提供的场景化视觉服务工具包。 华为将常见的解决方案&#xff0c;通常需要三方应用使用SDK进行集成。华为以Kit的形式集成在HarmoyOS系统中&#xff0c;方便三方…...

Linux操作系统--进程的创建和终止

目录 1.进程创建 1.1fork()函数初识 1.2写时拷贝 1. 提升系统效率 2. 隔离错误影响 3. 支持并行计算 2.进程终止&#xff1a; 2.1进程退出场景&#xff1a; 2.2进程常见退出方法&#xff1a; 2.3_exit()系统调用接口 2.4exit函数 2.5return退出 1.进程创建 1.1for…...

算法分析传输加密数据格式密文存储代码混淆逆向保护

代码混淆 一.基本概念java的bytecode很容易通过JAD等反编译工具还原出源代码。这样势必不满足安全的定义。如何一定程度上保护需要防止被反编译的源代码呢&#xff1f;混淆&#xff08;obfuscate&#xff09;技术注意&#xff1a;用obfuscate防盗版是根本不可能&#xff0c;连汇…...

从事计算机视觉需要掌握哪些知识

目录 基础数学知识 计算机科学基础 传统计算机视觉知识 机器学习与深度学习知识 其他知识 计算机视觉是一门让计算机从图像或视频中获取有意义信息的跨学科领域&#xff0c;从事该领域需要掌握多方面的知识&#xff0c;以下详细介绍&#xff1a; 基础数学知识 线性代数 &…...

Android Studio 中 Drawable 详细全解

文章目录 一、Drawable 概述二、Drawable 类型详解1. 位图 Drawable (BitmapDrawable)2. 矢量 Drawable (VectorDrawable)3. 形状 Drawable (ShapeDrawable)4. 图层 Drawable (LayerDrawable)5. 状态列表 Drawable (StateListDrawable)6. 级别列表 Drawable (LevelListDrawable…...

【实战中提升自己】内网安全部署之端口隔离与MAC地址认证

1 1拓扑 「模拟器、工具合集」复制整段内容 链接&#xff1a;https://docs.qq.com/sheet/DV0xxTmFDRFVoY1dQ?tab7ulgil 1 端口隔离技术部署 [boss]port-group 1 [boss-port-group-1]port-isolate enable 说明&#xff1a;这里有几个地方不需要部署…...

Linux 420 find stat touch tree scp crontab

准备安装CentOSstream https://blog.csdn.net/s_alted/article/details/117739735 官网 CentOS 9 “Couldn’t open file /mnt/repodata/repomd.xml” deepseek 下载成功 树状 另一台虚拟机...

基于 Vue3 + ECharts + GeoJson 实现区域地图钻取功能详解

文章目录 前言一、实现步骤1. 项目初始化2. 准备GeoJson数据3. 创建地图组件4. 创建主页面组件5. 使用组件 二、功能亮点三、性能优化建议四、常见问题解决五、结语六、实战demo七、资源下载 前言 在数据可视化领域&#xff0c;地图展示是一种非常直观的表现形式。而地图钻取&…...

算法题(129):二维前缀和

审题&#xff1a; 本题需要我们将q组矩阵的和打印出来 思路&#xff1a; 方法一&#xff1a;二维前缀和 由于本题使用暴力的模拟方法运行次数高达1e11&#xff0c;会超时&#xff0c;所以我们采用运行次数在1e6的二维前缀和来解题 第一步&#xff1a;前缀和的求法 x i&#xf…...

NEAT 算法解决 Lunar Lander 问题:从理论到实践

NEAT 算法解决 Lunar Lander 问题:从理论到实践 0. 前言1. 定义环境2. 配置 NEAT3. 解决 Lunar lander 问题小结系列链接0. 前言 在使用 NEAT 解决强化学习问题一节所用的方法只适用于较简单的强化学习 (reinforcement learning, RL) 环境。在更复杂的环境中使用同样的进化解…...

Arduino示例代码讲解:Project 07 - Keyboard 键盘

Arduino示例代码讲解:Project 07 - Keyboard 键盘 Project 07 - Keyboard 键盘程序功能概述功能:硬件要求:输出:代码结构全局变量`setup()` 函数`loop()` 函数读取电位器值:打印电位器值:播放音调:运行过程注意事项Project 07 - Keyboard 键盘 /*Arduino Starter Kit e…...

4.凸包-Graham Scan

Graham Scan:Algorithm Preprocessing 根据角度进行排序 Graham Scan 例子 例2 Graham Scan:Correctness Left Turn/right Trun 下一个点出现的两种情况&#xff1a;非蓝即绿 Presorting 预排序很重要&#xff1a;否则所有的点都会满足 to-left-test BackTracks算法复杂度 …...