2015-12-21 2 views
2

В моей конфигурации EVE я определил SCHEMA_ENDPOINT='schema', так что, когда я выполняю get на api_root/schema/resource, я получаю схему для этого ресурса. У меня также есть X_DOMAINS='*', так что, когда я вызываю get на api_root/resource/item, я получаю элемент, который я вызывал при вызове моего API из любого домена. Эти обе работают отдельно.Как позвонить в конечную точку схемы с CORS в EVE?

Однако, если я называю api_root/schema/resource или даже просто api_root/schema, который дал бы мне схему для всех моих ресурсов, с CORS, который посылает OPTIONS предполетной запрос, он не будет работать на предполетной запрос. Поэтому, когда я делаю вызов Ajax на другом домене, чем та API размещается на я получаю сообщение об ошибке в хроме:

XMLHttpRequest cannot load http://api.dev:5000/v1/schema/resource. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://test.dev:5002' is therefore not allowed access.

Теперь я не имею эту проблему с помощью каких-либо других вызовов, которые используют CORS. Как я уже сказал, у меня нет этой проблемы при вызове api_root/resource. Поэтому я не думаю, что это проблема с клиентской стороной. Есть ли какая-то реализация на стороне сервера, которую я мог бы сделать, чтобы конечная точка схемы работала с CORS?

UPDATE:

Так что проблема при отправке OPTIONS и не GET. Например:

$ curl -I -X OPTIONS -H "Origin: test.com" 'http://127.0.0.1:5000/v1/schema/order' --verbose 
* Hostname was NOT found in DNS cache 
* Trying 127.0.0.1... 
* Connected to 127.0.0.1 (127.0.0.1) port 5000 (#0) 
> OPTIONS /v1/schema/order HTTP/1.1 
> User-Agent: curl/7.35.0 
> Host: 127.0.0.1:5000 
> Accept: */* 
> Origin: http://test.com 
> 
* HTTP 1.0, assume close after body 
< HTTP/1.0 200 OK 
< Content-Type: text/html; charset=utf-8 
< Allow: HEAD, OPTIONS, GET 
< Content-Length: 0 
< Server: Eve/0.6.2.dev0 Werkzeug/0.10.4 Python/2.7.6 
< Date: Mon, 11 Jan 2016 16:57:39 GMT 

ответ

0

Я испытал SCHEMA_ENDPOINT с CORS и кажется, что все работает, как ожидалось. В моих настройках у меня есть:

X_DOMAINS = '*' 
SCHEMA_ENDPOINT = 'schema' 

Мой запрос предполетную:

curl -H "Origin: http://test.com" --verbose http://localhost:5000/schema 

> GET /schema/contacts HTTP/1.1 
> Host: localhost:5000 
> User-Agent: curl/7.43.0 
> Accept: */* 
> Origin: http://test.com 

< HTTP/1.0 200 OK 
< Access-Control-Allow-Origin: http://test.com 
< Vary: Origin 
< Access-Control-Allow-Headers: 
< Access-Control-Expose-Headers: 
< Access-Control-Allow-Methods: HEAD, OPTIONS, GET 
< Access-Control-Allow-Max-Age: 21600 
< Server: Eve/0.6.2.dev0 Werkzeug/0.10.4 Python/2.7.8 

То же самое происходит с /schema/resource. Обратите внимание, что -Headers пуста, потому что в моем тесте я не установил X_HEADERS или X_EXPOSE_HEADERS.

EDIT: после вашего обновления я вижу, что проблема была (была) с OPTIONS. Он был исправлен вверх и будет выпущен с v0.6.2.

+0

Это тоже работает для меня, однако проблема заключается в отправке 'OPTIONS' не' GET'. Я обновил свой вопрос, чтобы отразить это. –

+0

См. Мой обновленный ответ. –

+0

@SirNeuman исправлено вверх по течению - ответ обновляется. Благодарю. –

Смежные вопросы