`
zyjwy02
  • 浏览: 139192 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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的服务端类似,成为一种专门提供业务逻辑操作的远程调用接口。

分享到:
评论

相关推荐

    Ajax xmlHttpRequest的status的值的含义

    xmlHttpRequest对象的status代表当前http请求的状态,是一个长整型数据,现在介绍一下它的含义。 http请求状态及其含义表 1xx – 信息提示 100 – 初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1...

    chrome.sockets.tcp.xhr:使用 Chrome Sockets 的 XMLHttpRequest,基于 https

    使用 Chrome 套接字的 XMLHttpRequest 这是在 Chrome 浏览器上使用 chrome.sockets.tcp 的 XMLHttpRequest 类。 从分叉。 请检查文档。... 仅支持获取 HTTP 304 重定向 URL。 支持首次接收数据超时。

    GDPR Privacy Monitor-crx插件

    语言:English ...监视网站后,您将收到一份包含以下信息的报告-用户信息-第三方请求列表-重定向-第一方Cookie-第三方Cookie-localStorage-sessionStorage-第三方请求-第三方像素跟踪-xmlhttprequest-sub_frame

    GlobalAjaxListener:监听页面全局ajax请求的插件,可以做很多的事情~

    浏览器ajax的对象XMLHttpRequest本身自己就是一个javascript对象,无非是调用执行它进行请求响应。没错,我们就是改变重写它! GlobalAjaxListener 对象# 1、获取GlobalAjaxListener对象:var listener = ...

    jQuery File Upload文件上传插件-其他

    支持使用跨站点XMLHttpRequest或iframe重定向将文件上传到其他域。 13、多个插件实例: 允许在同一网页上使用多个插件实例。 14、可自定义和可扩展: 提供API来设置各个选项并为各种上传事件定义回调方法。 15、分段...

    CORS Unblock-crx插件

    此扩展通过为浏览器收到的每个请求提供自定义的“ access-control-allow-origin”和“ access-control-allow-methods”标头,提供对XMLHttpRequest和获取方法的控制。 用户可以从工具栏按钮打开和关闭扩展名。 要...

    node-fetch:一个轻量级的模块,将Fetch API引入Node.js

    一个轻量级的模块,将引入Node.js。... 有用的扩展,例如重定向限制,响应大小限制,用于故障排除的。 与客户端提取的区别 查看已知差异: 如果您碰巧使用了window.fetch提供的缺失功能,请随时提出问题。 也欢迎请求

    Request Maker-crx插件

    请求制造商只捕获通过HTML表单和XMLHTTPRequest发送的请求;它不会使用有关图像和样式表的无用信息填充日志。标签的日志是特定于页面操作弹出窗口中的标签,请求是书签的。发送请求后,您只需单击您将在任何其他页面...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 上

    14.2、XMLHttpRequest对象 14.3、第一个AJAX程序 14.4、异步验证 14.5、返回XML数据 14.6、本章摘要 14.7、开发实战讲解(基于Oracle数据库) 第15章 Struts基础开发 15.1、Struts简介 15.2、配置Struts开发...

    MLDN+李兴华+Java+Web开发实战经典.part3.rar )

    14.2、XMLHttpRequest对象 14.3、第一个AJAX程序 14.4、异步验证 14.5、返回XML数据 14.6、本章摘要 14.7、开发实战讲解(基于Oracle数据库) 第15章 Struts基础开发 15.1、Struts简介 15.2、配置...

    李兴华 java_web开发实战经典 源码 完整版收集共享

    14.2、XMLHttpRequest对象 14.3、第一个AJAX程序 14.4、异步验证 14.5、返回XML数据 14.6、本章摘要 14.7、开发实战讲解(基于Oracle数据库) 第15章 Struts基础开发 15.1、Struts简介 15.2、配置Struts开发...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 下

    14.2、XMLHttpRequest对象 14.3、第一个AJAX程序 14.4、异步验证 14.5、返回XML数据 14.6、本章摘要 14.7、开发实战讲解(基于Oracle数据库) 第15章 Struts基础开发 15.1、Struts简介 15.2、配置Struts开发...

    李兴华Java Web开发实战经典.pdf (高清版) Part1

    14.2、XMLHttpRequest对象 14.3、第一个AJAX程序 14.4、异步验证 14.5、返回XML数据 14.6、本章摘要 14.7、开发实战讲解(基于Oracle数据库) 第15章 Struts基础开发 15.1、Struts简介 15.2、配置...

    李兴华 Java Web 开发实战经典 高清扫描版Part3

    14.2、XMLHttpRequest对象 14.3、第一个AJAX程序 14.4、异步验证 14.5、返回XML数据 14.6、本章摘要 14.7、开发实战讲解(基于Oracle数据库) 第15章 Struts基础开发 15.1、Struts简介 15.2、配置Struts开发...

    李兴华Java Web开发实战经典(高清版) Part2

    14.2、XMLHttpRequest对象 14.3、第一个AJAX程序 14.4、异步验证 14.5、返回XML数据 14.6、本章摘要 14.7、开发实战讲解(基于Oracle数据库) 第15章 Struts基础开发 15.1、Struts简介 15.2、配置...

    java web 视频、电子书、源码(李兴华老师出版)

    14.2、XMLHttpRequest对象 14.3、第一个AJAX程序 14.4、异步验证 14.5、返回XML数据 14.6、本章摘要 14.7、开发实战讲解(基于Oracle数据库) 第15章 Struts基础开发 15.1、Struts简介 15.2、配置...

    千方百计笔试题大全

    164、介绍一下XMLHttpRequest对象 38 165、AJAX应用和传统Web应用有什么不同? 38 166、如何用JQuery进行表单验证? 39 167、Prototype如何实现页面局部定时刷新? 40 168、Prototype如何为一个Ajax添加一个参数? ...

    java面试宝典

    164、介绍一下XMLHttpRequest对象 38 165、AJAX应用和传统Web应用有什么不同? 38 166、如何用JQuery进行表单验证? 39 167、Prototype如何实现页面局部定时刷新? 40 168、Prototype如何为一个Ajax添加一个参数? ...

    php网络开发完全手册

    17.4.7 浏览器重定向 292 17.4.8 Cookie的常见问题 293 17.5 Cookie应用实例——登录验证 293 17.5.1 HTML表单的设计 293 17.5.2 验证页面的编写 294 17.5.3 欢迎页面的编写 295 17.5.4 代码的运行 296 17.6 Cookie...

Global site tag (gtag.js) - Google Analytics