处理跨域 REST 响应的 301 和位置标头
Posted
技术标签:
【中文标题】处理跨域 REST 响应的 301 和位置标头【英文标题】:Dealing with a 301 and location headers for a REST response in cross-domain 【发布时间】:2014-09-05 19:14:07 【问题描述】:我正在使用 Angularjs Chrome 35.0 和 Firefox 30.0。
我需要向 API 发出 Rest 请求。
每个具有 200,201,404 (...) 作为响应的请求都运行良好。
其中一些响应带有 301 和位置标头。
我的 javascript
this.folder = function(folder)
var url = config.domain + '/' + folder.key;
var methods = resource(url, null,
'move':
method: 'PUT',
params:
'move': ''
,
headers:
'copy-source': '/path/to/' + folderKey
,
url: config.domain + '/path/to/' + newKey
);
在调用之后(确实有效),我在控制台中显示了这个错误:
XMLHttpRequest 无法加载 http://domain.com/path/to/folder?move=。该请求被重定向到“http://domain.com/path/to/folder”,这对于需要预检的跨域请求是不允许的。
编辑
我有一个错误状态 0 而不是真正的 301。所以如果我无法在 301 和 0 响应之间做出任何区别,就不可能处理响应...
【问题讨论】:
这个错误听起来很容易解释。有什么问题? @Quentin : ** ADD ** : 我有一个错误状态 0 而不是真正的 301。所以如果我不能在 301 和0 回复... 使用错误处理程序并检查状态并做出相应反应 你能不能说的更精确一点? 【参考方案1】:我确实做了一个拦截器并检查了一个特定的标题,它应该只在这种情况下出现。 这不是很合适,但我想这是最好的解决方案......
var interceptor = ['$rootScope', '$q',
function(scope, $q)
var success = function(response)
return response;
var error = function(response)
if (response.status === 0) // server not responding
if (angular.isDefined(response.config.params['move']))
response.status = 301;
response.genericMessage = 'Folder correctly moved';
else
response.genericMessage = 'Server Connection refused, is it on ?';
window.location = '/#/login';
return $q.reject(response);
return function(promise)
return promise.then(success, error);
];
$httpProvider.responseInterceptors.push(interceptor);
【讨论】:
以上是关于处理跨域 REST 响应的 301 和位置标头的主要内容,如果未能解决你的问题,请参考以下文章