Http定义了与server交互的不同方法,最主要的方法有4种,各自是GET,POST。PUT,DELETE。

URL全称是资源描写叙述符。我们能够这样觉得:一个URL地址,它用于描写叙述一个网络上的资源,而HTTP中的GET,POST。PUT,DELETE就相应着对这个资源的查,改,增。删4个操作。到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息。而POST一般用于更新资源信息。

  1.依据HTTP规范,GET用于信息获取,并且应该是安全的和幂等的。

  (1).所谓安全的意味着该操作用于获取信息而非改动信息。

换句话说,GET 请求一般不应产生副作用。就是说,它不过获取资源信息,就像数据库查询一样。不会改动。添加数据。不会影响资源的状态。

  * 注意:这里安全的含义不过指是非改动信息。

  (2).幂等的意味着对同一URL的多个请求应该返回相同的结果。

这里我再解释一下幂等这个概念:

  幂等(idempotent、idempotence)是一个数学或计算机学概念,常见于抽象代数中。

  幂等有一下几种定义:

  对于单目运算,假设一个运算对于在范围内的全部的一个数多次进行该运算所得的结果和进行一次该运算所得的结果是一样的,那么我们就称该运算是幂等的。比方绝对值运算就是一个样例。在实数集中。有abs(a)=abs(abs(a))。

  对于双目运算。则要求当參与运算的两个值是等值的情况下。假设满足运算结果与參与运算的两个值相等,则称该运算幂等,如求两个数的最大值的函数。有在在实数集中幂等。即max(x,x) = x。

看完上述解释后,应该能够理解GET幂等的含义了。

  但在实际应用中。以上2条规定并没有这么严格。引用别人文章的样例:比方。新闻网站的头版不断更新。尽管第二次请求会返回不同的一批新闻,该操作仍然被觉得是安全的和幂等的,由于它总是返回当前的新闻。从根本上说,假设目标是当用户打开一个链接时,他能够确信从自身的角度来看没有改变资源就可以。

  2.依据HTTP规范。POST表示可能改动变server上的资源的请求。继续引用上面的样例:还是新闻以站点为例。读者对新闻发表自己的评论应该通过POST实现,由于在评论提交后站点的资源已经不同了,或者说资源被改动了。

  上面大概说了一下HTTP规范中GET和POST的一些原理性的问题。

但在实际的做的时候。非常多人却没有依照HTTP规范去做,导致这个问题的解决办法有非常多,比方说:

  1.非常多人贪方便,更新资源时用了GET,由于用POST必需要到FORM(表单),这样会麻烦一点。

  2.对资源的增,删。改。查操作。事实上都能够通过GET/POST完毕,不须要用到PUT和DELETE。

  3.另外一个是。早期的Web MVC框架设计者们并没有有意识地将URL当作抽象的资源来看待和设计,所以导致一个比較严重的问题是传统的Web MVC框架基本上都仅仅支持GET和POST两种HTTP方法,而不支持PUT和DELETE方法。

  * 简单解释一下MVC:MVC本来是存在于Desktop程序中的,M是指数据模型。V是指用户界面。C则是控制器。

使用MVC的目的是将M和V的实现代码分离,从而使同一个程序能够使用不同的表现形式。

  以上3点典型地描写叙述了老一套的风格(没有严格遵守HTTP规范),随着架构的发展。如今出现REST(Representational State Transfer),一套支持HTTP规范的新风格,这里不多说了,能够參考《RESTful Web Services》。

  说完原理性的问题,我们再从表面现像上面看看GET和POST的差别:

  1.GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?

切割URL和数据传输,參数之间以&相连,如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。假设数据是英文字母/数字,原样发送,假设是空格,转换为+,假设是中文/其它字符。则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD。当中%XX中的XX为该符号以16进制表示的ASCII。

  POST把提交的数据则放置在是HTTP包的包体中。

  2."GET方式提交的数据最多仅仅能是1024字节。理论上POST没有限制。可传较大量的数据。IIS4中最大为80KB。IIS5中为100KB"??!

  以上这句是我从其它文章转过来的,事实上这样说是错误的。不准确的:

  (1).首先是"GET方式提交的数据最多仅仅能是1024字节"。由于GET是通过URL提交数据。那么GET可提交的数据量就跟URL的长度有直接关系了。而实际上,URL不存在參数上限的问题。HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及server对它的限制。IE对URL长度的限制是2083字节(2K+35)。

