GET与POST的区别

GET与POST的区别

  • 2018年3月21日

1. 参数

  • GET传递的参数只能带URL后面,文本格式QueryString,各浏览器一般有长度限制,一般认为是2083,如果有中文字符则更短。提交到服务端的数据量小。
  • POST可以传递application/x-www-form-urlencoded的类似QueryString、multipart/form-data的二进制报文形式(支持文件信息嵌入报文传输)、纯文本或二进制的body参数。提交到服务器端的数据量大。

2. 缓存

  • GET默认可以复用前面的请求数据作为缓存结果返回,此时以完整的URL作为缓存数据的KEY。

    有时候为了强制每次GET请求都是新数据,我们可以在URL后面加上一个随机参数、时间戳或版本号。比如,在jQuery.ajax()方法中,如果把cache=false,则会在GET请求参数中附加_={timesatmp}来禁用缓存。

  • POST则一般不会被缓存因素影响。

3. 安全性

  • 默认对于nginx的access log,会自动记录GET和POST的完整URL,包括其中带的参数。
  • 而对于POST来说,请求的报文却不会被记录,这对于敏感数据来说POST更安全一些。

注:这两者都是明文传送,只是GET的URL会被记录在浏览器和Web服务器的日志中,而POST发完就发完了,不存在什么历史和日志什么的。但是如果被抓了包,GET和POST都没什么卵用,HTTPS该用还是得用。

4. 用途

  • GET用于从服务端获取数据,包括静态资源的加载、动态数据的展示等。
  • POST用于向数据提交数据,比如新增、删除、修改数据等。

总的来说,可以重复的交互,比如取个数据、跳个页面用GET,不可以重复的操作,比如创建一个条目、修改一条记录用POST。