如果表单处理服务器既支持POST方法又支持GET方法,那么你该选择哪种方法呢?下面是有关这方面的一些规律:
如果想获得最佳表单传输性能,可以采用GET方法来发送只有少数简短字段的小表单。
一些服务器操作系统在处理可以立即传递给应用程序的命令行参数时,会限制其数目和长度,在这种情况下,对那些有许多字段或是有很长的文本域的表单来说,就应该采用POST方法来发送。
如果你在编写服务器端的表单处理应用程序方面经验不足,应该选择GET方法。如果采用POST方法,就要在读取和解码方面做些额外的工作,也许这并不很难,但是也许你不太愿意去处理这些问题。
如果安全性是个问题,那么我们建议选用POST方法。GET方法将表单参数直接放在应用程序的URL中,这样网络窥探者可以很轻易地捕获它们,还可以从服务器的日志文件中进行摘录。如果参数中包含了信用卡账号这样的敏感信息,就会在不知不觉中危及用户的安全。而POST应用程序就没有安全方面的漏洞,在将参数作为单独的事务传输给服务器进行处理时,至少还可以采用加密的方法。
如果想在表单之外调用服务器端的应用程序,而且包括向其传递参数的过程,就要采用GET方法,因为该方法允许把表单这样的参数包括进来作为URL的一部分。而另一方面,使用POST样式的应用程序却希望在URL后还能有一个来自浏览器额外的传输过程,其中传输的内容不能作为传统<a>标签的内容。
全面比较HTTP GET与POST方法
1. 基本信息比较
属性 |
GET方法 |
POST方法 |
历史: |
通常使用GET方法发送的数据作为URL的一部分将会被浏览器保存起来 |
使用POST方法提交的数据则不会作为URL的一部分,当然不会浏览器保存。 |
书签: |
GET方法可能被浏览器当作书签(bookmark)保存 |
POST方法则不会 |
回退与重新提交: |
使用GET方法的页面可以被回退并重新执行而不通知用户 |
POST方法会通知用户再次提交 |
Form编码类型: |
GET提交数据只支持 application/x-www-form-urlencoded |
POST支持application/x-www-form-urlencoded与multipart/form-data |
参数: |
由于GET的参数一般都跟在URL后面,支持的数据大小一般在2K,有些服务器可以支持到64K。这个就是很多网页超过64K就挂掉的真实原因。因为服务器限制了。 |
发送参数,还可以是文件,大小在理论上没有限制。 |
被攻击: |
GET方法提交数据很容易被黑客攻击,实施脚本绑架。 |
POST方法相对GET方法不是那么容易被黑客攻击 |
数据类型限制: |
GET方法提交数据只能是文本数据 |
POST方法则不受限制,二进制文件也可以。 |
安全性: |
GET方法的安全性比POST方法要低一些,原因是数据做为URL的一部分是可见的。而且被浏览器存在历史访问记录中。 |
POST方法的安全性相对GET要高一些。因为参数数据不能被浏览器作为URL的一部分而存入历史访问记录中。 |
表单数据长度: |
由于表单数据做为URL的一部分而URL长度通常是有限制的。 |
POST方法没有限制。 |
可用性: |
GET方法通常不被用来发送密码与敏感信息。但是我发现还是有不少网站用GET来实现login。比如XXXX社区,它把login方法放在一个jquery完成JavaScript脚本中,用GET请求完成。 |
POST方法可以用来发送密码与其他敏感信息。 |
可见性: |
GET方法对所有人可见 |
POST方法的变量是不可见的在URL中 |
缓存: |
GET方法默认被缓存,这个就是很多时候用GET方法获取数据后面要跟个时间戳的原因 |
POST方法默认不被缓存。 除非Response头设置了Cache-Control或者Expires属性值。 |
最大的变量值: |
GET支持最大为7607个字符 |
POST方法支持最大值为8MB |
应用场合: |
GET最常用的场合是获取数据,浏览器获取网页时候绝大多数通过GET方法实现,大多数浏览器下载也是使用GET方法获取文件 |
POST主要用来向服务器提交数据。 |