gpt4 book ai didi

javascript - 使用 jQuery 和 Tornado 进行跨源资源共享 (CORS)

转载 作者:行者123 更新时间:2023-12-03 21:48:37 25 4
gpt4 key购买 nike

假设我有一个 Tornado Web 服务器(localhost)和一个网页(othermachine.com),后者包含需要对 Tornado 服务器进行跨域 ajax 调用的 javascript。

所以我这样设置我的 Tornado :

class BaseHandler(tornado.web.RequestHandler):
def set_default_headers(self):
self.set_header("Access-Control-Allow-Origin", "http://www.othermachine.com")
self.set_header("Access-Control-Allow-Credentials", "true")
self.set_header("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE,OPTIONS")
self.set_header("Access-Control-Allow-Headers",
"Content-Type, Depth, User-Agent, X-File-Size, X-Requested-With, X-Requested-By, If-Modified-Since, X-File-Name, Cache-Control")

我的 javascript 进行了 jQuery 调用:

$.ajax({
type: 'GET',
url: "http://localhost:8899/load/space",
data: { src: "dH8b" },
success: function(resp){
console.log("ajax response: "+resp);
},
dataType: 'json',
beforeSend: function ( xhr ) {
xhr.setRequestHeader('Content-Type', 'text/plain');
xhr.setRequestHeader('Access-Control-Request-Method', 'GET');
xhr.setRequestHeader('Access-Control-Request-Headers', 'X-Requested-With');
xhr.withCredentials = true;
}
});

但是我得到了可爱的XMLHttpRequest无法加载http://localhost:8899/load/space?src=dH8b。 Access-Control-Allow-Origin 错误不允许来源 http://www.othermachine.com。我无法判断 jQuery/Tornado 的哪一侧(或两者?)是我设置不正确。

根据开发工具,这些是 jQuery 请求发送的 header :

请求 header

Accept:*/*
Origin:http://www.othermachine.com
Referer:http://www.othermachine.com/athletes.html?src=BCYQ&msgid=6xjb
User-Agent:Mozilla/5.0 ...

如果我只是从浏览器的 URL 字段发出请求,我会收到“200 OK”:

响应 header

Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:Content-Type, User-Agent, X-Requested-With, X-Requested-By, Cache-Control
Access-Control-Allow-Methods:GET,POST
Access-Control-Allow-Origin:http://www.othermachine.com
Content-Length:0
Content-Type:text/html; charset=UTF-8
Server:TornadoServer/2.2.1

这是否意味着 Tornado 正在履行其职责?我尝试遵循所有 stackoverflow CORS+jQuery 帖子的建议(例如 this ),但无济于事。 CORS 的概念似乎很简单,但也许我从根本上误解了 CORS 交易中应该发生的事情......请帮忙!提前致谢。

最佳答案

没关系,编码太晚和太长会导致人们被打字错误大小的事情绊倒。根据记录,这就是 jQuery 所需的全部内容:

var data = { msgid: "dH8b" },
url = "http://localhost:8899/load" + '?' + $.param(data);
$.getJSON( url, function(resp){
console.log("ajax response: "+resp+" json="+JSON.stringify(resp));
});

这就是 Tornado 所需的一切:

class BaseHandler(tornado.web.RequestHandler):
def set_default_headers(self):
self.set_header("Access-Control-Allow-Origin", "http://www.othermachine.com")

使用 jQuery 1.7.2、Tornado 2.2.1。

关于javascript - 使用 jQuery 和 Tornado 进行跨源资源共享 (CORS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11463688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com