`

重定向(Redirect)相关的几个问题

阅读更多

此次挂接用户中心,交互大都通过重定向( Redirect )实现。期间也遇到了一些问题,总结如下。

Redirect 原理及使用

1. 重定向原理
重定向方式是在客户端作的重定向处理。该方法通过修改 HTTP 协议的 HEADER 部分 , 对浏览器下达重定向指令的,让浏览器对在 location 中指定的 URL 提出请求,使浏览器显示重定向网页的内容。
该方法可以接受绝对的或相对的 URLs 。如果传递到该方法的参数是一个相对的 URL ,那么 Web container 在将它发送到客户端前会把它转换成一个绝对的 URL

2. sendRedirect 可以将页面跳转到任何页面,不一定局限于本 web 应用中。用法如下:

response.sendRedirect("/login.jsp");

response.sendRedirect("http://union.baidu.com");

3. 跳转后浏览器地址栏变化。

4. 这种方式要传值出去的话,只能在 url 中带 parameter 或者放在 session 中,无法使用 request.setAttribute 来传递。

Redirect vs Forward

1. Forward 重定向是在容器内部实现的同一个 Web 应用程序的重定向,所以 forward 方法只能重定向到同一个 Web 应用程序中的一个资源,重定向后浏览器地址栏 URL 不变,而 sendRedirect 方法可以重定向到任何 URL ,因为这种方法是修改 http 头来实现的, URL 没什么限制,重定向后浏览器地址栏 URL 改变。

2. forward 重定向将原始的 HTTP 请求对象( request )从一个 servlet 实例传递到另一个实例,而采用 sendRedirect 方式两者不是同一个 application

3. 基于第二点,参数的传递方式不一样。 forward form 参数跟着传递,所以在第二个实例中可以取得 HTTP 请求的参数。 sendRedirect 只能通过链接传递参数, response.sendRedirect(“login.jsp?param1=a”)

Ajax 请求处理重定向

对于 Ajax 请求,客户端不会处理该 302 的重定向请求,即页面无响应。

当我们请求发生在服务器 session 失效下,服务器自动 302 到登录页面,那我们异步获取的是登录页面的数据。事实上,并没有发生失败事件,浏览器会再发一次 ajax 请求到 302 的地址,如果还是发生 302 ,一直请求,直到完成请求或者请求跨域失败为止。对于 js 来说, 301 302 这种跳转是透明的,无法处理。

那到底如何当 ajax 正确处理 302 呢,这是浏览器级别的问题,也就是说没有浏览器能正确处理 302

对于我们前端来说,正确的验证 ajax 回来的数据,并给出提示,那也不友好(比如服务器端希望我们去登录页面)。更友好的处理是当服务器端发生 302 ,那 ajax 就当 " 错误 " 处理,也做 302 跳转。

后一种修改方式(某产品线目前所采用的方案)即向 ajax 中添加对 302 的处理。这需要修改 common.js Ajax 类,以及 dwr 源代码,添加对 302 重定向的处理(跳转到登陆页)。

xml.onreadystatechange = function() {

。。。

else if(xml.status == 302 && success) {

       location.href="/ ×× /login.jsp";

} else if

。。。

}

分享到:
评论

相关推荐

    spring mvc重定向导致内存溢出解决方案

    在本例中,具体体现在以下几个方面: - **重定向URL长度限制**:浏览器和服务器对URL长度都有一定的限制。过长的URL不仅可能导致客户端无法正确解析,也会增加服务器处理的负担。 - **服务器资源消耗**:每处理一次...

    ASP.NET 重定向的几种方法小结

    特别提示,在使用Response.Redirect进行包含汉字的查询字符串重定向时,需要使用Server.UrlEncode方法对汉字进行编码,以防止URL编码问题导致的乱码。 总的来说,选择正确的重定向方法对于优化用户体验和提高应用...

    linux内核实现url重定向

    在提供的代码中,可以看到几个关键的函数和结构体,它们共同构成了URL重定向的内核模块。 1. `tcp_newpack` 函数:这个函数用于创建一个新的TCP数据包。它接受源和目的IP地址、源和目的端口号、序列号和确认号以及...

    .htaccess重定向和url重写的几个例子.docx

    `.htaccess` 文件是 Apache 服务器配置中的一个小型文本文件,它允许你在网站的根目录或其他子目录下进行一些基本的服务器配置,如重定向、URL 重写、错误页面定制以及安全设置等,而无需修改全局的 `httpd.conf` ...

    Magento1自定义登录重定向

    要实现自定义登录重定向,我们需要关注以下几个关键步骤: 1. **创建模块**:首先,你需要创建一个新的Magento模块。这通常涉及在`app/etc/modules`目录下创建XML配置文件,声明模块的命名空间、别名、版本等信息。...

    转发和重定向的区别

    在Web开发中,"转发"(Forward)和"重定向"(Redirect)是两种常见的页面跳转方式,它们虽然在效果上看似相似,但其实有着本质的区别。理解这两种技术的工作原理及其应用场景对于优化应用程序的性能和用户体验至关...

    比较详细的win2003 IIS6.0 301重定向带参数的问题解决方法

    微软提供了几个特定的变量来帮助传递URL的不同部分,包括: 1. `$S`:这个变量用于传递URL的后缀,即请求URL中除根目录外的部分,不包含查询字符串(query string)。 2. `$P`:此变量用于传递URL中的查询参数,但...

    USB重定向器,usb redirector,没有授权,可试用

    这可能由于以下几个原因: 1. 网络延迟:公网的网络速度和稳定性相比于局域网通常较差,这可能导致USB设备的操作延迟,影响用户体验。 2. 安全问题:公网传输可能会增加数据被拦截或窃取的风险,因此需要更高级别...

    请求转发与重定向的区别

    在Web应用开发中,请求转发(Request Forwarding)和重定向(Redirect)是两种常见的用于控制用户请求流向的技术。理解它们的区别对于深入学习Java Servlet、Web编程或HTTP协议至关重要。 首先,请求转发是在服务器...

    asp.net 重定向AND生成静态页.rar

    在这个“asp.net 重定向AND生成静态页.rar”压缩包中,我们主要讨论两个核心概念:重定向和静态页面生成。 一、ASP.NET 重定向 在ASP.NET中,重定向是Web应用程序中常用的一种技术,用于将用户从一个URL(统一资源...

    asp代码实现301重定向

    总结一下,ASP代码实现301重定向主要涉及到以下几个关键点: 1. 使用Response对象的Redirect方法。 2. 设置HTTP状态码为301,表示永久重定向。 3. 添加Location HTTP头,指定新URL的位置。 4. 在适当的地方(如全局....

    DB2重定向恢复.doc

    重定向恢复需要注意几个关键点: - 数据库在创建时不应使用自动存储。例如,`db2 create db flm automatic storage no on d:`。 - 在非自动存储的数据库中创建新表空间时,必须指定`MANAGED BY SYSTEM`或`MANAGED ...

    Django中几种重定向方法

    `redirect` 函数来自 `django.shortcuts` 模块,它是一个便捷的重定向函数,可以接受视图名或URL作为参数。同时,`reverse` 函数用于根据视图名称生成URL。两者结合使用,可以实现基于视图的重定向: ```python ...

    网站301重定向教程

    网站301重定向是一种重要的SEO(搜索引擎优化)和网站管理技术,用于将一个URL(统一资源定位符)永久地转移到另一个URL。这种技术在多种情况下都非常有用,比如当网站改版、域名更换或者URL结构调整时。了解并正确...

    LOD云中身份和重定向的演变审视.pptx

    在比较新旧身份图的过程中,研究人员注意到几个显著差异: - 新的身份图H包含了比旧图G更多的实体。 - 从三元组到实体的比例来看,H图中的这个比例从G图中的3.12下降到了0.94,这表明H图中的冗余边可能较少。 - H图...

    Rudra-Redirect:重定向

    在本案例中,我们关注的是名为"Rudra-Redirect"的项目,它似乎是一个专门处理重定向功能的工具或库,特别是与PHP语言相关的。下面我们将详细探讨重定向的概念、类型以及Rudra-Redirect可能提供的功能。 重定向有...

    开发语言-16-重定向.ev4.rar

    重定向分为几种类型:301永久重定向、302临时重定向、303 See Other 和 307 Temporary Redirect。 1. **301永久重定向**:当网页内容永久移动到新的URL时,服务器会返回301状态码。这样做有助于转移旧页面的SEO权重...

    请求转发和重定向的区别共1页.pdf.zip

    两者的主要区别体现在以下几个方面: 1. 执行地点:请求转发发生在服务器端,而重定向发生在客户端。 2. 请求次数:请求转发只需一次HTTP请求,重定向需要两次。 3. 上下文信息:请求转发保留请求上下文,重定向不...

    HTTP-Redirect:仅使用纯HTML重定向到另一个网站

    标题"HTTP-Redirect:仅使用纯HTML重定向到另一个网站"指的是通过HTML代码来实现页面的重定向。虽然这不是最常见的方式,但在某些情况下,比如简单的单页应用或静态网站,可以使用HTML的`<meta>`标签进行重定向。例如...

Global site tag (gtag.js) - Google Analytics