博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简单总结Get与Post的区别
阅读量:5119 次
发布时间:2019-06-13

本文共 1702 字,大约阅读时间需要 5 分钟。

 工作当中经常遇到这两种类型的接口,也会被问到这两种类型的区别,这里简单总结一下算是一个简单的回忆吧。

  GET和POST是http协议的两种发送请求的方法。因为http的底层是TCP/IP,所以GET和POST的底层也是TCP/IP,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。从这点看它们有是有一些相同点的。

不同点:

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

2.GET在浏览器回退时是无害的,而POST会再次提交请求。

  get会将请求参数放在请求的url中,回退操作实际上浏览器会从之前的缓存中拿结果;post每次调用都会创建新的资源。.另外在method的定义上,get是幂等的,执行多少遍不影响最终存储的结果。而post每次调用都会创建新的资源。Get put delete 都是等幂的,post请求两次得到两个不同的url,服务器创建了两份不同的资源,所以post不是等幂的。(等幂是说一次或多次请求资源状态不变)

3.GET请求会被浏览器主动cache,而POST不会。

  HTTP缓存的基本目的就是使应用执行的更快,更易扩展,但是HTTP缓存通常只适用于idempotent request(可以理解为查询请求,也就是不更新服务端数据的请求),这也就导致了在HTTP的世界里,一般都是对Get请求做缓存,Post请求很少有缓存。

  get多用来直接获取数据,不修改数据,主要目的就是DB的search语句的感觉。用缓存(有个代理服务器的概念)的目的就是查db的速度变快。

  post则是发送数据到服务器端去存储。类似db里的update delete和insert语句的感觉。更新db的意思。数据必须放在数据库,所以一般都得去访问服务器端。

4.GET只能进行url编码,POST支持多种方式编码。

  url编码指的是urlEncode,POST提交数据的方式有application/x-www-form-urlencoded(浏览器form表单默认的编码方式,提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码),multipart/form-data(表单上传文件时,必须让 form 的 enctype 等于这个值),application/json(告诉服务端消息主体是序列化后的 JSON 字符串),text/xml(一个文本内容,根据自己和浏览器的约定进行传输)。

5.GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

  和缓存差不多,也是为了应用执行的更快。

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

  Get请求理论上是没有长度限制的,但是为了解析的方便大多数浏览器规定大小为2k。POST一般情况下是没有限制的。

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

  URL 是 HTTP 的一个首部。既然作为一个首部,那么根据约定,一定是 ASCII 字符的。

8.GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息

  get请求参数在url中,即传送的数据是在链接里面可看到,有安全问题。

  post参数不是在url里面而是在请求体中,因此安全性较get高。

9.GET请求会产生一个TCP数据包,POST请求会产生两个TCP数据包。

  GET请求是把http header和data一并发出去,服务器响应200,POST请求是浏览器先发送header,服务器响应100,浏览器发送data,浏览器再响应200。所以get请求只请求一次,就可以取到数据。而post请求需要请求两次才能得到想要的数据。

转载于:https://www.cnblogs.com/wxf-h/p/10480145.html

你可能感兴趣的文章
jquery ui datepicker
查看>>
Windows Phone开发之路(16) 如何在页面间传递数据
查看>>
Repeater 使用方法
查看>>
webpack的常识概念
查看>>
去掉chrome浏览器中input或textarea在得到焦点时出现黄色边框的方法
查看>>
OOA/OOD/OOP
查看>>
validform_v5.3.2帮助文档
查看>>
URL转码
查看>>
dva+ts+taro 小程序构建-资料总汇
查看>>
webpack + vue-router 路由配置访问
查看>>
毫无营养的Java基础知识
查看>>
PHP 内存泄漏分析定位
查看>>
ElementUI侧边栏导航菜单隐藏显示问题
查看>>
保留两位小数
查看>>
SpringBoot整合JDBC数据库操作第三弹-实现增加数据操作
查看>>
React 深度学习:ReactElementValidator
查看>>
php微信支付企业付款到零钱报错call faild, errorCode:58
查看>>
Python_基础语法
查看>>
Python_数据类型
查看>>
Python_基础语法练习题
查看>>