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

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

时间:2024-11-24 10:22:27浏览次数:4  
标签:XMLHttpRequest 请求 GET URL send 参数 HTTP

使用 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 设计的行为。

标签:XMLHttpRequest,请求,GET,URL,send,参数,HTTP
From: https://www.cnblogs.com/lyt263/p/18565488

相关文章

  • UniversalMediaServer DLNA&Upnp & http 媒体服务
    UniversalMediaServer是一个强大的媒体服务,支持DLNA,Upnp,http协议说明UniversalMediaServer使用了ffmpeg,mediainfo,opensubtitles,crowdin,mencoder,tsmuxer,avisynth,vlc等开源技术,支持比较多的媒体格式,实际上DLNA协议在无线投屏领域使用的也比较多参考资料https://github.com/......
  • RocketMQ消息者PULL请求模式拉取消息
    引言RocketMQ消费者PULL请求模式拉取消息,是通过消费者端与服务端Broker的多个线程进行配合,做到消息拉取的及时与减少拉取的Broker性能损耗(通过长连接)。消费者处理发起拉取请求的线程PullMessageService服务端Broker处理未拉取到消息的hold线程PullRequestHoldService服......
  • 1. HTTP/HTTPS协议
    应用层HTTP/HTTPS协议超文本传输协议:HTTP常见的状态码:1xx:提示。2xx:成功。3xx:重定向。4xx:客服端错误。5xx:服务器错误。GET和POST有什么区别:GET的语义是从服务器获取指定资源。POST是根据请求负荷(报文body)对指定资源做出处理。GET和POST方法主要区别是什么。关键在于......
  • 作为前端工程师,不了解MQTT,只知道HTTP,那就是不合格啦。
    作为前端开发工程师,了解MQTT(MessageQueuingTelemetryTransport)协议是很有必要的。MQTT是一种轻量级的消息传输协议,主要用于物联网(IoT)设备之间的通信。一、MQTT协议特点轻量级MQTT协议设计简洁,占用带宽小,对硬件资源要求低,非常适合在资源受限的设备上使用,如传感器、嵌......
  • 每日一题:https://codeforces.com/contest/2005/problem/B1
    题目链接:https://codeforces.com/contest/2005/problem/B1(开局看掉m=2和q=1)includeincludeusingnamespacestd;intmain(){longu;cin>>u;for(;u>0;u--){longn;longm,q;longarr1[3];longcha;cin>>n>>m>>q;for(inti=0;i<2;i++){......
  • js逆向实战之某二手平台请求参数加密逻辑
    声明:本篇文章仅用于知识分享,不得用于其他用途网址:https://www.goofish.com/加密逻辑随便点击一个模块,看触发的数据包。再选择一个模块,看哪些参数会变化。比较一下得知t和sign的值会变化。请求数据中的machId是根据所选模块变化的。主要关注sign的加密逻辑,搜索请求参数中......
  • 使用 HandlerInterceptor 拦截请求
    简介HandlerInterceptor是SpringMVC中的一个接口,用于在处理请求之前和之后进行一些操作。它可以用于日志记录、身份验证、权限检查等功能。以下是HandlerInterceptor接口定义:publicinterfaceHandlerInterceptor{ defaultbooleanpreHandle(HttpServletRequestrequ......
  • 【http】http协议状态码
    目录1.说明2.信息性状态码3.成功状态码4.重定向状态码5.客户端错误状态码6.服务器错误状态码1.说明1.HTTP协议状态码是指在HTTP通信过程中,服务器向客户端返回的三位数值的数字代码,用于表示服务器对请求的处理结果和状态。2.这些状态码由三个十进制数字组......
  • AndroidStudio清除重置Http Proxy代理的方式
    问题背景在国内做代码开发的都知道,在国际互联网我们存在看不见的墙,导致无法访问一些代码库和资源,所以在使用开发工具拉取第三方库的时候总会遇到无法连接或者连接超时的情况,所以就会使用一些安全的网络代理工具,辅助完成我们的环境配置等工作,例如android程序员在使用andro......
  • 为什么 Spring Boot 的微服务架构被称为“现代应用开发的曙光”?这种设计真的解决了传
    目录1.微服务架构为何被称为“现代应用开发的曙光”1.1单体架构的问题1.2微服务架构的诞生与发展1.3微服务架构的挑战2.SpringBoot在微服务中的角色2.1自动化配置与微服务开发2.2SpringCloud生态中的微服务3.微服务架构是否真的解决了传统单体架构中的所......