HTTP中GET请求和POST请求的区别

前言

HTTP(超文本传输协议)是用于在 Web 浏览器和 Web 服务器之间传输数据的协议。在 HTTP 中,GET 和 POST 是两种常见的请求方法。一般我们在浏览器输入一个网址访问网站都是 GET 请求;在 FORM 表单中,可以通过设置 Method 指定提交方式为 GET 或者 POST 提交方式,默认为 GET 提交方式。它们在数据传输和使用方式上存在一些区别。GET 请求用于获取资源,将参数附加在 URL 末尾;而 POST 请求用于提交数据,参数包含在请求的主体(requset body)中。根据具体需求和安全性考虑,选择适当的请求方法。

基本区别

  • GET 请求将参数包含在 URL 中,POST 请求是将参数放在 request body 中

这是什么意思呢?这里我模拟两个请求

当我分别点击两个按钮

GET 请求:

POST 请求:

可以看出 GET 请求会将参数包含在 URL 中,而 POST 则会将参数放在 request body 中(这里我没有进行展示)

  • GET 在浏览器回退时无害,POST 在浏览器回退会再次提交请求

浏览器中使用 GET 请求时,当用户点击浏览器的回退按钮返回到之前的页面时,GET 请求不会对页面产生影响或重复提交请求。而对于 POST 请求,当用户点击浏览器的回退按钮返回到之前的页面时,浏览器可能会再次提交之前的 POST 请求。

  • GET 产生的 URL 可以保存在浏览器书签中,而 POST 不会

GET 请求产生的 URL 包含了查询字符串参数,可以直接将带有参数的 URL 保存为浏览器书签,方便以后再次访问。因为 GET 请求的参数直接暴露在 URL 中,所以可以轻松地将包含参数的 URL 添加到书签栏或收藏夹中。

而对于 POST 请求,由于参数是通过请求的主体传递的,并不直接暴露在 URL 中,所以不能将 POST 请求的完整 URL 直接保存为书签。

  • GET 请求会被浏览器主动 cache,而 POST 不会,除非手动设置。

当浏览器收到 GET 请求的响应时,它会检查响应的缓存标识(例如响应头中的 Cache-Control 和 Expires 字段),如果响应可以被缓存且缓存未过期,浏览器会将响应保存在缓存中。当下次发送相同的 GET 请求时,浏览器会直接从缓存中获取响应,而不会向服务器发送请求。

相比之下,对于 POST 请求,默认情况下,浏览器不会对响应进行缓存。因为 POST 请求通常用于向服务器提交数据,而数据的状态可能会在每次请求中发生变化,因此缓存 POST 请求的响应可能导致不正确的结果。如果希望对 POST 请求的响应进行缓存,开发人员需要在服务器的响应中设置适当的缓存标识(如 Cache-Control 和 Expires),并且浏览器需要遵循这些设置进行缓存。

  • GET 请求只能进行 url 编码,而 POST 支持多种编码方式。

当通过 GET 请求传递参数时,参数值会被 URL 编码。URL 编码是一种将特殊字符转换为特定格式的编码方式,以便在 URL 中进行传输。特殊字符如空格、问号、等号等会被替换成特殊编码形式,比如使用”%20″代替空格。

而对于 POST 请求,可以使用多种编码方式来传递参数。最常见的编码方式是 URL 编码(application/x-www-form-urlencoded),它类似于 GET 请求中的编码方式,将参数转换为 URL 编码形式。此外,还可以使用其他编码方式,如 multipart/form-data 编码,用于支持上传文件或二进制数据的传输。

通过 POST 请求,可以根据具体的需求和数据类型,选择合适的编码方式来传递参数。不同的编码方式适用于不同的场景,可以提供更丰富的参数传递和数据处理能力。

  • GET 请求在 URL 中传送的参数是有长度限制的,而 POST 没有。

当使用 GET 请求时,参数会以查询字符串的形式附加在 URL 上。然而,由于部分浏览器对 URL 长度有限制,因此 GET 请求在传递参数时存在长度限制。

相比之下,POST 请求将参数放置在请求主体(Request Body)中,而不受 URL 长度限制。这意味着当需要传递大量数据、上传文件或进行编码转换等操作时,通常会选择使用 POST 请求。

  • 对参数的数据类型,GET 只接受 ASCII 字符,而 POST 没有限制。

