## 功能差异:

`Get:一般用于获取/查询资源信息;客户端到服务器端取东西。`

`Post:一般用于发送/更新资源信息;客户端到服务器端上传提交东西。`

## 数据传输

GET提交的数据会放在URL之后,以分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456.

POST方法是通过from表单或者ajax发送数据到服务端,把提交的数据放在HTTP包的Body中.对用户不可见

GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.

GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。

## 安全性


GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,

如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.

(注意对于用户登录来说,get是不安全的,网页直接显示你的用户名和密码)

无论 get 还是 post 传输的数据没有加密的话,通过抓包工具还是可以抓取到数据内容的

```

# 另外一种答案

首先这个题看似简单,实际上是个送命题!如果你百度搜到的标准答案可能是这样的(本标准答案参考自w3schools):

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

* GET产生的URL地址可以被Bookmark,而POST不可以。

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

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

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

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

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

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

* GET参数通过URL传递,POST放在Request body中。

如果我告诉你,你死记硬背的这些所谓“标准答案”不是面试官想要的,你肯定不服,首先从安全性讲,get和post都一样,没啥所谓的哪个更安全

get请求参数在url地址上,直接暴露,post请求的参数放body部分,按F12也直接暴露了,所以没啥安全性可言

“GET参数通过URL传递,POST放在Request body中”这个其实也不准,post请求也可以没body,也可以在url传递呢?

如果我告诉你get请求和post请求本质上没区别,你肯定不信!

GET和POST有一个重大区别,简单的说:

**GET产生一个TCP数据包;POST产生两个TCP数据包。**

长的说:

**对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。**

详情可以参考这篇,写的挺好的[《GET和POST两种基本请求方法的区别 》]()