使用 JavaScript 的 XMLHttpRequest 或 Fetch API 发送 HTTP 请求时,GET 请求和 POST 请求处理参数的方式不同,这与 HTTP 协议的设计有关

news/2025/2/25 12:59:41/文章来源:https://www.cnblogs.com/lyt263/p/18565488

使用 JavaScript 的 XMLHttpRequest 或 Fetch API 发送 HTTP 请求时,GET 请求和 POST 请求处理参数的方式不同,这与 HTTP 协议的设计有关

GET 请求的参数

  • 特点:GET 请求的参数通过 URL 传递。
  • 原因
    1. URL 表现方式:GET 请求的主要目的是从服务器获取资源。URL 是资源的唯一标识,因此 GET 请求的所有参数都附加在 URL 上,作为请求资源的一部分。
    2. HTTP 协议的约定:GET 请求的请求体(body)不用于传递数据。按照规范,GET 请求的主体通常被忽略,即使你在 send() 方法中传递参数,服务器也不会处理。
    3. 浏览器兼容性和缓存机制:浏览器和代理服务器会根据 URL 缓存 GET 请求。通过 URL 传递参数可以方便缓存的使用。

设置 GET 请求参数

XMLHttpRequest 中:

let xhr = new XMLHttpRequest();
xhr.open("GET", "https://example.com/api?param1=value1&param2=value2", true);
xhr.send(); // send() 不包含任何数据
  • 参数被直接拼接到 URL 后的查询字符串(?key=value&key2=value2)。
  • send() 方法传递的数据在 GET 请求中无效,按照规范,GET 请求不会处理请求体。

POST 请求的参数

  • 特点:POST 请求的参数通过 请求体(body)传递。
  • 原因
    1. 请求目的不同:POST 请求的主要目的是将数据发送到服务器,比如表单提交、数据上传等。参数通过请求体发送,更适合传递大量数据或复杂数据。
    2. 协议支持:HTTP 规范允许 POST 请求通过请求体发送数据,并且通常由服务器接收和解析。
    3. 安全性和长度限制:相比于 GET 请求,POST 请求更适合传递敏感数据,因为参数不直接暴露在 URL 中。此外,URL 的长度通常受到限制,而请求体的长度限制较大。

XMLHttpRequest 中:

let xhr = new XMLHttpRequest();
xhr.open("POST", "https://example.com/api", true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify({ param1: "value1", param2: "value2" })); // 参数在请求体中传递

对比总结 

 

为什么 send() 在 GET 请求中不发送数据?

  1. HTTP 协议中规定 GET 请求不需要请求体,send() 方法传递的数据在 GET 请求中会被忽略。
  2. 参数已经通过 open() 方法中的 URL 指定,无需再用 send() 传递。

因此,send() 在 GET 请求中只用于触发请求,不携带数据是符合 HTTP 设计的行为。

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

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

相关文章

IoU已经out了,试试这几个变体:GIoU、DIoU和CIoU介绍与对比分析

这是目标检测领域的首选评估指标。计算两个边界框的IoU时,如果它们有重叠区域,就测量重叠面积,然后除以两个框所覆盖的总面积。你是否曾经训练过一个模型,在评估指标上表现出色,但在实际可视化边界框时,却发现它在许多情况下都失败了?这可能是因为像简单交并比(IoU)这样的标准…

计算机是怎样跑起来的

总结自书籍:https://weread.qq.com/web/reader/b9b324005dd9f0b9b9e6f17k0e6320502c60e65972dc52f#outline?noScroll=10 前提 计算机的三个根本性基础计算机是执行输入、运算、输出的机器计算机的硬件由大量集成电路(IC)组成,每块IC都有许多引脚,用于输入/输出,IC在其内部…

2024-2025-1 20241428张雄一《计算机基础与程序设计》第九周学习总结

