针对GET& POST的掌握可以说是迷迷糊糊的,今天特意拿出来好好整理一下,便于掌握理解。
在服务器端都有一个用来标识资源位置的符号,被称为统一资源标识(URL)。
URI有两种形式。分别为URL何URN.
URL
统一资源定位符(URL,英语UniformResourceLocator的缩写)也被称为网页地址,是因特网上标准的资源的地址。
URL的格式由下列三部分组成: (协议)://(主机名):(端口号) / (文件路径)/(文件名)
第一部分是协议(或称为服务方式);
第二部分是存有该资源的主机IP地址(有时也包括端口号);
第三部分是主机资源的具体地址。,如目录和文件名等。
第一部分和第二部分之间用“://”符号隔开,第二部分和第三部分用“/”符号隔开。第一部分和第二部分是不可缺少的,第三部分有时可以省略。现在几乎所有的URI都是URL。
URN
统一资源名称 (Uniform Resource Name, URN),唯一标识一个实体的标识符,但是不能给出实体的位置。系统可以先在本地寻找一个实体,在它试着在Web上找到该实体之前。它也允许Web位置改变,然而这个实体却还是能够被找到。URN 可以提供一种机制,用于查找和检索定义特定命名空间的架构文件。尽管普通的 URL 可以提供类似的功能,但是在这方面,URN 更加强大并且更容易管理,因为 URN 可以引用多个 URL。与 URL 不同,URN 与地址无关。URN 和 URL 都属于 URI。URN在web中主要应用是下拉菜单的制作。使用URN时下拉菜单的易扩展性将会得到很大的提高。
HTTP
Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。
1.根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。
(1).所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。
* 注意:这里安全的含义仅仅是指是非修改信息。
(2).幂等的意味着对同一URL的多个请求应该返回同样的结果。
2.根据HTTP规范,POST表示可能修改变服务器上的资源的请求。继续引用上面的例子:还是新闻以网站为例,读者对新闻发表自己的评论应该通过POST实现,因为在评论提交后站点的资源已经不同了,或者说资源被修改了。
对于HTTP原理性的东西,人们在实际项目中并没有遵守:
1.很多人贪方便,更新资源时用了GET,因为用POST必须要到FORM(表单),这样会麻烦一点。
2.对资源的增,删,改,查操作,其实都可以通过GET/POST完成,不需要用到PUT和DELETE。
3.另外一个是,早期的Web MVC框架设计者们并没有有意识地将URL当作抽象的资源来看待和设计,所以导致一个比较严重的问题是传统的Web MVC框架基本上都只支持GET和POST两种HTTP方法,而不支持PUT和DELETE方法。
GET & POST区别
1.请求数据的位置,
GET 请求会把请求的数据放在url的后面用?分割,提交的每一项使用&来分割,也就是将请求的数据放在请求的头部。如果是中文或者其他字符使用BASE64来加密;而POST借助form将请求的数据放在请求的请求体。
2.长度的限制
针对这个长度的限制,是非常有争议的说法。HTTP协议明确地指出了,HTTP头和Body都没有长度的要求。而对于URL长度上的限制,有两方面的原因造成:
a.浏览器。据说早期的浏览器会对URL长度做限制。据说IE对URL长度会限制在2048个字符内(统一认可)
b.服务器。URL长了,对服务器处理也是一种负担。
3.安全性
由于GET是将参数放在url的后面,直接暴露出来,所以会相对不安全。这是因为使用GET的数据可能会被缓存起来,这样就会导致所谓的不安全。知乎中总结的一些使用GET的场景:
- 请求中的URL可以被手动输入
【参考】
1.http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html
2.http://blog.csdn.net/csh624366188/article/details/8568621
3.http://www.nowamagic.net/librarys/veda/detail/1919