本来是想看一下django中的HttpResponse的使用细节,无意中发现了这么个”大家都以为自己知道,其实大家真的很少知道“的问题:POST和GET的区别
参考了几篇比较好的文章:
1、GET和POST有什么区别?及为什么网上的多数答案都是错的。
以下是对以上几篇文章的概括总结:
POST和GET的差别其实是很大的。
- 语义上,GET是获取指定URL上的资源,是读操作,而POST的语意是对指定资源“追加/添加”数据。
GET的请求是幂等和安全,所谓幂等,是说GET方法行多次和执行一次的效果是一样,所谓安全是指,除了获取资源外,不会对服务器的资源产生什么影响,所以GET返回的内容可以被浏览器,Cache服务器缓存起来。而POST方法被默认为会改变服务器资源的状态,所以它被认为是不安全的,Cache服务器不会缓存POST请求的任何内容。
从某种意义上来说,GET是围观者(我只看不动手);POST是参与者(我不光看,必要的时候也是会出手的)。
- 形式上,GET的请求参数以Query String的形式跟在url的后面(就是那个?后面一串),而POST的请求参数是放在HTTP的body中的(HTTP的request分为三部分:请求行、请求包头、请求正文,详见:HTTP协议详解)
另外,虽然不常用,GET请求参数也是可以放在body中的,见:HTTP GET with Message Body
在Django中,request的请求参数一般可在4个地方见到:request.POST,request.GET,request.REQUEST(=POST+GET),request.body(只有post请求的时候才会有)。