GET 和 POST请求,你真的了解吗?

2023-11-03

最直观的区别就是 GET 把参数包含在 URL 中,
POST 通过 request.body 传递参数.

本篇是对于很久之前看到的博客做出整理,之前一直记录于有道笔记,今天拿出来分享给大家,希望大家能够从中有所收益。

一般大家都会这么去回答:

  1. GET 在浏览器回退时是无害的,而 POST 会再次提交请求 ;
  2. GET 产生在 URL 地址可以被 Bookmark,而 POST不可以 ;
  3. GET 请求会被浏览器主动 cache,而 POST并不会,除非手动设置 ;
  4. GET 请求只能进行 url编码,而 POST 支持多种编码方式 ;
  5. GET 请求参数会被完全保留在浏览器历史记录里,而 POST 中的参数不会被保留 ;
  6. GET 请求在 URL 中传送的参数是有长度限制的,而 POST 没有限制 ;
  7. GET 只接受 ASCII 字符,而 POST 没有限制 ;
  8. GET 比 POST 更不安全,因为参数直接暴露在 URL上,所以不能用来传递敏感信息 ;
  9. GET 参数通过 URL 传递,POST 放在 Request body 中。

Bookmark: ( 释义:标记)
cache: (释义:隐藏)

这里先纠正一个东西,GET 和 POST的本质上是没有任何区别的,你们信吗?


首先,解释一下 GET 和 POST 是什么 :

GET & POST 是 HTTP协议中的两种发送请求的方法,
HTTP 是基于 TCP/IP 的关于数据如何在万维网,如何去通信的协议
HTTP 的底层是 TCP/IP,
所以,GET/POST 的底层也是 TCP/IP,
也就是说,GET/POST 都是 TCP链接,
GET 和 POST 能做的事情是一样的,如果你给 GET也加上 Request body,
给 POST 加上 url参数,技术上是完全行的通的 !

ps: 觉得绕的同学,可以自己画张图,理解一下


规范 GET,POST 行为 (http协议,TCP)
在万维网世界里,TCP就像是汽车,我们可以用 TCP 来运输数据,它很可靠,从来不会发生“丢件少件”的现象,但是,如果路上跑的全是看起来一模一样的汽车,那这个世界看起来就是一团混乱的。送快件的汽车可能被满载货物的汽车拦堵在路上,整个交通一定会瘫痪的!
由此,“交通规则HTTP”诞生了~
HTTP 给汽车运输设定了好几个服务器类型,例如:GET,POST,PUT,DELETE等,HTTP规定,当执行 GET请求的时候,就要给“汽车”贴上 GET的标签,(这里指的是设置 method 为 GET),而且要求把传送的数据放在 “车顶”上(url中)以方便记录,当执行 POST 请求的时候,要在车上贴上 POST 的标签,并把货物放在车厢里,HTTP只是行为上的准则,而 TCP 才是 GET 和 POST 如何实现的基本 !


顺带提及一下,有关于参数大小的限制,这里做一个比喻,大家自行理解
在万维网的世界里,还有另一个重要的角色:运输公司
不同的浏览器(发起 http请求)和服务器 (接收 http请求)就是不同的运输公司,虽然理论上,你可以在车顶上无限的堆放 “货物”,但是运输公司可不傻,装货和卸货也是有很大成本的,他们会去限制 单词运输量 来控制风险,数据量太大对于浏览器和服务器来讲都是很大的负担。

业界里有一个不成文的规定是:
(大多数)浏览器通常都会限制 url 的长度在 2k个字节,而(大多数)服务器最多只能处理 64k 大小的 url,超出的部分,恕不处理,如果你用 GET 服务,在 request body 偷偷藏了数据,不同服务器的处理方式也是不同的,有些服务器会帮你 “卸货”,独处数据,但有些服务器会直接忽略,所以,虽然 GET 是可以携带 request body 的,但是不能保证一定能被接收到。
ok~ 现在你知道吗 GET 和 POST 本质就是 TCP链接,别无差别,但是由于 HTTP的规定 以及 服务器/浏览器 的限制,导致他们在应用过程中体现出了一些不同。


GET,POST请求步骤:

  • GET请求 ,浏览器会把 http header 和 data 一并发送出去,待服务器响应 200(2开头的http状态码,表示请求成功,200 :成功处理了请求,一般情况下都是返回此状态码; )
  • POST请求,服务器先发送 header, 服务器响应 100 continue, 服务器再去发送 data, 待浏览器响应 200.
  • 就是说,GET只需要汽车跑一次就能把货物送到,而POST需要跑两趟。第一趟:先和服务器打个招呼“hi~, 我等下要送一批货,你们开门等着我”。第二趟:回头把货物过去。

