get和post的区别
HTTP(超文本传输协议)的设计目的是保证客户机与服务器之间的通信。它的两种最常用的 HTTP 方法是:get和post。下面就这两种方法的一些主要区别进行分析。
主要任务
- get请求:一般用于获取/查询资源信息,从指定的资源请求数据。
- post请求:一般用于更新资源信息,向指定的资源提交要被处理的数据。
数据类型
- get请求:请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接。get的数据类型只限ASCII编码,也就是说所有的非ASCII字符都要编码之后再传输。
- post请求:请求的数据会被放置在HTTP请求包的包体中。post的数据类型没有限制,可以是ASCII编码,也可以是二进制数据。
因此,get请求的数据会暴露在地址栏中,而post请求则不会。
传输数据的大小
- get请求:在HTTP规范中,没有对URL的长度和传输的数据大小进行限制。但是在实际开发过程中,对于get,特定的浏览器和服务器对URL的长度有限制。因此,在使用get请求时,传输数据会受到URL长度的限制。
- post请求:对于post,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对post提交数据大小进行限制,Apache、IIS都有各自的配置。
安全性
- get请求:与 POST 相比,get的安全性较差,因为所发送的数据是URL的一部分。比如,在进行登录操作,通过get请求,用户名和密码都会暴露在URL上,因为登录页面有可能被浏览器缓存或者被其他人查看浏览器的历史记录,所以用户名和密码就很容易被他人拿到了。
- post请求:post的安全性比get的高,因为参数不会被保存在浏览器历史或 web 服务器日志中。
缓存
- get请求:在发送后,能被缓存;
- post请求:在发送后,不能被缓存。