Как ответить на запрос GET в торнадо? - PullRequest
0 голосов
/ 26 января 2019

Только начал изучать HTTP, пытаясь сделать простой запрос от клиента к серверу для работы в торнадо.Вот моя функция JavaScript, активируемая нажатием кнопки:

function funcOnClick(){
    $.ajax({
        url: "http://localhost:8889/madTest",
        type: "GET",
        success: function(result){alert('success')},
        error: function(error){console.log(error)}
    })
}

А вот мой сервер:

import tornado.ioloop
import tornado.web
import json


class MainHandler(tornado.web.RequestHandler):
    def get(self):
        print('got the GET request')
        self.write('abc')


def make_app():
    return tornado.web.Application([
        (r"/madTest", MainHandler),
    ])


if __name__ == "__main__":
    app = make_app()
    app.listen(8889)
    print('server started, listening to 8889 ...')
    tornado.ioloop.IOLoop.current().start()

При нажатии на кнопку я вижу, что «напечатан запрос GET»,поэтому сервер должен был получить запрос.Тем не менее, я получил эту ошибку на консоли:

enter image description here

Есть предложения?Спасибо!

1 Ответ

0 голосов
/ 27 января 2019

Сообщение об ошибке появляется, когда ваша страница JS или HTML обслуживается из другого домена, и вы пытаетесь отправить запрос AJAX в другой домен.Это называется CORS .По соображениям безопасности веб-браузеры ограничивают междоменные запросы AJAX, если это не разрешено сервером.

Чтобы иметь возможность выполнять межузловые AJAX-запросы, необходимо установить заголовок с именем Access-Control-Allow-Origin в ответе вашего обработчика.

Вы можете сделать это с помощью метода prepare вашего обработчика:

class MainHandler(...):
    def prepare(self):
        self.set_header('Access-Control-Allow-Origin', '*')
        # the wildcard - '*' - allows CORS from any domain
        # you should probably change it to your frontend 
        # domain name if you wan to restrict CORS to a single domain.
        # see Mozilla docs for more info
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...