XmlHTTPRequest的302重定向

XmlHTTPRequest组件有这样的行为:
1)和服务器会话时,它直接将用户现有的cookie信息加入到会话的http
header中。
2)如果服务器发生了跳转,例如服务器返回如下信息:
HTTP/1.1
302 Found
Date:
Thu, 01
Dec 2005
02:00:24
GMT
Server:
Apache/1.3.33 (Unix) PHP/4.4.0 mod_ssl/2.8.24
OpenSSL/0.9.7e
X-Powered-By:
PHP/4.4.0
Location:
testpost.php
那么XmlHTTPRequest的行为将依赖用户浏览器。一般来说XmlHTTPRequest不能得到这个消息头,也不能得到http
302的状态码,而是直接继续访问跳转页面Location:
testpost.php,如果访问成功,直接返回http状态码200,并读取得到此页面的文本输出。
Ie中没有相关配置,只会进行上述行为。
Opera中有“是否允许自动重定向”设置。如果用户不允许自动重定向则xmlHTTPRequest能接收到302信息,xmlHttpRequest不会继续跳转。
Firefox中有一个选项network.http.redirection-limit(20),这个选项是用户所允许的重定向次数。如果设置成0,那么很遗憾,XmlHTTPRequest接收不到任何信息。
『演示代码』

var x =
sajax_init_object();
x.open("GET","testjump.php",true);
function
_callback() {                    if (x.readyState != 4)return;
   sajax_debug("received "
               + x.responseText
               +"\nstatus:"
               
+x.status+"");
   alert("调用结束");
}
if
("[XMLHttpRequest]"==x.constructor){  
x.onload = _callback ;}
else{  x.onreadystatechange = _callback
;}
x.send("");



所以我们可以得出结论:
1)在dhtml的环境里,ajax的身份验证和用户浏览器是等同的,ajax依赖的XmlHTTPRequest和服务器的会话http
header会自动包含浏览器中的cookie.
所以从传统网站过渡到ajax,在用户身份验证上不必花费太大力气。
2)另外,XmlHTTPRequest组件更像浏览器提供给用户的一个组件,而不像一个纯粹的socket组件,它包装了一些行为,例如上面提到的它将用户cookie自动加入http
header到请求信息中,再如刚才提到的它自动读取服务器uri发生跳转以后的页面。
结论:在使用ajax做web应用的时候,基本上和传统web程序身份验证方式相同。只是不能使用自动重定向的方法让没有cookie的用户跳转到登录页面。比较好的方案是使用错误处理的方式,当用户还没有登录时向客户端返回一个错误码,客户端js分析错误码进行跳转。

SOAP的用户身份验证:
我见过的SOAP身份验证有两种,一种是每次请求时,将用户名和密码放到http的header中,这是HTTP标准协议中对于http
header的应用,当然,这是明文的,如果需要加密的话,只能使用ssl,而每次请求都使用ssl显然会影响速度。另一种是使用session,例如MS DotNet
WebService有它的session机制 。但是如果用php实现这些,恐怕要花费很大精力。

结论:ajax的服务端更像一个简单的rpc,虽然和soap有些类似,但是实现一个支持ajax的服务端是很简单的,但是要实现soap就复杂的多了。
但是从业务逻辑的观点来看,ajax的服务端可以做到和soap的服务端类似,成为一种专门提供业务逻辑操作的远程调用接口。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值