CTF-web基础 HTTP协议

news2025/1/19 2:22:39

基础

HTTP=Hypertext Transfer Protocol 超文本链接协议,他是无状态的(每一次请求都是独立的),发出request发给服务器然后返回responce,现在的版本是1.1版本,默认端口80(https是443),常用8080/3128/8081/9098,如果要去指定端口访问,在后面加上冒号和端口即可。 

我们打开火狐浏览器,输入百度的官网,通过firebug'插件就可以监控浏览器发出去的信息和返回的内容,发送的如下:

这就是http的请求,上面的文字就是HTTP所规定的,包括以下部分:GET(要干嘛),第二行是要去访问的网站,后面的部分统称header。

request

request=动词+url

以下是一个例子

第一行是请求行,http里面有7个动词,get是其中之一。

host是请求的地址,

请求头里面,accept是接收的东西,除此之外还有接受语言,user-agent是使用的浏览器,内容长度。空行后面的即使要请求的参数,多个参数用&隔开。

请求参数两种方法

方法一(get)

url:?参数1=参数值&参数2=参数值(动词时get时)

方法二(post)

request body传参(动词用post)

注意:参数以键值对的方式出现。如:p=12。

请求次数

有的时候我们请求了一个url但是我们会发现有很多请求,这取决于html网页的写法,有没有使用其他资源 ,比如网页只有文本,那一次就可以,但是如果有图片等其他的东西遇到时候还要去再请求。

请求次数太多可能会减慢网页速度,一次需要去合并图片等。

缓存

我们知道当我们在请求的时候会有好多次请求,但是如果我们再去请求一次,会发现请求次数变少了,原因就是在之前的一次请求的时候,我们图片这些就会缓存下来,不需要再去请求一次了。

但是网页还是要去再去请求,因为他的头信息说明了要去重新请求:must-revalidate

但是图片等文件是没有的。我们可以在缓存栏目里面看到我们的文件失效日期

html最好不熬缓存,图片不要去缓存。

http动词

我们在前面的request里面第一个词就是动词,那么除了get还有哪些词呢。

  • GET:‌用于从服务器获取资源,‌可以是单个或多个资源。‌不会对服务端数据产生影响(会影响服务器状态),比较安全,可以被缓存
  • POST:‌用于在服务器新建一个资源。‌提交数据,比如注册账号,支付。
  • PUT:‌用于在服务器更新资源,‌客户端提供改变后的完整资源。‌修改。
  • DELETE:‌用于从服务器删除资源。‌
  • HEAD:‌获取资源的元数据,‌不返回资源本身。‌
  • OPTIONS:‌获取关于资源的哪些属性是客户端可以改变的信息。‌
  • PATCH:‌用于在服务器更新资源,‌客户端提供改变的属性,‌如某个字段+1。‌
  • 注意idempotent是幂等性的意思:多次处理是否会发生变化、
  • Cacheable是缓存的意思。

GET和POST的区别

GET和POST是HTTP协议中定义的两种不同的请求方法,‌它们在多个方面存在显著的区别。‌

  • 数据传输方式:‌

    • GET方法将数据以查询字符串的形式附加在URL之后进行传输,‌而POST方法则将数据放在请求体中发送。‌这意味着GET请求的参数直接暴露在URL中,‌而POST请求的参数对用户是不可见的。‌
  • 数据长度限制:‌

    • GET请求对URL的长度有限制,‌这通常限制了能够通过GET方法传输的数据量。‌不同浏览器和服务器对URL长度的限制不同,‌一般在2KB到8KB之间。‌相比之下,‌POST请求没有对请求体长度做特别限制,‌可以传输大量数据。‌
  • 安全性:‌

    • GET请求的参数是明文传输的,‌会显示在url里面,因此不适合传输敏感信息,‌如密码等。‌而POST请求将参数放在请求体(request body)中,‌相对于GET请求更加安全,‌可以传输敏感信息。
  • 缓存处理:‌

    • GET请求可以被缓存,‌因为GET请求是幂等的,‌即多次相同的GET请求对服务器的状态没有影响,‌可以利用缓存来提高性能。‌相反,‌POST请求不能被缓存,‌因为POST请求可能对服务器的状态产生影响,‌每次请求都需要重新获取最新的数据。‌
    • .GET请求刷新服务器或者回退没有影响,POST请求回退时会重新提交数据请求。
  • 幂等性:‌

    • GET请求是幂等的,‌即多次相同的GET请求对服务器的状态没有影响。‌而POST请求不是幂等的,‌多次相同的POST请求可能会改变服务器的数据或状态。‌
  • 使用场景:‌

  • GET方法适合用于获取资源,‌例如获取页面、‌图片、‌视频等,‌因为它不会对服务器的状态进行修改,‌并且能够被缓存,‌提高页面加载的速度。‌而POST方法适合用于提交数据,‌例如提交表单、‌上传文件等,‌因为它可以传递大量数据,‌并且相对更加安全。‌

发送请求

GET

