发出跨域请求时无法使用 JSONP 取回任何数据

Posted

技术标签:

【中文标题】发出跨域请求时无法使用 JSONP 取回任何数据【英文标题】:Can't get any data back using JSONP when making a cross-domain request 【发布时间】:2020-08-05 05:52:37 【问题描述】:

我有一个网站,我需要从我的浏览器发送一个 GET 请求并取回 html 数据。但是该网站有一个“X-Frame-Option: DENY”,由于 CORS 政策,我无法发出 Ajax 请求。所以我用 JSONP 进行了尝试,但它没有返回任何数据。它确实说 200 OK 连接。我使用的是最新版本的 Chrome。

// Not returning HTML back
$.getJSON("https://www.google.com/?callback=?", function(result) 
   console.log(result)
)

// I tried this but also didn't work
$.ajax(
     url: 'https://www.google.com',
     dataType: 'jsonp',
     success: function(result) 
         console.log(result)
     
)

我不确定这里发生了什么..

【问题讨论】:

X-Frame-Option 不是 CORS 标头,它只是防止页面显示在 (i) 框架中。你想达到什么目的?强制谷歌在 iframe 中显示? 我想向该站点发出 GET 请求并返回 HTML 在自己的服务器上读取文件,或者使用代理服务器。 【参考方案1】:

JSONP 仅在您调用的 URL 包含格式为 JSONP 的数据时才有效。

您使用的 URL 包含 HTML 而不是 JSONP。

您无法使用 JSONP 读取任意数据。在浏览器中禁用同源策略并不是魔术棒。

【讨论】:

谢谢,所以我想我想要的是不可能的。 不单独使用客户端代码。您可以使用服务器端代码读取它并以这种方式代理它。 我需要它作为客户端,因为我希望 cookie 也能工作。 那是不可能的。如果您网站的 javascript 可以使用您访问者在这些网站上的凭据从其他网站读取数据,那将是一个可怕的安全问题。

以上是关于发出跨域请求时无法使用 JSONP 取回任何数据的主要内容,如果未能解决你的问题,请参考以下文章

JSONP 请求跨域工作,但无法确定来源

面试整理跨域:jsonp与CORS

Reactjs之Axiosfetch-jsonp获取后台数据

前端跨域之Jsonp实现原理及.Net下Jsonp的实现

jsonp

jQuery使用JSONP实现跨域请求