IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> GET 和 POST请求 -> 正文阅读

[网络协议]GET 和 POST请求

1. GET 和 POST 请求的区别

  1. GET 请求再 URL 中传送的参数是有长度限制的, 而 POST 没有
  2. GET 比 POST 相对来说更不安全, 因为参数直接暴露在 URL 中, 所以不能用来传递敏感信息, 而 POST 数据不会显示在 URL 中, 是放在 Request body 中
  3. 对于参数的数据类型, GET 只能接受 ASCII 字符, 而 POST 无限制
  4. GET 请求参数会被完整保留在浏览器历史记录中; 相反, POST 请求参数不会被浏览器保留
  5. GET 请求只能进行 url 编码 (application/x-www-from-urlencoded), 而 POST 支持多种编码方式
  6. GET 请求会被浏览器主动缓存, 而 POST 不会, 除非手动设置
  7. GET 在浏览器回退时是无害的, 而 POST 会再次提交请求

2. 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 参数, 是可以实现的。

但若是所有的方法都一模一样, 就无法区分操作, 所以 HTTP 给不同的操作赋予不同的方法, GET, POST, PUT, DELETE等等

HTTP 规定, 在执行 GET 请求时, 要带上 GET 标签 (设置 method 为 GET), 而且要求把传送的数据放在最上面 (url), 以便记录。

POST 请求, 就要带上 POST 标签, 将传送数据放到内部 (Request body中)。

当然 GET 请求时, 也可以在Request body 中放点数据; POST 请求时, 在 url 存些数据, 不过比较傻。

HTTP 本质上是一个行为准则, 而 GET 和 POST 本质就是 TCP 连接。但由于 HTTP 的规定和浏览器/服务器的限制, 导致在应用过程中体现出差异。

3. URL 中传送参数长度限制

在不同的浏览器 Client 端 (发起 http 请求) 和服务器 server 端 (接受 http 请求) 有着不同的限制。

虽然, 理论上可以在 URL 中无限添加参数, 但浏览器和服务器在解析时也是有很大成本, 用限制参数来控制风险, 数据量太大会对服务器和浏览器都是很大负担

大多数浏览器通常会把 url 长度限制在 2k 个字节, 大多数服务器最多处理 64k 大小 url

超过的部分, 不会处理。
如果你用 GET 服务, 在 Request body 中偷偷藏了数据, 不同浏览器的处理方式也是不同的, 有些服务器会帮你处理, 读出数据, 有些服务器直接忽略

在这里插入图片描述

所以 GET 虽然可以带 Request body, 但不能验证是否被接收到

4. GET 方法参数写法

在约定中, 我们参数是写在 ? 后面, 用 & 连接

http://ip:port/test/getHelloWorld?username=Kirlz&age=21&sex=1

在解析报文的过程中, 是通过获取 TCP 数据, 用正则等工具从数据中获取 HeaderBody, 从何提取参数

有些会在 header 请求头中添加 token, 用来验证用户是否有登录等权限问题

因此, 参数写法是我们可以约定的, 只要服务器可以解析出来就好。

5. GET 和 POST 的安全性

POST 比 GET 更安全, 是因为 POST 数据在 URL 上是不可见的, GET 数据是可见的。

但从传输的角度来说, 他们都是不安全的, 因为 HTTP 协议在网络中是明文传输的, 只要在网络上抓包, 就能够获得完整地数据报文。(和脱裤子放屁一样)
在这里插入图片描述
想要安全传输, 就需要加密, 也就是 HTTPS。

6. GET 和 POST 发送数据包

GET: 请求时产生一个 TCP 数据包
POST: 请求时产生两个 TCP 数据包

  1. GET: 浏览器会把 http header 和 data 一并发送出去, 服务器响应200 (返回数据);
  2. POST: 浏览器先发送 header, 服务器响应100 continue, 浏览器再发送 data 服务器响应200 OK(响应数据)

虽然 POST 需要发送两次数据, 理论上应该消耗更多时间, GET 比 POST 更高效, 但并不是的。

  1. GET 和 POST 都有自己的语义不能混用
  2. 在网络环境良好的环境下, 发送一次数据包和两次数据包时间差几乎可以不计; 但在网络环境较差的情况下, 发送两次数据包在验证数据完整性上, 有着更大优势
  3. 并不是所有浏览器都会 POST 发送两次包, FireFox 就只发送一次, Chrome 也是一次

综上所述, POST 和 GET性能差可以忽略

在这里插入图片描述

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-10-22 11:17:36  更:2021-10-22 11:18:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年7日历 -2024/7/3 12:10:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码