Napisałem REST API w ekspresowym frameworku dla node.js, który działa dla żądań z konsoli js w Chrome, paska adresu itp. Teraz próbuję sprawić, by działał dla żądań z innej aplikacji, na innej domeny (CORS).
Pierwsze żądanie, wykonane automatycznie przez interfejs użytkownika javascript, to / api / search? Uri = i wygląda na to, że nie powiodło się przy żądaniu OPTIONS „preflight”.
W mojej aplikacji ekspresowej dodaję nagłówki CORS przy użyciu:
var allowCrossDomain = function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
// intercept OPTIONS method
if ('OPTIONS' == req.method) {
res.send(200);
}
else {
next();
}
};
i:
app.configure(function () {
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(allowCrossDomain);
app.use(express.static(path.join(application_root, "public")));
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
Z konsoli Chrome dostaję te nagłówki:
Adres URL żądania: http: //furious-night-5419.herokuapp.com/api/search? Uri = http% 3A% 2F% 2Flocalhost% 3A5000% 2Fcollections% 2F1% 2Fdocuments% 2F1
Metoda żądania: OPCJE
Kod stanu: 200 OK
Nagłówki żądań
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:origin, x-annotator-auth-token, accept
Access-Control-Request-Method:GET
Connection:keep-alive
Host:furious-night-5419.herokuapp.com
Origin:http://localhost:5000
Referer:http://localhost:5000/collections/1/documents/1
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5
Parametry ciągu zapytania
uri:http://localhost:5000/collections/1/documents/1
Nagłówki odpowiedzi
Allow:GET
Connection:keep-alive
Content-Length:3
Content-Type:text/html; charset=utf-8
X-Powered-By:Express
Czy to wygląda na brak odpowiednich nagłówków wysyłanych przez aplikację API?
Dzięki.
OPTIONS
metody. Czy ktoś mógłby mi pomóc zrozumieć, dlaczego nie zająć się tylkoPOST
metodą zamiast obsługi obuPOST
iOPTIONS
metody?