由于 URL 的限制和查询字符串的传递方式,GET 请求中的参数通常需要进行 URL 编码,以确保特殊字符和非 ASCII 字符能够正确传输。URL 编码会将特殊字符转换为特定的编码形式,以确保其在 URL 中的正确性和可传递性。

相比之下,POST 请求的参数可以更自由地传输各种类型的数据,包括特殊字符和非 ASCII 字符,而不需要像 GET 请求那样进行 URL 编码。这是因为 POST 请求将参数包含在请求主体中,而不是直接暴露在 URL 中。

小知识

GET 请求比 POST 请求快

当然这不是绝对的,如果排除其他因素,仅考虑 GET 和 POST 请求本身的差异,那么可以说在某些情况下 GET 请求可能比 POST 请求更快。
这是为什么呢?
这是因为 POST 在真正接收数据之前会先将请求头发送给服务器进行确认,然后才真正发送数据。


POST 请求的过程:

  1. 浏览器请求建立 TCP 连接(第一次握手)。
  2. 服务器确认并接受 TCP 连接请求(第二次握手)。
  3. 浏览器发送包含 POST 请求头的小型数据包(第三次握手),同时 HTTP 也在此时进行第一次数据发送。
  4. 服务器返回 100 Continue 响应,表示准备接收请求主体。
  5. 浏览器继续发送包含请求主体的数据。
  6. 服务器接收完整的请求后进行处理,并返回 200 OK 响应。

GET 请求的过程:

  1. 浏览器请求建立 TCP 连接(第一次握手)。
  2. 服务器确认并接受 TCP 连接请求(第二次握手)。
  3. 浏览器发送包含 GET 请求头和数据的小型数据包(第三次握手),同时 HTTP 也在此时进行第一次数据发送。
  4. 服务器接收到请求后进行处理,并返回 200 OK 响应。

也因此 GET 只产生一个 TCP 数据包;而 POST 产生两个 TCP 数据包。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

文件被识别为病毒,被删除,如何解决

我们的文件有时候有用,但是电脑却识别为病毒,直接给我删除掉了,这让人是真的很XX,那该怎么办呐。 我最近用了这个方法很多次,蛮好用,分享给大家! 1、先找到安全中心 2、找不到排除项 3、点击添…

详细总结Webpack5的配置和使用

打包工具 使用框架(React、Vue),ES6 模块化语法,Less/Sass 等 CSS预处理器等语法进行开发的代码要想在浏览器运行必须经过编译成浏览器能识别的 JS、CSS 等语法,才能运行。 所以需要打包工具帮我们做完这些事。除此之…

面试 | 双法妙解压缩字符串【遍历统计 + 双指针】

一、题目描述 原题传送门 二、思路分析 首先我们来分析一下解决本题所需要的思路 题目的意思很简单,就是统计原本的字符串中的每个字符出现的次数,然后以【字符,出现的次数】这样的结构来字符串,以起到一个压缩的效果&#xff0c…

概率论和随机过程的学习和整理--番外16,N合1的合成问题的求平均个数,次数,阶数

目录 1 问题 2 用条件期望,求合成的次数 2.1 思路1 2.2 思路2 3 用条件期望,求合成的个数 3.1 令X表示用材料1往上合成时,合成材料2的个数 3.2 令Y表示用材料1往上合成时,合成材料3的个数 4 用条件期望,求合成…

【算法基础:数学知识】4.4 快速幂

文章目录 快速幂例题列表875. 快速幂⭐⭐⭐⭐⭐(重要!)代码写法1——递归代码写法2——迭代递归写法 与 迭代写法的 对比 876. 快速幂求逆元🚹(需要理解逆元的概念)TODO乘法逆元介绍解法代码 快速幂 https…

[MySQL]MySQL用户管理

[MySQL]MySQL用户管理 文章目录 [MySQL]MySQL用户管理1. 用户的概念2. 用户信息3. 创建用户4. 修改用户密码5. 删除用户6. MySQL中的权限7. 给用户授权8. 回收权限 1. 用户的概念 MySQL中的用户分为超级用户(root)和普通用户。超级用户的操作是不受权限…

奇舞周刊第500期:TQL,巧用 CSS 实现动态线条 Loading 动画

记得点击文章末尾的“ 阅读原文 ”查看哟~ 下面先一起看下本期周刊 摘要 吧~ 奇舞推荐 ■ ■ ■ TQL,巧用 CSS 实现动态线条 Loading 动画 最近,群里有个很有意思的问题,使用 CSS 如何实现如下 Loading 效果: leaferjs&#xff0c…

