如何响应龙卷风中的 GET 请求?

How to respond to a GET request in tornado?

刚开始学习HTTP,尝试做一个简单的客户端到服务器的请求在tornado中工作。这是我的 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()

单击按钮时,我看到打印了 "got the GET request",因此服务器一定已收到请求。但是,我在控制台上收到此错误:

有什么建议吗?谢谢!

当您的 JS 或 HTML 页面从不同的域提供服务并且您试图向不同的域发出 AJAX 请求时,会出现错误消息。这叫做CORS。出于安全原因,Web 浏览器限制 cross-domain AJAX 请求,除非服务器允许。

为了能够发出跨源 AJAX 请求,您需要在处理程序的响应中设置一个名为 Access-Control-Allow-Origin 的 header。

您可以在处理程序的 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