У меня есть Jupyter KernelGatewayApp, работающий на экземпляре виртуальной машины в облаке Google.Я определил API, который отвечает на оператор GET.
Если я объединю IP-адрес экземпляра виртуальной машины с портом шлюза ядра и оператор GET с правильными параметрами, я получу желаемый результат.
ОднакоЯ хотел бы вызвать API с помощью кнопки JavaScript на другом сайте.Это не работает, так как браузер сначала отправляет оператор OPTIONS, на который мне не удается правильно ответить.
Конкретно у меня есть следующее:
Запуск шлюза ядра Jupyter на порту 8888: 33.44.567.789:8888
Рабочий API: 33.44.567.789:8888/api?fname=john&lname=doe
Другой веб-сайт, где кнопка javascript вызывает вышеуказанный API: johndoe.me
Возвращает следующую ошибку на стороне запросчика (браузера):
XMLHttpRequest не может загрузить http://33.44.567.789:8888/api?fname=john&lname=doe. Поле заголовка запроса Тип содержимого не разрешен Access-Control-Allow-Headers в ответе перед полетом.
Создает на сервере следующее сообщение:
ИНФОРМАЦИЯ: tornado.access: 200 OPTIONS / api? fname = john & lname = doe (xx.xxx.xx.xxx) 1,2 мс
Из-за того, что я прочитал здесь я добавил все разныепараметры запуска при запуске Jupyter Kernel Gateway:
jupyter kernelgateway --KernelGatewayApp.api='kernel_gateway.notebook_http' --KernelGatewayApp.seed_uri='/home/dummy_gmail_com/code/test_api.ipynb' --KernelGatewayApp.allow_origin='http://johndoe.me' --KernelGatewayApp.allow_methods='GET,OPTIONS,POST' --KernelGatewayApp.allow_credentials='true' --KernelGateway.allow_headers='Origin, X-Requested-With, Content-Type, Accept, content-type' --KernelGatewayApp.expose_headers='Origin, X-Requested-With, Content-Type,Accept' --KernelGatewayApp.answer_yes=True
Кажется, проблема в том, что браузер выдает OPTIONS вместо GET, но я не совсем уверен.Связано ли это с фактом перекрестного происхождения?Есть ли способ справиться с этим правильно или обойти это?