4.3 Bootstrap CSS编码规范

文章目录 Bootstrap CSS编码规范语法声明顺序不要使用 import媒体查询(Media query)的位置带前缀的属性单行规则声明简写形式的属性声明Less 和 Sass 中的嵌套注释class 命名选择器代码组织编辑器配置 Bootstrap CSS编码规范 语法 用两个空格来代替制表…

Java方法重载和Java方法重写

Java方法重载 Java允许同一个类中定义多个同名方法,只要它们的形参列表不同即可。如果同一个类中包含了两个或两个以上方法名相同的方法,但形参列表不同,这种情况被称为方法重载(overload)。 例如,在 JDK …

【多模态】16、DetCLIP | 构建超大词汇字典来进行开放世界目标检测

论文:DetCLIP: Dictionary-Enriched Visual-Concept Paralleled Pre-training for Open-world Detection 代码:无。。。 出处:NIPS2022 | 华为诺亚方舟 | 中山大学 | 香港科技大学 效果: 在 LVIS 的 1203 个类别上超越了 GLIP…

深入学习 Redis - 深挖经典数据类型之 list

目录 前言 一、list 类型 1.1、操作命令 lpush / rpush(插入元素) lrange(查看范围元素) lpushx / rpushx (有约束的插入) lpop / rpop(头删尾删) lindex(获取下…

实现锂电池形状的数据可视化css+js

1.效果图 2.需求根据后端返回数据改变里面的高度 HTML&#xff1a; <div class"dianchichi"><div class"limian" id"divElementId"></div></div> css: .dianchichi {width: 84px;height: 146px;display: flex;justify-…

【Visual Studio】Qt 在其他 cpp 文件中调用操作 ui 界面控件

知识不是单独的&#xff0c;一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏&#xff1a;Visual Studio。 还整了一个如何相互之间调用函数的文章&#xff0c;感兴趣可以看&#xff1a;【Visual Studio】Qt 在其他 cpp 文件中调用主工程下文件中的函数。 文章目录 …

react 实现小球加入购物车动画

代码 import React, { useRef } from react;const ProductLayout () > {const box useRef(null);const createBall (left, top) > {const ball document.createElement(div);ball.style.position absolute;ball.style.left left - 10 px;ball.style.top top - 1…

四个现实中的商品样例,帮助你理解如何使用css【前端CSS入门样例】

实现商品列表 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>商品列表图片</title><style>.row > img {width: 15%;}</style></head><body><div class"row"><img sr…

C/C++ 程序 IDE 开发工具 CLion

下载地址&#xff1a; https://www.jetbrains.com/clion/ https://www.jetbrains.com/clion/ 下载地址&#xff1a; https://www.jetbrains.com/clion/download/ https://www.jetbrains.com/clion/download/ 历史版本&#xff08;老版本&#xff09;下载地址&#xff1a; h…

计算机科学cs/电子信息ei面试准备——python复习|理解题|简答题

目录 1 请简要概述python技术的主要应用场景? 2 python的基本数据类型是那几种? 3 python数组和列表有什么区别? 4 Python中的函数是什么&#xff1f; 5 请写出删除列表中的元素有几种方式? 6 描述python函数中递归的理解? 7 请介绍join()和split()的区别? 8 介绍…

每天五分钟机器学习:多项式非线性回归模型

本文重点 在前面的课程中,我们学习了线性回归模型和非线性回归模型的区别和联系。多项式非线性回归模型是一种用于拟合非线性数据的回归模型。与线性回归模型不同,多项式非线性回归模型可以通过增加多项式的次数来适应更复杂的数据模式。在本文中,我们将介绍多项式非线性回…

dpdpdp

这里写目录标题 139. 单词拆分322. 零钱兑换300. 最长递增子序列120. 三角形最小路径和64. 最小路径和63. 不同路径 II5. 最长回文子串&#xff08;回文dp&#xff09;⭐97. 交错字符串⭐&#xff08;抽象成路径问题&#xff09;221. 最大正方形⭐ 139. 单词拆分 class Soluti…

文心千帆为你而来

1. 前言 3月16号百度率先发布了国内第一个人工智能大语言模型—文心一言。文心一言的发布在业界引起了不小的震动。而文心一言的企业服务则由文心千帆大模型平台提供。文心千帆大模型平台是百度智能云打造出来的一站式大模型开发与应用平台&#xff0c;提供包括文心一言在内的…