GET和POST请求
1 HTTP请求的类型
HTTP请求的最基本的方法有4种,分别是PUT、DELETE、POST、GET,对应着对资源的增、删、改、查4个操作,但对资源的增、删、改、查操作,其实都可以通过GET和POST完成,不需要用到PUT和DELETE。
2 GET和POST的区别
| GET | POST | |
|---|---|---|
| 数据传递方式 | 数据会附在URL之后,即放置在HTTP包的包头中,以?分割URL和数据,参数之间以&相连 | 数据会放置在HTTP包的包体中 |
| 对数据大小的限制 | 特定的浏览器和服务器对GET请求的URL的长度有限制,最多只能是1024字节 | 由于不是URL传值,理论上对URL的长度是不会受限制的,但实际上各个服务器会规定对POST提交数据大小进行限制,如Apache、IIS都有各自的配置 |
| 对数据类型的限制 | 只允许ASCII字符 | 没有限制,也允许二进制数据 |
| 安全性 | 数据会暴露在地址栏中,安全性低 | 数据不会暴露在地址栏中,安全性高 |
| 缓存 | 能被缓存 | 不能缓存 |
3 GET和POST的选择
GET和POST方法是为不同的目的而设计的,两者的不同也在于其使用目的。 GET一般用于获取/查询服务器上的资源信息,它会检索要显示在页面中的数据,数据不会在服务器上被更改,因此重新请求相同数据时会得到相同的结果。因此,为了使GET请求更有效率,浏览器会缓存GET请求的执行结果,如果同样的GET请求再次发出,浏览器就会显示缓存的结果而不是重新发起GET请求。 POST一般用于更新服务器上的资源信息,若要更改保存在服务器上的数据,从两个同样的POST请求返回的结果或许会完全不同,这是由于第一个调用已经更新了服务器上的数据。因此,POST请求通常会从服务器上获取响应而不是使用前一个响应的缓存。 因此,不要根据需要传递的数据的大小来决定是要选择GET还是POST,而应该根据使用目的在两者间作出选择:如果是要检索服务器上的数据,则使用GET(注意:由于GET的缓存问题,如果要检索的数据会随时间的改变而改变,则需要在GET请求中添加一个当前时间参数,从而避免使用前一个响应的缓存);如果是要向服务器发送数据,则使用POST。