(1)get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。Post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址,用户看不到这个过程。
(2)对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的变量。两种方式的参数都可以用Request获取。(3)get传送的数据量较小,不能大于2KB。Post传送的数据量较大,一般被默认为不受限制。但理论上,因服务器的不同而异。
(4)get安全性非常低,post安全性较高。
另外,get请求有以下特性:它会将数据添加到URL中,通过这种方式传递到服务器,通常利用一个?代表URL地址的结尾与数据参数的开端,后面的参数每一个数据参数以“名称=值”的形式出现,参数与参数之间利用一个连接符&来区分。
Post请求有以下特性:数据是放在HTTP主体中的,其组织方式不止一种,有&连接方式,也有分隔符方式,可隐藏参数,传递大批数据,比较方便。
总之,当提交表单的时候通常用post请求,当要传送一个较大的数据文件时用post请求;当传递的值只需用参数方式(不大于2KB)时,用get方式即可。
-
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和POST本质上就是TCP链接。但GET产生一个TCP数据包;POST产生两个TCP数据包。
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。