学期(如2024-2025-1) 学号20241428 《计算机基础与程序设计》第9周学习总结 作业信息这个作业属于哪个课程 <班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业的目标 操作系统责任、内存与进程管理、分时系统、CPU调度、文件、文件系统、文件保护、磁盘调度…

【CodeForces训练记录】CodeTON Round 9 (Div. 1 + Div. 2, Rated, Prizes!)

训练情况赛后反思 发现自己越来越能猜结论了,连续两题结论猜对了,一把rating上青了。 A题 构造一个数组使得模数互不相同,考虑构造一个模数为 \([0,1,2,3,4,5]\) 的数列,所以一个全是奇数的数列 \([1,3,5,7,9]\) 符合条件,直接输出 \(1 \sim n\) 的奇数即可。 #include &l…

Cellebrite UFED 4PC 7.71 发布下载 - Android 和 iOS 移动设备取证软件

Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件 The Industry Standard for Lawfully Accessing and Collecting Digital Data 请访问原文链接:https://sysin.org/blog/cellebr…

[BJDCTF2020]The mystery of ip 1

[BJDCTF2020]The mystery of ip 1 打开实例,发现flag.php路径,访问显示自己当前的内网iphackerbar添加xff请求头,尝试ip伪造,成功回显判断可能为xff注入,尝试sql的部分注入语句均无效,放弃sql注入,尝试SSTI模板注入 X-Forwarded-For: {1+1}成功回显,存在XFF-SSTI模板注…

[网鼎杯 2020 朱雀组]phpweb 1

[网鼎杯 2020 朱雀组]phpweb 1 打开实例,发现是个php页面,过了一会页面报错,发现参数func=date&p=Y-m-d h:i:s a看着像php传递函数执行的请求,尝试修改func为phpinfo func=phpinfo&p=Y-m-d h:i:s a可以看到参数被过滤了 采用highlight_file显示当前页面源代码,由于…

鸿蒙Next开发实战教程—电影app

最近忙忙活活写了不少教程,但是总感觉千篇一律,没什么意思,大家如果有感兴趣的项目可以私信给幽蓝君写一写。 今天分享一个电影App。这个项目也比较简单,主要是一些简单页面的开发和本地视频的播放以及横竖屏切换。 页面搭建以首页为例,很明显这是一个List页面,不过每一个…

担心360度评估结果隐私泄露怎么办?

当场惊呆!我们有个客户企业的hr反馈,公司内有领导的360评估结果分数比较垃垮。然后向下属施加淫威,从他们手里强制夺去手机看下面人给他的打分情况,毫无底线和节操。 古有邹忌讽齐王纳谏,今有360度评估,面对下属的反馈建议亦或批评,是打击报复还是接受批评与自我批评,…

.NET9 - 新功能体验(三)

.NET9和C#13引入Linq新方法CountBy和AggregateBy、序列化加强、Task.WhenEach方法、TimeSpan新重载、内置Swagger替换为Scalar,提升开发效率和代码可读性。书接上回,我们继续来聊聊.NET9和C#13带来的新变化。01、Linq新方法 CountBy 和 AggregateBy 引入了新的方法 CountBy 和…

用星球助手下载帖子的手把手教程

当我们想要把星球里的帖子和附件下载到本地电脑上慢慢学习时, 一篇一篇下载太麻烦了, 耗时且无聊. 用星球助手就非常方便啦. 打开软件后, 就是这样的界面.点击"新增", 输入星球名字和网页链接. 就像这样.最后, 就是点击"启动"开启一键下载了.帖子, 图片, 附…

通过学习先验增强基于流的生成超分辨率模型

通过学习先验增强基于流的生成超分辨率模型基于流的超分辨率(SR)模型在生成高质量图像方面表现出了惊人的能力。然而,这些方法在图像生成过程中遇到了一些挑战,例如网格伪影、爆炸反转以及由于采样温度不稳定而导致的次优结果。为了克服这些问题,这项工作在基于流的SR模型…