В моей конфигурации 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
Это тоже работает для меня, однако проблема заключается в отправке 'OPTIONS' не' GET'. Я обновил свой вопрос, чтобы отразить это. –
См. Мой обновленный ответ. –
@SirNeuman исправлено вверх по течению - ответ обновляется. Благодарю. –