ps: 因为 post 需要两个步骤,所以在时间消耗上会多一点,看起来 GET 比 POST 更有效,因此 Yahoo团毒有人推荐用 GET 替换掉 POST来替换网站性能,但其实更多的舆论并不支持。

  1. GET 和 POST 都有自己的语义,不能随便混用;
  2. 与研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视,而网络环境较差的情况下,两次包 的 TCP 在验证数据包完整性上,却有着非常大的优点;
  3. 并不是所有的浏览器都会在 POST 中发送两次包,举个例子,之前在知乎上看到,有人讲 Firefox 只发送一次,博主自己试了一下,也是如此。

那么现在,你了解到了 POST 和 GET 请求的本质,以后遇到这种类型的问题,大概也有自己的一知半解了,博主整理完之前的笔记,发现有句话说的破有道理 “学而时习之,不会忘”,哈哈。希望本博客对你有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GET 和 POST请求,你真的了解吗? 的相关文章

  • 数据包丢失和数据包重复

    我试图找出数据包丢失和数据包重复问题之间的区别 有谁知道 数据包重复 是什么意思 和TCP检测到丢失时重传数据包一样吗 No In TCP 数据包 的传递是可靠的 我认为在这种情况下术语数据应该更好 因为它是面向流的协议 数据包丢失和重复是
  • 访问 AWS 上的 Tensorboard

    我正在尝试访问 AWS 上的 Tensorboard 这是我的设置 张量板 tensorboard host 0 0 0 0 logdir train 在端口 6006 上启动 TensorBoard b 39 您可以导航到http 172
  • iOS 上的多个 HTTP 请求与单个 TCP 连接

    我正在开发一个 iPhone 应用程序 它使用我控制的基于 Web 的 API 连接到持续打开的 TCP 端口并通过 TCP API 发出请求 或者为我想要获取的所有数据发出新的 HTTP 请求 会更快或更高效吗 我认为差异可以忽略不计 但
  • TcpClient 在异步读取期间断开连接

    我有几个关于完成 tcp 连接的问题 客户端使用 Tcp 连接到我的服务器 在接受客户端后listener BeginAcceptTcpClient ConnectionEstabilishedCallback null 我开始阅读netw
  • 序列化是通过套接字发送数据的最佳选择吗?

    有人告诉我 序列化不是通过套接字发送数据的最佳方法 但他们说他们在一本书上读过一次 并且不确定更好的方法 因为他们以前没有真正做过网络 那么序列化是最好的方法还是有更好的方法 如果这有很大的不同的话 这也是一个游戏 通过搜索有关通过它发送对
  • 当 TCP 序列号到达而不是预期时会发生什么情况?

    我正在编写一个程序 使用 libpcap 捕获数据包并重新组装 TCP 流 我的程序只是监视流量 因此我无法控制数据包的接收和发送 我的程序忽略所有非 TCP IP 流量 我根据 ISN 计算下一个预期序列号 然后计算连续的 SEQ 号 我
  • 如何使用 Nmap 检索 TCP 和 UDP 端口? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我需要在使用 Nmap 的同一扫描中以尽可能最快的方式检索 TCP 和 UDP 端口 我会尽力解释得更好 如果我使用最常用的命令 nmap 192 1
  • ADB TCPIP 连接问题

    我有两台 Galaxy S3 其中一个已扎根 另一个则未扎根 因此 当我尝试通过本地网络连接它们时 计算机可以看到已root的计算机 但是正常的就卡在tcpip这一步了 所以 我写 adb tcpip 5555 It says restar
  • 如何知道哪个本地应用程序连接到我的套接字(Windows)

    我有一个绑定到某个 TCP 端口的 Windows 服务 该端口用于我的应用程序之间的 IPC 有没有一种编程 WinAPI WinSocket 等 方法可以知道哪个应用程序连接到我的端口 即在我的 Windows 服务中 我想获取连接到我
  • 网络服务发现不是发现服务类型

    我想通过 Android 设备在本地网络中找到服务器 我可以通过使用找到它NSDManager具有服务器服务类型的服务 例如 workstation tcp是服务类型 在我的本地网络中我有一个 无线路由器和无线中继器 两者都有不同的SSID
  • 使用 IdTCPClient 和 IdTCPServer 发送和接收 TMemoryStream

    我在 XE2 中找到了 Remy Lebeau 的 IdTCP 组件聊天演示 我想玩一下 可以发现 我想使用这些组件发送图片 最好的方法似乎是使用 TMemoryStream 如果我发送字符串 连接工作正常 字符串传输成功 但是当我将其更改
  • 使用 InputStream 通过 TCP 套接字接收多个图像

    每次我从相机捕获图像时 我试图将多个图像自动从我的 Android 手机一张一张地发送到服务器 PC 问题是read 函数仅在第一次时阻塞 因此 从技术上讲 只有一张图像被接收并完美显示 但在那之后当is read 回报 1 该功能不阻塞
  • C#:如何在 Socket.BeginReceive 回调之前终止套接字?

    我有一个接收来自客户端的连接请求的服务器 该服务器使用异步Socket BeginReceive and Socket EndReceive方法 该代码与找到的代码非常相似here http msdn microsoft com en us
  • 使用 TCP 时是否需要使用校验和来保护我的消息?

    使用 TCP 作为网络协议 在通过线路发送消息之前 我会为每条消息的大小 以及可能的校验和 添加前缀 我想知道 计算和传输消息的校验和是否有意义 以确保消息将被不变地传递 如果以及何时传递 例如因为一些网络错误 目前 我在发送消息本身之前发
  • Silverlight 套接字:模仿框架 Bind、Listen 和 Accept 方法?

    我有这个 NET Framework C 类 它实际上充当 TCP 连接的包装器Socket http msdn microsoft com en us library attbb8f5 aspxSystem Net Sockets 命名空
  • 如何使用C从http下载文件?

    最近几天我试图弄清楚如何从 URL 下载文件 这是我对套接字的第一个挑战 我用它来了解协议 所以我想在没有 cURL 库的情况下只用 C 语言来完成它 我搜索了很多 现在我可以打印页面的源代码 但我认为这与文件不同 我不必只将接收到的数据从
  • 确定 TCP Listen() 队列中当前积压的连接数

    有没有办法找出currentLinux 上 TCP 套接字上等待 Accept 的连接尝试次数 我想我可以在每个事件循环上点击 EWOULDBLOCK 之前计算成功的 Accept 数量 但我使用的是隐藏这些细节的高级库 Python Tw
  • Jmeter TCP Sampler - 如何重用线程之间的连接?

    我在 JMeter 的 ThreadGroup 下设置了一个 TCP 采样器 数据是从 CSV 文件中选取的 第一行数据用于认证 后续行为实际参数数据 像下面这样的东西 AAAAAAA21 BBBBBBBCCCCCCCDDDDDDD BBB
  • 如何才能将 TCP 连接返回到同一端口?

    机器是 RHEL 5 3 内核 2 6 18 有时我在 netstat 中注意到我的应用程序有连接 建立了 TCP 连接本地地址 and 国外地址是一样的 其他人也报告了同样的问题 症状与链接中描述的相同 客户端连接到本地运行的服务器的端口
  • 对卡在 CLOSE_WAIT 状态的连接进行故障排除

    我有一个在 Windows 上的 WebLogic 11g 中运行的 Java 应用程序 几天后它变得没有响应 我注意到的一个可疑症状是大量连接 大约 3000 个 出现在netstat即使服务器空闲 也具有 CLOSE WAIT 状态 由

