1.4. HTTP的原理和方法¶
WebGIS是基于Web技术的,所以我们需要了解HTTP的基本原理和方法。
1.4.1. HTTP中的不同方法¶
HTTP定义了与服务器交互的不同方法。有四种基本方法:GET、POST、PUT和DELETE。URL的全名是资源描述符。我们可以这样想:URL地址是用来描述网络上的资源的,而HTTP中的GET、POST、PUT和DELETE对应着查询、修改、添加和删除该资源的四个操作。在这里应该有一个大致的了解。GET一般用于获取/查询资源信息,POST通常用于更新资源信息。
HTTP GET的等价性¶
根据HTTP规范,GET用于信息检索,应该是安全的和幂等的。
安全意味着该操作用于获取信息,而不是修改信息。换言之,GET请求通常不应该有副作用。它只获取资源信息,就像数据库查询一样,它不会修改或添加数据,也不会影响资源的状态。
注:此处安全的含义仅指未经修改的信息。
幂等意味着对同一URL的多个请求应该返回相同的结果。这里将再次解释幂等的概念:幂等(idempotent, idempotence)是一个数学或计算机概念,在抽象代数中常见。
幂等式有以下定义:
对于一元运算,如果对范围内的所有数字执行多次运算的结果与执行一次运算的结果相同,则称一个运算是幂等运算。例如,绝对值运算就是一个例子。在这组实数中,有
abs(a)=abs(abs(a))
。对于双目运算,要求当运算所涉及的两个值相等时,如果运算结果等于所涉及的两个值,则该运算称为幂等运算。例如,求两个数的最大值的函数在实数集中是幂等的,即
max (x, x) = x
。读完上面的解释,应该能够理解得到幂等的含义。然而,在实际应用中,上述两项规定并不是那么严格。引用别人文章的例子:例如,新闻网站的首页不断更新。尽管第二个请求返回的是另一批新闻,但该操作仍然被认为是安全和幂等的,因为它总是返回当前的新闻。从根本上说,如果目标是当用户打开链接时,从其自己的角度来看,可以确信资源没有改变。
POST方法¶
根据HTTP规范,POST表示可能修改服务器上的资源的请求。继续引用上面的例子:以新闻为例,读者应该在新闻上发布自己的评论,因为评论提交后,或者资源被修改后,网站的资源是不同的。
但在实践中,许多人并不遵循HTTP规范。造成这一问题的原因有很多,例如:
1.很多人在更新资源时贪图方便,使用GET,因为POST必须转到FORM,这样会更麻烦一些。
2.资源的添加、删除、修改、查看等操作实际上可以通过 GET/POST
,而不使用 PUT
和 DELETE
。
3.另一个问题是,早期的Web框架设计者并没有有意识地将URL作为抽象资源来对待和设计,因此一个严重的问题是,传统的Web框架基本上只支持GET和POST。PUT和DELETE方法不支持HTTP方法。
以上三点通常描述的是旧风格(不严格遵守HTTP规范)。随着体系结构的发展,REST(表述性状态转移)作为一种新的支持HTTP规范的风格,可以被称为“REST风格的Web服务”。
1.4.2. HTTP中GET和POST的区别¶
在谈完原则问题之后,让我们从表面上看看GET和POST的区别:
参数提交表¶
GET请求的数据将被附加到URL(即,数据将被放置在HTTP协议头中),URL和传输数据以 ?
,并且参数通过以下方式连接 &
。
如果数据是英文字母/数字,请按原样发送,如果是空格,则将其转换为 + ,如果是中文/其他字符,直接用Base64对字符串加密,得到如下结果: 并得到: %E4%BD%A0%E5%A5%
BD,其中 XX
中的 %XX
是符号的ASCII十六进制表示。
POST请求将提交的数据放在HTTP包的主体中。
提交参数的限制¶
GET方法提交的数据字节数限制,POST的限制。事实上,这是有条件的:
因为GET通过URL提交数据,所以GET可以提交的数据量与URL的长度直接相关。事实上,URL没有参数上限,并且HTTP协议规范也没有限制URL的长度。此限制是对它的特定浏览器和服务器限制。IE的URL长度限制为2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,限制取决于操作系统的支持。
请注意,这仅限于整个URL长度,而不仅仅是参数值的数据长度。
理论上,POST没有大小限制,HTTP协议规范也没有大小限制。不准确地说,帖子数据量有80K/100K的大小限制,对帖子数据没有限制。该角色是服务器处理程序的处理能力。
对于ASP程序,当请求对象处理每个表单域时,有100K的数据长度限制。但如果使用Request.BinaryRead,则没有这样的限制。
从这个扩展开始,出于安全原因,Microsoft增加了对IIS 6.0的限制。
所以上面的80K和100K可能只是缺省值(注:还没有确定IIS4和IIS5的参数),但绝对可以自己设置。由于每个版本的IIS对于这些参数都有不同的默认值,请参考相关的IIS配置文档了解详细信息。
数据提交安全问题¶
POST比GET更安全。注意:这里提到的安全与上面Get中提到的安全不是同一个概念。上面安全的意思只是不修改数据,这里的安全的意思是真正的安全,比如:通过GET提交数据,用户名和密码会以纯文本的形式出现在URL上,因为(1)登录页面可能会被浏览器缓存访问,(2)别人查看浏览器的历史记录,别人就可以得到你的账号和密码。此外,使用GET提交数据还可能导致跨站点请求伪造攻击。
要而论之, GET
是对服务器的数据请求,而 Post
是向服务器提交数据的请求。在FORM(Form)中,方法缺省为“Get”。上面,GET和POST只是不同的发送机制,而不是一个获取和一个发送。这在MapServer应用程序中也很明显,在MapServer应用程序中,可以使用 GET
或 POST
。