AngularJS未通过$http提供程序拦截http
我在受Active Directory保护的Azure应用程序服务上有一个AngularJS应用程序,我正在尝试使用socket.io通过websocket创建连接 问题是AD将导致一个302重定向响应,socket.io不遵循该响应,因此我希望截获该响应并遵循该响应,然后socket.io连接将正常。但是,socket.io调用不是通过$http提供程序进行的,因此无法使用典型的侦听器进行管理 是否有任何方法可以通过拦截器或中间件获取这些信息?我没有尝试过典型的中间件解决方案(例如app.use(…)) 请注意,socket.io将用于轮询,但这可能会导致我的应用程序出现性能问题 使用以下拦截器,即使我可以在Fiddler中看到调用和302响应,我也没有得到控制台日志的输出:AngularJS未通过$http提供程序拦截http,angularjs,socket.io,azure-active-directory,azure-web-app-service,Angularjs,Socket.io,Azure Active Directory,Azure Web App Service,我在受Active Directory保护的Azure应用程序服务上有一个AngularJS应用程序,我正在尝试使用socket.io通过websocket创建连接 问题是AD将导致一个302重定向响应,socket.io不遵循该响应,因此我希望截获该响应并遵循该响应,然后socket.io连接将正常。但是,socket.io调用不是通过$http提供程序进行的,因此无法使用典型的侦听器进行管理 是否有任何方法可以通过拦截器或中间件获取这些信息?我没有尝试过典型的中间件解决方案(例如app.us
app.factory('httpInterceptor', [function() {
var httpInterceptor = {
request: function(req) {
if (req.url.indexOf('socket.io') > -1) {
console.log('REQUEST');
console.log(req);
}
return req;
},
requestError: function(reqerr) {
console.log(reqerr);
},
response: function(res) {
if ( res.status == 302 ) {
console.log('RESPONSE');
console.log(res);
}
return res;
},
responseError: function(reserr) {
console.log(reserr);
}
};
return httpInterceptor;
}]);
app.config(['$httpProvider', function($httpProvider) {
$httpProvider.interceptors.push('httpInterceptor');
}]);
302重定向由浏览器处理,XHRAPI不接收。我明白了。如果我将302中的位置标题内容复制到浏览器中,我将从socket.io服务器获得输出。之后,套接字将在应用程序中连接,并且工作正常(我假设,因为AD现在认为会话已通过身份验证)。但是,socket.io似乎对重定向后返回的内容不满意:拒绝从“”执行脚本,因为它的MIME类型(“text/html”)不可执行,并且启用了严格的MIME类型检查。