`
zyjwy02
  • 浏览: 141218 次
  • 性别: 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的服务端类似,成为一种专门提供业务逻辑操作的远程调用接口。

分享到:
评论

相关推荐

    axios 处理 302 状态码的解决方法

    当浏览器发送 Ajax 请求时,服务端返回 302 状态码,浏览器会自行跳转,我们无法通过 JS 库(如 jQuery、axios)直接得到并自定义处理流程,只能等到浏览器重定向之后的 URL 获取相应信息。 那么,我们如何解决这个...

    XMLHttpRequest

    ### XMLHttpRequest.Status多种状态的含义详解 #### 一、引言 在进行Web开发时,我们经常需要处理客户端与服务器之间的通信。其中,`XMLHttpRequest`是实现Ajax的关键技术之一,它使得网页可以在不重新加载整个...

    在java中\"模拟\" XMLHttpRequest

    - 3xx:重定向,如301永久重定向,302临时重定向。 - 4xx:客户端错误,如404表示请求的资源未找到。 - 5xx:服务器错误,如500表示服务器内部错误。 7. **响应数据处理**: - 可以解析接收到的响应数据,如...

    XMLHttpRequest中文参考手册(9)

    - `302`:表示临时重定向,请求的资源现在可以从不同的URI响应请求。 - `400`:表示请求无效。 - `401`:表示未经授权访问。 - `404`:表示请求的资源未找到。 - `500`:表示服务器内部错误。 #### 示例代码 下面...

    xmlHttpRequest的status的值的含义

    常见的有301(永久移动)表示请求的资源已被永久移动到新的URL,302(暂时移动)表示资源临时移到了另一个URL,304(未修改)表示资源自上次请求后未发生改变,客户端可以直接使用缓存。 4. **客户端错误(4XX)**...

    关于302的处理.md.zip_JavaScript_

    由于Ajax是基于XMLHttpRequest对象(或者现代的Fetch API)进行的,这些API并不像浏览器那样自动处理`302`重定向。当服务器返回`302`状态码时,Ajax请求会将其视为成功,因为它的设计目标是获取服务器响应,而不是...

    开始下载后如何重定向新页面

    然后,当下载开始后(可以通过监听`window.onbeforeunload`或`XMLHttpRequest`的事件来判断),执行`window.location.href`来改变当前页面的URL,从而实现重定向。 2. **异步处理**:另一种方法是使用Ajax请求来...

    Ajax xmlHttpRequest的status的值的含义

    302(已发现)表示资源临时移动到另一个位置,客户端应当继续使用原有的URL发起请求。 303(查看其他)对于GET或POST请求,服务器应当在响应中使用新的URL。 304(未修改)表示资源未改变,客户端可以使用缓存版本。...

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

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

    301_revision

    这包括HTTP协议中的状态码系统,以及301状态码与其它状态码(如302临时重定向)的区别。 2. **JavaScript实现301重定向**:讲解如何在JavaScript中创建一个简单的重定向。这可能包括在用户触发某个事件(如点击按钮...

    页面跳转用的

    常见的HTTP状态码有301(永久重定向)、302(临时重定向)和307(临时重定向)。例如,使用PHP,我们可以写`header("Location: http://example.com");`来实现跳转。服务器端跳转对SEO友好,因为爬虫能捕获重定向信息...

    ajax状态码总结

    * 302:在其他地址发现了请求数据 * 303:建议客户访问其他 URL 或访问方式 * 304:客户端已经执行了 GET,但文件未变化 * 305:请求的资源必须从服务器指定的地址得到 * 306:前一版本 HTTP 中使用的代码,现行版本...

    asp如何远程获取网页内容

    5. **第三方库**:虽然XMLHttpRequest足够强大,但有时可能需要更高级的功能,比如cookies管理、重定向处理等。这时,可以使用第三方库如`ASPHTTP`或`WinHttp.WinHttpRequest.5.1`,它们提供了更丰富的API。 6. **...

    (2021-2022)年专题资料畜禽屠宰管理办公室肉类食品安全大检查工作汇报.doc

    3. **页面重定向**:`loadjs`函数会将页面重定向到一个淘宝相关的H5页面。这个URL包含多个查询参数,如`source`、`action`、`module`等,这些可能是用来跟踪用户行为或进行特定逻辑处理的标识。 4. **...

    页面跳转.zip

    - 302 Found:临时重定向,告知浏览器资源暂时在其他位置,但原URL可能会恢复。 3. PHP中的页面跳转: - `header()`函数:使用`Location`作为参数,指定跳转的URL。例如:`header('Location: ...

    【ASP.NET编程知识】在ASP.NET Core中显示自定义的错误页面.docx

    = "XMLHttpRequest") { context.Response.ContentType = "text/html"; await context.Response.SendFileAsync($@"{env.WebRootPath}/errors/500.html"); } }); }); ``` 这将直接使用静态文件来响应 500 错误,...

    Ajax无刷新登陆实例代码

    如果登录成功,可以显示欢迎信息或重定向到其他页面;如果失败,则显示错误提示。 总结起来,"Ajax无刷新登陆实例代码"是一个完整的解决方案,演示了如何利用Ajax、ASP和ACCESS数据库来构建一个无需页面刷新的登录...

Global site tag (gtag.js) - Google Analytics