半残 发表于 2024-10-22 16:24:47

求大佬解决个跨域问题!

大佬们,有没有会搞跨域的
我自己搞得站对接优酷云,出现跨域,提示如下图
https://ice.frostsky.com/2024/10/22/b62306d0503bbe34e49e7fa53f4b9c0a.jpeg
自己用代理换成自己域名之后还是会出现这个问题,折腾两天了,无解

yagamil 发表于 2024-10-22 16:40:21

半残 发表于 2024-10-22 16:38
这些方法试过了,CORS头这一项折腾两天,人都麻了,然后今天也试了代理服务器中加请求头,目前还是不行 ...

这种情况可能涉及到更深层次的配置或者第三方平台(比如优酷API)的限制。以下是一些进一步的建议,希望能帮助你解决这个问题:

1. 使用后端中转(服务器端代理)
如果CORS头的问题依然无法解决,可以尝试通过后端代理服务器的方式来绕过浏览器的跨域限制。具体步骤是:

在你自己的服务器上设置一个中转服务。
前端请求你的服务器,服务器再向优酷API发出请求并获取数据。
因为前端访问的是你自己的服务器,所以不会有跨域问题,你的服务器从优酷获取的数据可以直接返回给前端。
示例:

前端:请求你服务器的API /proxy/get-data
服务器:接收前端请求,向https://api.youku.com/uploads/create.json发起请求,获取到数据后再返回给前端。
Node.js 代码示例:
const express = require('express');
const axios = require('axios');
const app = express();

app.get('/proxy/get-data', async (req, res) => {
    try {
      const response = await axios.get('https://api.youku.com/uploads/create.json', {
            params: req.query // 将前端传递的参数透传
      });
      res.json(response.data); // 将数据返回给前端
    } catch (error) {
      res.status(500).send('服务器代理请求失败');
    }
});

app.listen(3000, () => {
    console.log('代理服务器运行中...');
});

2. 尝试使用不同的浏览器或者开发工具
如果是浏览器的CORB机制导致的限制,可以尝试通过一些开发工具或者不同浏览器来绕过这个限制,特别是在开发环境下:

Kiwi Browser 插件:Kiwi Browser是一个支持Chrome扩展的安卓浏览器,可能有某些扩展能帮助你禁用CORB或CORS检查。
CORS插件:在Chrome、Firefox等浏览器上,安装CORS相关的插件,比如Allow CORS,临时绕过跨域限制(不推荐在生产环境中使用)。
3. 检查是否存在同源策略限制
如果你已经通过代理服务器并添加了CORS头但依然无效,可能是因为你涉及的某些资源有更严格的同源策略。例如:

API或资源可能有白名单策略,优酷只允许某些特定域名的请求。
某些云服务或CDN提供商会有额外的跨域限制。
可以联系优酷的技术支持或查阅他们的API文档,确认是否有额外的配置或授权方式来绕过这些限制。

4. 使用Postman等工具测试API
通过Postman或其他类似工具测试你对优酷API的请求,看看是否有不同的响应。这样你可以排除前端和代理服务器设置的问题,直接确认API是否正常返回数据。

如果这些方法仍然无法解决问题,可能是优酷的API本身对跨域请求有严格限制,或者需要特定的授权头等内容。这时与优酷技术支持沟通,询问是否有专门的跨域请求解决方案可能是更有效的办法。

yagamil 发表于 2024-10-22 16:29:11

根据你提供的错误信息,出现了跨域读取阻止(CORB)的问题,即使你通过代理更改了域名,这个问题依然存在。主要原因是Youku的API响应头中缺少跨域资源共享(CORS)的相关设置,并且MIME类型为text/plain,这不是浏览器允许读取的安全类型。

你可以尝试以下几种方法来解决这个问题:

检查MIME类型: 确保服务器返回的内容类型是正确的,例如,如果你期望返回JSON数据,MIME类型应该是application/json,而不是text/plain。

设置CORS头: 确保服务器的响应头中包含以下内容:

Access-Control-Allow-Origin: * 或者指定你的网站域名
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type, Authorization
你可以在代理服务器中添加这些响应头,确保代理转发的内容可以跨域访问。

使用CORS代替JSONP: 你提到的请求带有callback参数,这意味着你可能在使用JSONP进行跨域请求。JSONP已经不再是推荐的方式,建议切换到CORS来进行跨域访问。

代理配置问题: 再次检查你的代理配置,确保请求被正确转发,并且响应头中添加了所需的CORS头信息。如果代理配置正确,而Youku的服务器不支持跨域访问并返回非标准的MIME类型,可能问题就来自于Youku服务器。

这些步骤可以帮助你排查跨域问题。如果Youku不支持跨域访问且你无法控制服务器设置,可能需要考虑其他方式来解决此问题。

半残 发表于 2024-10-22 16:38:55

yagamil 发表于 2024-10-22 16:29
根据你提供的错误信息,出现了跨域读取阻止(CORB)的问题,即使你通过代理更改了域名,这个问题依然存在。 ...

这些方法试过了,CORS头这一项折腾两天,人都麻了,然后今天也试了代理服务器中加请求头,目前还是不行
页: [1]
查看完整版本: 求大佬解决个跨域问题!