浏览器默认get,get提交在url加上?然后传参。

POST

  1. 表单提交是最常见的 POST 数据方式之一。通过在 HTML 表单中设置 method="post",在用户提交表单时,表单数据会作为键值对的形式以 application/x-www-form-urlencoded格式发送到服务器。数据会被编码为 URL 参数,例如 key1=value1&key2=value2。服务器端可以通过解析请求体中的数据来获取表单字段的值。

  2. JSON 数据(JSON Data):

    JSON 数据是一种常见的数据交换格式,可以用于 POST 请求中。在这种方式下,客户端将数据作为 JSON 对象发送给服务器。请求的 Content-Type头部应设置为 application/json,请求体中包含一个 JSON 对象,服务器端可以解析 JSON 数据并进行相应的处理。

  3. XML 数据(XML Data):

    类似于 JSON 数据,XML 数据也可以用于 POST 请求。在这种方式下,客户端将数据作为 XML 文档发送给服务器。请求的 Content-Type头部应设置为 application/xml,请求体中包含一个 XML 文档,服务器端可以解析 XML 数据并进行相应的处理。

  4. 文件上传(Multipart Form Data):

    如果需要上传文件,可以使用文件上传方式。这种方式下,请求的 Content-Type头部应设置为 multipart/form-data,请求体中的数据被分割成多个部分,每个部分都有自己的头部和内容,其中包括文件数据和其他表单字段的数据。服务器端可以解析请求体中的各个部分,获取文件和其他字段的数据。

  5. 借助工具:借助hackbar等工具进行提交,

响应(response)

例子如下

200是ok的意思

LAST-Modified是最后响应时间

常见状态码

HTTP状态码用于表示服务器对客户端请求的处理结果。不同的状态码可以帮助开发者和用户理解请求处理的结果。以下是一些常用的HTTP状态码及其含义:

1xx(信息性状态码):
100 Continue**:初始部分已收到,客户端应继续发送请求的其余部分。
101 Switching Protocols**:服务器正在切换协议。

2xx(成功状态码)
200 OK**:请求成功,服务器返回请求的资源。
201 Created**:请求成功并创建了新资源。
204 No Content**:请求成功,但没有返回内容。

3xx(重定向状态码)
301 Moved Permanently**:请求的资源已被永久移动到新位置。
302 Found**:请求的资源临时移动到其他位置。
304 Not Modified**:资源未被修改,可以使用缓存的版本。

4xx(客户端错误状态码)
400 Bad Request**:请求无效,服务器无法理解。
401 Unauthorized**:请求未经授权,需要用户验证。
403 Forbidden**:服务器拒绝请求,即使有认证信息也不允许访问。
404 Not Found**:请求的资源未找到。

5xx(服务器错误状态码)
500 Internal Server Error**:服务器内部错误,无法完成请求。
502 Bad Gateway**:作为网关或代理的服务器收到无效响应。
503 Service Unavailable**:服务器暂时无法处理请求(通常是由于过载或维护)。

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

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

相关文章

ubuntu上安装HBase伪分布式-2024年08月04日

ubuntu上安装HBase伪分布式-2024年08月04日 1.HBase介绍2.HBase与Hadoop的关系3.安装前言4.下载及安装5.单机配置6.伪分布式配置 1.HBase介绍 HBase是一个开源的非关系型数据库,它基于Google的Bigtable设计,用于支持对大型数据集的实时读写访问。HBase有…

rust读取csv文件,匹配搜索字符

1.代码 use std::fs::File; use std::io::{BufRead, BufReader}; use regex::{Regex};fn main() {let f File::open("F:\\0-X-RUST\\1-systematic\\ch2-fileRead\\data\\test.csv").unwrap();let mut reader BufReader::new(f);let re Regex::new("45asd&qu…

Stable Diffusion绘画 | 文生图-采样器使用说明

webui 1.9.3版本中,采样器分为“采样方法”、“调度类型”两个选项。 因为采样器选项多,所以需要做一个筛选,保留图像生成效果好的采样器。 老派采样器 可以选择砍掉的采样器: DDIMPLMS 最为推荐保留的采样器: Eul…

Python 实现股票指标计算——LON

LON - 铁龙长线 1 公式 LC : REF(CLOSE,1); VID : SUM(VOL,2)/(((HHV(HIGH,2)-LLV(LOW,2)))*100); RC : (CLOSE-LC)*VID; LONG : SUM(RC,0); DIFF : SMA(LONG,10,1); DEA : SMA(LONG,20,1); LON : DIFF-DEA; LONMA : MA(LON,10); LONT : LON, COLORSTICK; 2 数据准备…

03 库的操作

目录 创建查看修改删除备份和恢复查看连接情况 1. 创建 语法 CRATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] …] create_specification:  CHARACTER SET charset_name  CPLLATE collation_name 说明: 大写的标识关键…

C语言函数传参

文章目录 🍊自我介绍🍊函数传参之值传递🍊函数传参之地址传递🍊函数传参之数组 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞关注评论收藏(一键四连)哦~ 🍊自我介绍…

