/ / Publikowanie przy użyciu kątowej metody http.post - xmlhttprquest nie może załadować usługi - json, google-chrome, firefox, angularjs, xmlhttprequest

Publikowanie za pomocą metody kątowej http.post - xmlhttprquest nie może załadować usługi - json, google-chrome, firefox, angularjs, xmlhttprequest

Metoda Angular $ http.post nie wysyła JSON do usługi (usługa RESTFul, usługa węzła). Pokazuje następujący błąd:

XMLHttpRequest cannot load /some/service. Invalid HTTP status code 404

Oto wysłany kod

$http({method:"POST", url:"/some/service/",data:{"key1":"val1","key2":"val2"}}).success(function(result){
alert(result);
});

Ten sam kod działa ze starą wersją mojego Chrome, tj. V29... *. Zaktualizowałem Chrome do V30... *. Teraz to nie działa. Również nie działa w przeglądarce Firefox. Czy jest jakiś problem z Chrome i Firefox?

Czy ktokolwiek może pomóc?

Odpowiedzi:

2 dla odpowiedzi № 1

Podobny problem napotkałem po aktualizacji Chrome do wersji 30.0.1599.101 i okazało się, że jest to problem z serwerem.

Mój serwer jest implementowany za pomocą Express (http://expressjs.com/) i poniższy kod zezwalający na CORS (Jak zezwolić na CORS?) działa dobrze:

var express = require("express");
var server = express();

var allowCrossDomain = function(req, res, next) {
res.header("Access-Control-Allow-Origin", req.headers.origin || "*");
res.header("Access-Control-Allow-Methods", "GET,POST,PUT,HEAD,DELETE,OPTIONS");
res.header("Access-Control-Allow-Headers", "content-Type,x-requested-with");
next();
}
server.configure(function () {
server.use(allowCrossDomain);
});

server.options("/*", function(req, res){
res.header("Access-Control-Allow-Origin", req.headers.origin || "*");
res.header("Access-Control-Allow-Methods", "GET,POST,PUT,HEAD,DELETE,OPTIONS");
res.header("Access-Control-Allow-Headers", "content-Type,x-requested-with");
res.send(200);
});

server.post("/some_service", function (req, res) {
res.header("Access-Control-Allow-Origin", req.headers.origin);

// stuff here

//example of a json response
res.contentType("json");
res.send(JSON.stringify({OK: true}));
});

Żądanie HTTP wygląda następująco:

$http({
method: "POST",
url: "http://localhost/some_service",
data: JSON.stringify({
key1: "val1",
key2: "val2"
}),
headers: {
"Content-Type": "application/json; charset=utf-8"
}
}).success(
function (data, status, headers, config) {
//do something
}
).error(
function (data, status, headers, config) {
//do something
}
);

Jak wskazano tutaj (https://stackoverflow.com/a/8572637/772020), chodzi o to, aby upewnić się, że Twój serwer poprawnie obsługuje żądanie OPTIONS, aby włączyć CORS.


0 dla odpowiedzi nr 2

Cóż, nowa aktualizacja chrome została wydana kilkadni temu. Sprawdź informacje o poprawce z tego wydania, jeśli zmieniły coś związane z bezpieczeństwem. Moje rozszerzenie przestało działać zarówno w FF, jak i Chrome kilka dni temu.