GET和POST区别
1、GET
GET方法意思是获取被请求URI(Request-URI)指定的信息(以实体的格式)。如果请求URI涉及到一个数据生成过程,那么这个过程生成的数据应该被作为实体在响应中返回而不是过程的源文本,除非源文本恰好是过程的输出。
如果请求消息包含:
if-Modified-Since,If-Unmodified-Since, If-Match, lf-None-Match
或者lf-Range头域,GET的语义将变成“条件(conditionall)GET”。一个条件GET方法会请求满足条件头域的实体。条件GET方法的目的是为了减少不必要的网络使用,这通过允许利用缓存里仍然保鲜的实体而不用多次请求或传输客户端已经拥有的实体来实现的。
如果请求方法包含一个Range头域,那么GET方法就变成“部分Get”(partial GET)方法。一个部分GET会请求实体的一部分。部分GET方法的目的是为了减少不必要的网络使用,可以允许客户端从服务器获取实体的部分数据,而不需要获取客户端本地已经拥有的部分实体数据。
GET请求的响应是可缓存的(cacheable),此响应满足HTTP缓存的要求。
2、POST
POST方法被用于请求源服务器接受请求中的实体作为请求资源的一个新的从属物。POST被设计涵盖下面的功能。
-已存在的资源的注释。
-发布消息给一个布告板,新闻组,邮件列表,或者相似的文章组。
-提供一个数据块,如提交一个表单给一个数据处理过程。
-通过追加操作来扩展数据库。
POST方法的实际功能是由服务器决定的,并且经常依赖于请求URI(Request-URI)。POST提交的实体是请求URI的从属物,就好像一个文件从属于一个目录,一篇新闻文章从属于一个新闻组,或者一条记录从属于一个数据库。
POST方法执行的动作可能不会对请求URI所指的资源起作用。在这种情况下,200(成功)或者204(没有内容)将是适合的响应状态,这依赖于响应是否包含一个描述结果的实体。如果资源被源服务器创建,响应应该是201(Created)并且包含一个实体,此实体描述了请求的状态。并且引用了这个新资源和一个Location头域。
POST方法的响应是不可缓存的。除非响应里有合适的Cache-Control或者Expires头域。然而,303(见其他)响应能被用户代理利用去获得可缓存的响应。
POST请求必须遵消息传送的要求。
3、URI中敏感信息的编码
因为一个链接的源可能是私有信息或者可能揭露其它私有信息源,所以强烈建议用户能选择是否需要发送Referer头域。例如,浏览器客户端可能为了开放/匿名方式提供一个触发开关,此开关可能使Referer头域和From头域信息的发送有效/无效。
如果参考页面在一个安全的协议上传输,客户端不应该包含一个Referer头域在一个非安全HTTP请求里。
利用HTTP协议的服务作者不应该利用基于窗体GET提交敏感数据,因为这个能引起数据在请求URI里被编码。许多已存在的服务,代理,和用户代理将在对第三方可见的地方记录请求URI。服务器能利用基于窗体POST提交来取代基于窗体GET提交。
4、GET和POST区别
-安全性:POST>GET
-GET请求的响应是可缓存的,POST方法的响应是不可缓存的。
-GET参数通过URL传递,POST放在Requst body中。
-服务端获取GET请求参数用Request.QueryString,获取POST请求参数用Request.Form
-GET请求有长度限制,而POST理论上没有
-GET用于信息获取,而且应该是安全和幂等的;POST表示可能修改变服务器上的资源请求。
-两者请求过程不一样,GET比POST更快。