SQL中的窗口函数

1.窗口函数简介 窗口函数是SQL中的一项高级特性,用于在不改变查询结果集行数的情况下,对每一行执行聚合计算或者其他复杂的计算,也就是说窗口函数可以跨行计算,可以扫描所有的行,并把结果填到每一行中。这些函数通常与…

注入类漏洞挖掘指南

1. 注入攻击类 1.1 SQL注入 漏洞描述: 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意…

elasticsearch的学习(一):使用postman实现增删改查

简介: elasticsearch的基本的概念和通过postman来实现增删改查 elasticsearch 一个分布式的,restful风格的搜索和数据分析引擎,可以近乎实时的存储,检索数据,具有高扩展性,可以扩展到上百台服务器&#…

使用.NET NativeAOT模式开发hyper-v平台uefi上windbg调试引擎心得

引用 这篇文章的目的是介绍一款实验性的Uefi项目基于.NET NativeAOT模式实现的运行在Windows Hyper-V虚拟机上的windbg调试引擎开发心得 文章目录 引用简介NativeAOT模式动态接口的多态继承绑定实现方式分析NativeAOT模式运行时栈回溯实现方式分析模拟vcruntime实现的c异常捕获…

江科大/江协科技 STM32学习笔记P17

文章目录 一、TIM输入捕获输入捕获与输出比较的关系频率测量测频法测周法 输入捕获的电路异或门的执行逻辑 输入捕获通道主从触发模式输入捕获基本结构PWMI基本结构输入捕获模式测频率main.c 输入捕获模式测占空比main.c 一、TIM输入捕获 输入捕获与输出比较的关系 在输出比较中…

C语言第13篇

1.下面程序是计算n个数的平均值,请填空.______ #include<stdio.h> void main( ) { int i,n; float x,avg0.0; scanf("%d",&n); for(i0;i<n;i) { scanf("%f",&x); avgavg______; } avg________; printf("avg%f\n",avg); } A) …

[Git][分支管理][上]详细讲解

目录 1.理解分支2.创建分支3.切换分支4.合并分支5.删除分支 1.理解分支 感性理解&#xff1a;分支可以理解为平行宇宙&#xff0c;但是在用户需要的时候&#xff0c;可以将两个平行宇宙合并&#xff0c;此时两个平行宇宙的效果将会"叠加"理性理解&#xff1a;每次提…

树、二叉树、森林的转换

一、树和二叉树的转换 1、 2、 二、森林二叉树的转换 1、 2、

springboot医嘱管理系统-计算机毕业设计源码16053

摘 要 随着医疗信息化水平的不断提升&#xff0c;医嘱管理作为医院日常运营中不可或缺的一环&#xff0c;其重要性日益凸显。传统的医嘱管理方式往往存在效率低下、易出错等问题&#xff0c;已无法满足现代医疗服务的快速发展需求。因此&#xff0c;基于Spring Boot框架开发的…

MySQL-InnoDB引擎

目录 逻辑存储结构 架构 概述 内存结构 Buffer Pool&#xff08;缓冲池&#xff09; Change Buffer&#xff08;更改缓冲区&#xff09; Adaptive Hash Index&#xff08;自适应hash索引&#xff09; Log Buffer&#xff08;日志缓冲区&#xff09; 磁盘结构 System T…

基于CUDA12.1+CUDNN8.9+PYTORCH2.3.1,实现自定义数据集训练

目录 0 结果预览 1 核心点 2 参考链接 0 结果预览 1 核心点 yolo命令行CL需要将虚拟环境的yolo程序加入系统路径。 遇到conda install 失效问题&#xff0c;重建新的虚拟环境&#xff0c;再进行安装。 whl可以下载好后再安装。 pip install F:\tool\ai\torch-2.3.1cu…

使用VM安装K8S

VM 部署K8S 前言 本次使用VM搭建k8s&#xff0c;由于搭建流程复杂&#xff0c;在此记录。 需提前安装好VM&#xff08;可参考&#xff1a;VM安装&#xff09;&#xff0c;起两台虚拟机(模拟master和worker)&#xff0c;且VM里已安装好Docker&#xff08;可参考&#xff1a;D…

GO语言 4 收集器

劳苦功高的数组 声明数组并访问其元素 以下数组不多不少正好包含 8 个元素 var planets [8]string同一个数组中的每个元素都具有相同的类型&#xff0c;比如以上代码就是由 8 个字符串组成&#xff0c;简称字符串数组。 数组的长度可以通过内置的 len 函数确定。在声明数组…

03。仓颉程序结构

1&#xff0c;什么是 仓颉的“源代码”、“源文件”&#xff1f; ~通常以 “ .cj ” 为后缀的文本文件里面包含的仓颉代码&#xff0c;我们称为仓颉源代码、源文件。 / / test.txt --------------- test.cj 2&#xff0c;什么是 “ 作用域” &#xff1f;“嵌套作…