对于其它浏览器,如Netscape、FireFox等,理论上没有长度限制。其限制取决于操作系统的支持。

  注意这是限制是整个URL长度,而不不过你的參数值数据长度。[见參考资料5]

  (2).理论上讲,POST是没有限制大小的。HTTP协议规范也没有进行限制大小,说“POST数据量存在80K/100K的限制大小”是不准确的,POST数据是没有限制的,起限制作用的是server的处理程序的处理能力。

  对于ASP程序,Request对象处理每一个表单域时存在100K的数据长度限制。

但假设使用Request.BinaryRead则没有这个限制。

  由这个延伸出去。对于IIS 6.0,微软出于安全考虑,加大了限制。我们还须要注意:

     1).IIS 6.0默认ASP POST数据量最大为200KB,每一个表单域限制是100KB。

     2).IIS 6.0默认上传文件的最大大小是4MB。

     3).IIS 6.0默认最大请求头是16KB。

  IIS 6.0之前没有这些限制。[见參考资料5]

  所以上面的80K,100K可能仅仅是默认值而已(注:关于IIS4和IIS5的參数,我还没有确认)。但肯定是能够自己设置的。因为每一个版本号的IIS对这些參数的默认值都不一样,详细请參考相关的IIS配置文档。

  3.在ASP中,服务端获取GET请求參数用Request.QueryString,获取POST请求參数用Request.Form。在JSP中。用request.getParameter(\"XXXX\")来获取,尽管jsp中也有request.getQueryString()方法,但使用起来比較麻烦。比方:传一个test.jsp?name=hyddd&password=hyddd,用request.getQueryString()得到的是:name=hyddd&password=hyddd。

在PHP中,能够用$_GET和$_POST分别获取GET和POST中的数据。而$_REQUEST则能够获取GET和POST两种请求中的数据。

值得注意的是,JSP中使用request和PHP中使用$_REQUEST都会有隐患。这个下次再写个文章总结。

  4.POST的安全性要比GET的安全性高。注意:这里所说的安全性和上面GET提到的“安全”不是同个概念。上面“安全”的含义不过不作数据改动,而这里安全的含义是真正的Security的含义。比方:通过GET提交数据,username和password将明文出如今URL上。由于(1)登录页面有可能被浏览器缓存,(2)其它人查看浏览器的历史纪录,那么别人就能够拿到你的账号和password了。除此之外。使用GET提交数据还可能会造成Cross-site
request forgery攻击。

  总结一下。Get是向server发索取数据的一种请求,而Post是向server提交数据的一种请求,在FORM(表单)中,Method默觉得"GET",实质上,GET和POST仅仅是发送机制不同,并非一个取一个发!

Get与Post的差别的更多相关文章

  1. ROLAP和MOLAP的概念和差别

    ROLAP和MOLAP的概念和差别OLAP(on-Line Analysis Processing)是使分析人员.管理人员或执行人员能够从多角度对信息进行快速.一致.交互地存取,从而获得对数据的更深入 ...

  2. apt-get upgarde和dist-upgrade的差别

    apt-get upgarde和dist-upgrade的差别 apt-get upgarde和dist-upgrade的差别   Debian/Ubuntu Linux都使用apt,升级时都是:  ...

  3. python与ruby的差别

    1.引用文件差别 Ruby:同一目录下的文件,如/usr/local/ruby/foo.rb与/usr/local/ruby/bar.rb两个文件.如果直接在foo.rb中 require 'bar' ...

  4. 【转】responseText,responseBody,responseXML差别

    为了做ajax的代理,研究了下服务器端的xmlhttp和客户端ajax中的xmlhttp,做了个比较 由于我一直使用JavaScript作为Asp的教本语言,所以比较起来更清楚.服务器端的xmlhtt ...

  5. 我的ORM之十二 -- 支持的数据库及差别

    我的ORM索引 支持最好的是SqlServer2005,Sqlserver2008,SqlServer2012 ,后续将支持:MySql,Sqlite,Oracle. 1.分页差别 MsSql 200 ...

  6. save与persist差别

    唯一差别: 在没提交事务情况下 save会产生insert语句,然后因为没提交事务进行回滚. 而这种情况,persist是连insert语句都不会产生.

  7. VS 2008 生成操作中各个选项的差别

    近日,在编译C#项目时经常发现有些时候明明代码没错,但就是编译不过,只有选择重新编译或者清理再编译才会不出错,本着求学的态度,搜罗了下VS2008IDE中生成操作的种类以及差别,整理如下:   内容( ...

  8. Angular 1与 Angular 2之间的一些差别

    现在在用ng1.5.8做一个项目,ng的优点和特性我就不用多说了,ng1在陆续更新到1.5/1.6后就没再推出新版本了,ng2已经面世测试很久了,如同很多系统和框架一样,每个大的版本更新都会有新特性加 ...

  9. PC互联网和移动互联网的本质差别

    网一代,我们先称为PC互联网,这大约可以从2010年作为分界,然后就是基于手机,及可穿戴的移动互联网. 在PC时代,软件都很庞大复杂,甚至客端端和网页混合,比如常见的桌面软件,Office及Photo ...

  10. MyBatis mapper文件中的变量引用方式#{}与${}的差别

    MyBatis mapper文件中的变量引用方式#{}与${}的差别 #{},和 ${}传参的区别如下:使用#传入参数是,sql语句解析是会加上"",当成字符串来解析,这样相比于$ ...

随机推荐

  1. Swift - 内存泄露原因(循环强引用)及解决办法

    Swift使用自动引用计数(ARC)来管理应用程序的内存使用.在大多是情况下,并不需要考虑内存的管理.当实例不再需要的时候,ARC会自动释放这些实例所使用的内存. 但ARC并不是绝对安全的.下面两种情 ...

  2. ASP.NET - TreeView 增删

    效果: 前端代码: <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Si ...

  3. WM_PAINT与WM_ERASEBKGND(用户操作和API这两种情况产生消息的顺序有所不同)

    1)当WM_PAINT不是由InvalidateRect产生时,即由最大化,最小化等产生时,或者移动产生(移动有时只会产生WM_ERASEBKGND消息)系统先发送WM_ERASEBKGND消息,再发 ...

  4. 11661 - Burger Time?

      Burger Time?  Everybody knows that along the more important highways there are countless fast food ...

  5. html适配Anroid手机

    本文全然是翻译与总结谷歌官方的教程,已确保文档的正确性. 免得大家被五花八门的其它的资料弄混了,也没有系统行的学习. 一.设置窗体尺寸和适配屏幕分辨率 谷歌官方文档提到两个大的方面. 1.Viewpo ...

  6. HTML5在input背景提示文本(placeholder)的CSS美化

    本文转自http://www.webhek.com/html5-placeholder-css/ 在火狐浏览器中的写法和在谷歌浏览器和Safari里的写法有些不同.但相信以后会统一. /* 通用 */ ...

  7. LeetCode--Best Time to Buy and Sell Stock (贪心策略 or 动态规划)

    Best Time to Buy and Sell Stock Total Accepted: 14044 Total Submissions: 45572My Submissions Say you ...

  8. QT源码分析(从QApplication开始)

    QT源码分析 转载自:http://no001.blog.51cto.com/1142339/282130 今天,在给同学讲东西的时候,谈到了Qt源代码的问题,才发现自己对Qt机制的了解是在太少了,而 ...

  9. 14.6.1 Creating InnoDB Tables 创建InnoDB 表:

    14.6.1 Creating InnoDB Tables 创建InnoDB 表: 创建一个InnoDB 表,使用CREATE TABLE 语句,你不需要指定 ENGINE=InnoDB子句 如果In ...

  10. ASP.NET 应用程序(Application)生命周期概述

    原文:ASP.NET 应用程序(Application)生命周期概述 引用MSDN:ASP.NET 应用程序生命周期概述 本 主题概述应用程序生命周期,列出重要的生命周期事件,并描述如何编写适合应用程 ...