Я написав REST API на експрес-фреймворку для node.js, який працює для запитів із консолі js у Chrome, та URL-адреси тощо. Зараз я намагаюся змусити його працювати для запитів з іншого додатка, на іншому домен (CORS).
Перший запит, зроблений автоматично за допомогою інтерфейсу інтерфейсу javascript, стосується / api / search? Uri =, і, здається, він не відповідає запиту OPTIONS "перед вильотом".
У своєму експрес-додатку я додаю заголовки CORS, використовуючи:
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();
}
};
і:
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 }));
});
З консолі Chrome я отримую такі заголовки:
URL-адреса запиту: http: //furious-night-5419.herokuapp.com/api/search? Uri = http% 3A% 2F% 2Flocalhost% 3A5000% 2Fcollections% 2F1% 2Fdocuments% 2F1
Метод запиту: ВАРІАНТИ
Код стану: 200 OK
Запити заголовків
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
Параметри рядка запиту
uri:http://localhost:5000/collections/1/documents/1
Заголовки відповідей
Allow:GET
Connection:keep-alive
Content-Length:3
Content-Type:text/html; charset=utf-8
X-Powered-By:Express
Чи схоже це на відсутність належних заголовків, які надсилає програма API?
Дякую.
PATCH
якщо ви будете використовувати його замість того, PUT
щоб оновлювати ресурс
OPTIONS
методу. Чи може хтось допомогти мені зрозуміти, чому б не обробляти лишеPOST
метод, а не обидваPOST
іOPTIONS
метод?