UPDATE年03月21 經過調查,它看起來像這也顯示
一個遊戲框架錯誤
上錯誤狀態的XHR限制: Play 2.2.1 SimpleResult 4xx Response Body Possible via CORS XHR?那個或RESTfulness我尋求是不可能的401代碼。
由於401在Angular $ http中獲得0狀態碼,所以在這兩個空間中仍然存在問題,如下所示。非常適合RESTfulness!我想要做的就是爲401 Unauthorized提供一個響應主體。從W3C page on 4xx:「用戶代理應該向用戶顯示任何包含的實體。」
UPDATE年03月20
進一步調查點內的XMLHttpRequest本身的問題,但請讓我知道如果我下面失去了一些東西。我吐出原始XHR對象xhr.onreadystatechange()回調裏面的角的createHttpBackend()中定義:
當我與一個已知良好的電子郵件和密碼登錄,一切工作正常:
但是,對於一個400錯誤請求(密碼錯誤)相同XHR對象有一個空的反應,但更重要的是狀態= 0,從Mozilla的文檔表示請求從未發送(但我看到我的API服務器獲取請求並執行數據庫查找,如Postma ñ工程如上):
是怎麼回事? Postman如何得到響應,但最新的Chrome和Firefox上的XMLHttpRequest混淆了?
我使用$ http發送POST請求,並在瀏覽器(Chrome和FF)和Postman中獲得衝突響應。郵差工作正常,並有身體,但它看起來像角是「清理」了一些響應代碼,以處理模板緩存時在Android瀏覽器中的怪異,但我無法確定$ httpBackend中原始XHR發生的位置攔截響應主體 - 也許這是因爲XHR阻止/取消響應?因爲安全?我也沒有任何攔截器。
「開心路徑」登錄工作正常,我在控制檯/螢火蟲中匹配200 OK響應,但400錯誤請求沒有響應主體。
在nginx上配置CORS(請參閱http://enable-cors.org/server_nginx.html),並且由於快樂登錄成功,因此設置功能正常。
我的電話:
var onLoginSuccess = function(data, status, headers, config){
console.log('[onLoginSuccess]')
console.log(data)
console.log(status)
console.log(headers)
console.log(config)
}
var onLoginError = function(data, status, headers, config){
console.log('[onLoginError]')
console.log(data)
console.log(status)
console.log(headers)
console.log(config)
}
var loginObj = {
'username': $scope.username,
'password': $scope.password,
'grant_type': 'password',
'client_id': 'web'
}
var doLogin = $http({
method: 'POST',
url: 'https://api/v1/token',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
transformRequest: function(obj) {
var str = [];
for(var p in obj) {
str.push(encodeURIComponent(p) + '=' + encodeURIComponent(obj[p]));
}
return str.join('&');
},
data: loginObj,
responseType: 'json'
})
doLogin.then(
onLoginSuccess,
onLoginError
)
角被修改的錯誤代碼,以便在瀏覽器和角度不同意:
當我通過郵差發送相同的請求,400錯誤請求代碼是相同的,但正如預期的那樣,主體也是一個json字符串。
爲什麼通過onLoginError()回調中的$ http CORS不可用?
可能與[與401響應有關的此問題](https://github.com/angular/angular.js/issues/2609)有關,我也遇到過這個問題。 – sinelaw