随机推荐

  • 2021年南京天印中学高考成绩查询,2021年南京高中录取分数线是多少及高中排名榜...

    2020年南京的高中录取分数线都已经公布 以下是小编给大家整理的汇总信息 仅供参考 一 2020年南京高中录取分数线是多少 一 科技特长生 学科特长生 科技特长生和学科特长生投档控制线均为548分 二 普通高中指标生 原市区普通高中指标生录
  • STM32——超声波模块

    模块介绍 超声波模块一般使用的都是HC SR04来进行测距 1 产品特点 HC SR04 超声波测距模块可提供 2cm 400cm 的非接触式距离感测功能 测 距精度可达高到的非接触式距离感测功能 测距精度可达高到 3mm 模块包括超声波发
  • 期货用期权对冲(期货用期权对冲吗)

    怎么用期权 option 做对冲 hedge 在期权交易市场中 对冲期权风险可以通过交易不同的合约方向 使用组合策略对自己合约盈利或者合约的亏损进行一个风险对冲 这样可以降低期权交易市场中的风险 在期权交易市场中 投资者一般也会将期权用作对
  • Java 静态变量,静态方法,静态常量简介说明

    转自 Java 静态变量 静态方法 静态常量简介说明 下文笔者将着重讲述静态的相关说明 如下所示 实现思路 当我们在方法 变量 常量前面加上static关键字 则可认为其是一个静态的对象 静态方法注意事项 静态方法不可以使用this关键字
  • 去AV片马赛克,开发者被抓了

    来源丨程序员软件库 怎么去除图片或者视频上的马赛克 自从马赛克这玩意被弄出来后 让大家悲喜交加 你想在社交软件上发一些图片或者视频 有部分比较隐私的东西 那就需要使用马赛克技术遮挡下 保护下自己隐私或者别人隐私是非常好的 比如 新闻在拍摄报
  • python爬取美女图片

    需求 最近对python爬虫感兴趣 于是也依葫芦画瓢试着用爬虫爬取之前喜欢的网站上的美女图片 网站 http www mm131 com xinggan 其中每一套图都是一张一个页面 存一套图如果是手动得点翻几十个页面 但现在用爬虫的话 就
  • 用python算24点及原理详解

    1 描述 给出4个正整数 使用加 减 乘 除4种运算以及括号把4个数连接起来得到一个结果等于24的表达式 注 这里加 减 乘 除以及括号的运算结果和运算优先级跟平常定义一致 例如 对于5 5 5 1 可知 5 5 1 5 24 又如 对于
  • 连接Nacos的服务程序快速无限打日志longPolling、ClientWorker

    问题 一个微服务环境里很多服务启动以后疯狂打日志 日志是从nacos更新配置 日志 星号脱敏ip 端口 com alibaba nacos client Worker longPolling fixed 10 public ClientWo
  • [极客大挑战 2019]LoveSQL

    考点 常规的sql注入 1 万能密码测试 2 解不了码 没用 3 但是可以注入 测试回显几个字段名 慢慢试 4 爆数据库名和用户名 5 爆库名 6 爆表名 1 union select 1 2 group concat table name
  • 树莓派4b之初学者入门人脸识别(手把手完整版)

    目录 前言 硬件配置 一 烧录镜像和环境配置 二 代码详解 1 基础知识 2 相关代码及其详细注释 三 代码部署和运行 前言 树莓派的性能日益强大 树莓派4b相比上一代的能有了很大的提升 采用了博通最新的BCM4908 64bit处理器 内
  • nginx限流配置

    限流 Rate Limitting 是服务降级的一种方式 通过限制系统的输入和输出流量以达到保护系统的目的 比如我们的网站暴露在公网环境中 除了用户的正常访问 网络爬虫 恶意攻击或者大促等突发流量都可能都会对系统造成压力 如果这种压力超出了
  • 哈希算法总结!!!

    哈希算法 Hash 又称摘要算法 Digest 作用 对任意一组输入数据进行计算 得到一个固定长度的输出摘要 最重要的特点 相同的输入一定得到相同的输出 不同的输入大概率得到不同的输出 哈希算法的目的 为了验证原始数据是否被篡改 哈希算法的
  • GRE详解

    GRE详解 GRE定义 通用路由封装协议GRE Generic Routing Encapsulation 可以对某些网络层协议 如IPX ATM IPv6 AppleTalk等 的数据报文进行封装 使这些被封装的数据报文能够在另一个网络层
  • 如何用Python爬取小游戏网站,把喜欢的游戏收藏起来(附源码)

    简介 Python 是一门简单易学且功能强大的编程语言 无需繁琐的配置 掌握基本语法 了解基本库函数 就可以通过调用海量的现有工具包编写自己的程序 轻松实现批量自动化操作 可以极大提高办公和学习效率 Python爬虫可以批量获取网页上的数据
  • zf0 hack

    444444444 4 4 Internet Superheroes 4 4 4 44 4 With great power
  • [NAS]Darts代码解析

    darts论文链接 https arxiv org pdf 1806 09055 pdf darts源码链接 https github com quark0 darts search部分 train search py 数据准备 cifar
  • 虚拟机中的windows 系统按下字母键会打出数字

    本机系统是OS X 按下的是J K L等字母键 显示的却是数字 我的键盘布局 解决方法 同时按Fn Numlock 键 来关闭小键盘
  • OpenAI入门

    OpenAI 训练了非常擅长理解和生成文本的尖端语言模型 我们的 API 提供对这些模型的访问 可用于解决几乎任何涉及处理语言的任务 在本快速入门教程中 您将构建一个简单的示例应用程序 在此过程中 您将学习使用 API 完成任何任务的关键概
  • geth的安装和使用

    geth的安装和使用过程 windows下安装Geth 配置和使用 搭建私有网络 windows下安装Geth 1 下载地址 https geth ethereum org downloads 下载windows版 2 按指示安装 3 在c
  • GET 和 POST请求,你真的了解吗?

    最直观的区别就是 GET 把参数包含在 URL 中 POST 通过 request body 传递参数 本篇是对于很久之前看到的博客做出整理 之前一直记录于有道笔记 今天拿出来分享给大家 希望大家能够从中有所收益 一般大家都会这么去回答 G