在 AngularJS 中处理来自代理的 HTTP 302 响应

2024-04-06

我有一个反向代理,可以检查多个应用程序的全局身份验证。当用户断开连接但仍尝试使用我的应用程序时,代理会发送 302 响应:

HTTP/1.1 302 Found
Date: Wed, 11 Sep 2013 09:05:34 GMT
Cache-Control: no-store
Location: https://other.url.com/globalLoginPage.html
Content-Length: 561
Content-Type: text/html; charset=iso-8859-1
Via: 1.1 my-proxy.com
Connection: Keep-Alive

在 AngularJs 中,调用了错误回调,但响应标头为空,状态为 0,数据为空字符串。所以看来我真的无能为力来处理响应......
我已经看到了关于这个主题的几个问题,但我仍然不明白发生了什么(CORS 因为代理或位置中的不同域?,302 浏览器行为?)。
特别是答案中的这一部分(https://stackoverflow.com/a/17903447/1093925 https://stackoverflow.com/a/17903447/1093925):

注意:如果您的服务器将响应代码设置为 301 或 302,您将无法获取 Location 标头,因为它将自动且透明地跟随 XMLHttpRequest 对象。

这个 XMLHttpRequest 对象怎么样?
在非常旧的 Chrome 版本中(无法使用较新的版本),我可以在网络面板中看到相应的请求,但它似乎失败了,因为没有响应。
在最新版本的 Firefox 中,没有任何反应。

由于我无法更改代理配置和响应,我可以对此做些什么吗?

Update:
我今天重演了我的场景,感谢新版本的 Firebug,我能够获得有关正在发生的事情的更多详细信息。
我离问题的答案不远了:跨域策略。
由于它是我的应用程序发出的 HTTP 请求,因此浏览器拒绝以下 XMLHttpRequest(该请求在应用程序中看起来像相同的请求)。因此出现错误和空响应。
所以我认为我对此无能为力


我的应用程序中也遇到了同样的问题。 您无法真正“捕获”302 重定向响应。浏览器会在 Angular 处理之前捕获它。所以实际上,当您收到回复时 - 已经太晚了。

坏消息:这在角度平台上不是问题。 xmlHttpRequest 不支持这种行为,并且浏览器会在您执行任何操作之前采取行动。 参考:防止 Xmlhttprequest 重定向 https://stackoverflow.com/questions/228225/prevent-redirection-of-xmlhttprequest

好消息:有很多方法可以绕过这个问题,通过拦截响应并找到某种方法来识别这是您可爱的 302。这是一个 hack,但这是您目前可以做的最好的事情。

So.例如,在我的应用程序中,重定向回到应用程序的login.html页面,在应用程序中我得到了状态为200的响应,响应的数据是我的login.html页面的内容。 所以在我的拦截器中,我检查结果是否是一个字符串(通常不是!所以-没有效率问题..),如果是的话-检查它是否是我的login.html页面。这样,我就可以捕获重定向并按照我的方式处理它。

yourApp.factory('redirectInterceptor', ['$location', '$q', function($location, $q) {
    return function(promise) {
        promise.then(
            function(response) {
                if (typeof response.data === 'string') {
                    if (response.data.indexOf instanceof Function &&
                        response.data.indexOf('<html id="ng-app" ng-app="loginApp">') != -1) {
                        $location.path("/logout");
                        window.location = url + "logout"; // just in case
                    }
                }
                return response;
            },
            function(response) {
                return $q.reject(response);
            }
        );
        return promise;
    };
}]);

然后将此拦截器插入到您的应用程序中。像这样的东西:

$httpProvider.responseInterceptors.push('redirectInterceptor');

祝你好运。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 AngularJS 中处理来自代理的 HTTP 302 响应 的相关文章

  • 角度 ng-repeat 根据条件添加样式

    我在 div 列表上使用 ng repeat 并且在渲染此 div 的 json 中手动添加项目 我需要定位我在 json 中添加的最后一个 div 它会自动在屏幕上渲染 即 couse 光标所在的位置 其余部分保持在相同位置 但没有给出渲
  • AngularJS - RouteProvider 解析调用服务方法

    我创建了一项检查用户登录状态的服务 如果令牌存在 则登录用户 否则重定向到登录页面 最初我通过routeProvider解析调用了这个服务 这一次就可以完美工作 但是由于Angularjs服务是单例的 因此测试不会针对连续调用运行 然后 我
  • Angular js 服务器端过滤器和分页

    我有几个输入字段 我们可以使用带有搜索名称的输入字段作为示例 当有人在该字段中输入内容时 我希望能够过滤对象的结果 但我想做过滤器服务器端而不是客户端 我有一个包含大量记录的数据库 因此我不想返回所有记录并在客户端进行过滤 这确实会减慢速度
  • AngularJS - 将文本格式从 JSON 返回到标题大小写

    我有一个从 JSON 文件检索数据的服务 数据内有些数据全部为大写 例如 scope FootballClubs CompanyName MANCHESTER UNITED LIVERPOOL FOOTBALL CLUB CHELSEA W
  • AngularStrap 工具提示禁用我的自定义指令

    我正在尝试让 bs tooltip AngularStrap 指令与我自己的名为 checkStrength 的自定义指令一起使用 该指令检查密码的强度 单独使用这些指令中的任何一个时 它们都可以正常工作 但不能一起工作 This http
  • Angularjs : $locationProvider.hashPrefix("!") ;

    我想将网址显示为 www test com 因为我正在使用 locationProvider hashPrefix 但它显示网址为 www test com 我想 哈希之前而不是哈希之后 Thanks var app angular mod
  • 从 JSON 文件注入的编译指令 AngularJS

    希望有人能帮助我应对这一挑战 我使用以下命令从服务器请求 JSON 数据 http get 来自服务器的数据返回一个对象 对象中的一个值包含 HTML 标记 该标记使用以下方式注入到页面中 div div 在标记内 有一个名为的自定义指令
  • 无法使用 Ninject 将依赖项注入到从 Angular 服务调用的 ASP.NET Web API 控制器中

    我将 Ninject 与 ASP NET MVC 4 一起使用 我正在使用存储库 并希望进行构造函数注入以将存储库传递给其中一个控制器 这是实现 StatTracker 接口的上下文对象 EntityFramework public cla
  • Angular 模态对话框最佳实践

    与不具有动态内容的对话框相比 创建具有动态内容的模式对话框的最佳实践是什么 例如 我们有一些模式表单接受表单元素列表 并具有提交 取消功能 此外 还有一些模式对话框仅显示确认 确定类型的操作 我见过很多人说对话框应该是传递到控制器的服务 但
  • 为什么我无法将 $location 注入到我的 config() 中?

    为什么这会给我一个错误 angular module app config function routeProvider locationProvider httpProvider location 未捕获的错误 未知的提供商 来自应用程序
  • 使用 ng-table 角度计算列的总和

    我正在使用 Angular ng table 以表格形式绘制数值数据 我无法弄清楚如何在表末尾引入一行 该行显示每列所有值的总和 我可以在服务器端计算数据并将其呈现在用户界面中 但有没有办法在 ng table ng grid 中实现这一点
  • 从角度 $uibModal 背景单击返回数据

    我正在尝试从 uibModal 传回一个值 如果用户单击模式的关闭按钮 我可以定义返回 scope close function modalInstance close scope editMade 但如果用户单击背景区域 这将不起作用 如
  • 优雅地处理 AngularJS 错误:$injector:nomod 模块不可用

    我的角度应用程序依赖于第三方角度服务 var app angular module ninjaModule angular google analytics 只要我的广告拦截插件关闭 该应用程序就可以正常加载 然而 随着广告拦截器的角度抛出
  • AngularJS 在指令运行之前通过 AJAX 检索数据

    我正在使用 AngularUIuiMap http angular ui github com directives map实例化谷歌地图的指令 uiMap 指令非常适合处理硬编码数据 mapOptions and myMarkers 但是
  • 嵌套指令 - 无法将参数从 Angularjs 中的子指令传递到控制器方法

    我在 angularjs 中的嵌套指令方面遇到了一些问题 我想从另一个指令中的指令调用控制器方法 并尝试将参数传递给它 但是它们是未定义的 我尝试使用下面的 selected html 中的三个参数来调用remove 在我引入父指令 tel
  • 如何像在 jQuery 中一样在 AngularJS 中触发事件?

    是否可以做类似的事情 container trigger click 仅使用 AngularJS 如果不可能trigger 还有其他方法来管理这种行为吗 我有一个基本示例 可以在单击按钮时创建一个框 创建的框是可拖动的 现在 用户必须单击按
  • 在d3.js中将2D形状转换为3D,并根据ANGULAR中的值调整高度

    我正在使用 d3 js v6 创建以下 2D 图表表示的 3D 图表 这个圆圈中有多个正方形 每个正方形都根据值分配了一种颜色 值越大 正方形越暗 现在我想将其转换为 3D 形状 其中当值变高时 只有特定正方形的高度会增加 因此结果在某种程
  • 如何获取 ng-repeat 中的前一项?

    我有一个模板 仅当当前项目与前一个项目有一些不同的字段时 我才想生成一些 HTML 如何访问 ng repeat 中的前一项 你可以做类似的事情 div ul li div class title index content title c
  • 如何在 e2e AngularJS 测试中进行文件上传?

    在我的一种观点中 我有一个文件上传控件 它支持通过拖放或单击按钮后打开的标准文件对话框上传文件 How to do this in my e2e tests1 1 Just one of the two options will be en
  • ng-model 和值组合不适用于输入文本框

    我有两个输入文本框 我需要组合在两个文本框中输入的值并将其显示在第三个文本框中 如果我只使用value在第三个文本框中 Box 1

随机推荐

  • 在单周期数据路径中加载半字和加载字节

    有人询问如何在单周期数据路径中实现加载字节而无需更改数据存储器 解决方案如下 替代文本 http img214 imageshack us img214 7107 99897101 jpg http img214 imageshack us
  • 在 Bootstrap 网格中动态更改列数

    我正在尝试为桌面浏览器设计一个布局 并为平板电脑浏览器设计其他布局 我希望在桌面浏览器中看到 3 9 列 3 列用于侧边栏 9 列用于内容 以及平板电脑中的 12 列 仅内容 我不需要平板电脑中的侧边栏 因此我需要在这种情况下显示液体内容
  • 拥有带有路径的地图如何将其与给定路径进行比较?

    我们有到字符串对的升压路径映射 例如名称 位置 绝对位置路径a lausr myfolder 我们得到了一些位置a lausr myfolder mysubfolder myfile 如何找到哪个地图位置最适合给定的网址 例如 我们有一张地
  • 嵌套列表中元素的 Python SUMPRODUCT

    我有两个嵌套列表 a 1 2 3 2 4 2 b 5 5 5 1 1 1 我想将每组元素相乘并求和得到 c 30 8 哪个结果来自 1 5 2 5 3 5 2 1 4 1 2 1 我尝试过这样做 c sum x y for x y in z
  • Play 重新加载应用程序时出现奇怪的 MongoError(使用 ReactiveMongo)

    通常 当 Play 在代码更改后重新加载应用程序时 我会收到以下错误 MongoError 无法到达节点集 请检查您的网络 连接性 MongoDB 日志如下所示 2016 09 06T18 51 22 609 0200 I NETWORK
  • 使用 Python 了解 Open CV 中的椭圆参数

    我正在尝试使用 Open CV 绘制圆弧 使用 cv2 ellipse 函数 我尝试阅读相同的文档 但我发现它非常令人困惑 在我的例子中它是一个圆弧 所以axes x和axes y是相同的 即半径 我的轴应该是什么 我应该在哪个方向计算开始
  • 嵌套 Linq Min() 使 Visual Studio 崩溃

    我有一段代码使 Visual Studio 2008 IDE 运行速度非常慢 消耗大量内存 最终导致其崩溃 我怀疑 VS 达到了操作系统内存限制 以下代码不是我的真实应用程序代码 但它模拟了问题 本质上 我试图使用 LINQ 找到树中的最小
  • linux下限制R内存使用

    我们在 Linux 集群环境中运行 R 当用户无意中使用 R 进程占用所有内存时 头节点会出现几次挂起 linux下有没有办法限制R内存使用 我不想建议全局 ulimit 但这可能是唯一的出路 There s unix rlimit as
  • $.getJSON 解析器错误尝试调用 API

    我正在尝试使用 Clipped API http clipped me api html http clipped me api html 返回 JSON 但遇到了一些麻烦 我正在使用 getJSON 在 Chrome 的 JS 控制台中我
  • 是否有任何编程语言支持定义原始数据类型的约束?

    昨晚我在想编程语言可以有一个功能 我们应该能够限制分配给原始数据类型的值 例如 我应该可以说我的 int 类型变量只能具有 0 到 100 之间的值 int lt 0 100 gt progress 然后 这将在所有情况下充当普通整数 除非
  • 在Android中使用OpenCV将NV21转换为RGB

    我正在尝试在 Android 中使用 OpenCV 因此 我首先通过并排放置两个 SurfaceView 来测试 OpenCV 其中一个SurfaceView用于预览相机的输出 输出格式显然是NV21 另一个SurfaceView通过Ope
  • 如何在 Jersey 客户端中发送 DELETE 请求中包含的数据?

    我在 Jersey 2 x 中有以下服务器端代码 Path store remove from group DELETE Consumes MediaType APPLICATION FORM URLENCODED Produces Med
  • 自定义会员资格提供商*没有*数据库?

    我一直在寻找有关 MVC 4 中成员资格提供程序更改的各种 SO 问题 博客文章等 虽然我喜欢其中的许多更改和简化 尤其是开箱即用的外部登录 支持 我还无法找到一件看似简单的事情 如何使用使用其他数据源的自定义成员 角色提供者覆盖成员资格
  • 如何从 viewcontainer 角度删除特定视图

    在下面的示例中 https stackblitz com edit angular 1acvol https stackblitz com edit angular 1acvol 我使用创建了多个视图TemplateRef并将它们附加到同一
  • 异步加载车把模板

    我正在尝试编写一个函数 该函数将为我提供一个已编译的车把模板 我将所有模板都放在单独的文件中 使用 ajax 调用来获取模板并编译它以供使用 但我需要使用承诺 以便我可以实际使用它 function getTemplate name get
  • Python,OpenCV:增加图像亮度而不溢出UINT8数组

    我正在尝试增加灰度图像的亮度 cv2 imread 返回一个 numpy 数组 我正在向数组的每个元素添加整数值 从理论上讲 这会增加它们中的每一个 之后我就可以将上限设置为 255 并获得具有更高亮度的图像 这是代码 grey cv2 i
  • 连接建立后如何从服务器(使用连接列表)向客户端发送命令?

    我有这两个类 它们是我的服务器应用程序 桌面 的一部分 需要在建立连接后将命令发送回客户端 当我尝试这样做时 clients i Send info the Send 例行公事 的监听器 cs 可以访问 但我有以下语法错误 怎么解决这个问题
  • CSS 关键帧动画与平移变换在 IE 10 和 Firefox 中捕捉到整个像素

    看起来 IE 10 和 Firefox 在使用 css 关键帧动画中的平移 2d 变换对元素的位置进行动画处理时 都会将元素捕捉到整个像素 Chrome 和 Safari 没有 看起来a lot制作微妙运动动画时效果更好 动画是通过以下方式
  • 2 个不同长度的排序数组的中值

    如何找到长度分别为 m 和 n 的 2 个已排序数组 A 和 B 的中位数 我已经搜索过 但大多数算法都假设两个数组的大小相同 我想知道如果 m n 我们怎样才能找到中位数 考虑例子 A 1 3 5 7 11 15 其中 m 6 B 2 4
  • 在 AngularJS 中处理来自代理的 HTTP 302 响应

    我有一个反向代理 可以检查多个应用程序的全局身份验证 当用户断开连接但仍尝试使用我的应用程序时 代理会发送 302 响应 HTTP 1 1 302 Found Date Wed 11 Sep 2013 09 05 34 GMT Cache