HTTP - GET 与 POST
· 阅读需 4 分钟
汇总 post
GET | POST | |
---|---|---|
后退按钮/刷新 | 无害 | 数据会被重新提交(浏览器应该改制用户数据会被重新提交) |
书签 | 可收藏为书签 | 不可收藏为书签 |
缓存 | 能被缓存 | 不能缓存 |
编码类型 | application/x-www-form-urlencoded | application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码 |
历史 | 参数保存在浏览器历史中 | 参数不会保存在浏览器历史中 |
数据长度 | 有限制,URL 的最大长度时 2048 个字符 | 无限制 |
数据类型 | 只允许 ASCII 字符 | 无限制,也允许二进制数据 |
安全性 | 与 POST 相比,GET 安全性较差,因为发送的的数据是 URL 的一部分。发送密码或其他敏感信息时不要使用 GET ! | 数据不会显示在 URL 中 |
可见性 | 数据在 URL 中对所有人都是可见的 | 数据不会显示在 URL 中 |
应用场景中的区别
GET 参数通过 URL 传递,POST 放在 Request Body(请求体)
URL 中传送的参数是有长度限制的,而 Request Body 没有(浏览器对 URL 长度有限制,并不是 http 协议对 get 请求参数的限 制)
GET 比 POST 更不安全,因为参数直接暴露在 URL 上,所以不能用来传递敏感信息
GET 请求参数会被完整的保留在浏览器的历史记录里,而 POST 中的参数不会被保留
GET 请求只能进行 url 编码,而 POST 支持多种编码方式
GET 请求 会被浏览器主动 cache
,而 POST 不会,除非手动设置
GET 请求产生的 URL 地址可以被 bookmark(书签:登记 url),而 POST 不可以
GET 在浏览器 回退/刷新 时是无害的,而 POST 会再次提交请求
本质
两者并无区别,都是 HTTP 协议中发送请求的方法
HTTP 是基于 TCP/IP 的关于数据如何在万维网中通信的协议,底层是 TCP/IP,即 GET/POST 都是 TCP 链接
GET 请求也可以带 request body ,但不能保证一定被接收到(服务器处理方式不同);同样,POST 请求也可以在 URL 地址中传参数
GET 请求产生一个 TCP 数据包;POST 请求产生两个 TCP 数据包 :::