无目标服务器控制权时能否发起跨源请求?Ajax跨域问题咨询
问题:Ajax调用OFAC的SDN XML文件时遇到CORS错误,能否解决?
我尝试通过Ajax调用链接https://www.treasury.gov/ofac/downloads/sanctions/1.0/sdn_advanced.xml,但持续收到错误提示:
No 'Access-Control-Allow-Origin' header is present on the requested resource
由于我完全无法控制该信息来源,请问此请求是否可行?是只需调整请求配置,还是从根本上无法实现?
相关Ajax代码片段如下:
$.ajax({ url: 'https://www.treasury.gov/ofac/downloads/sanctions/1.0/sdn_advanced.xml', type: "GET", // 其他配置... });
回答
很遗憾,直接从前端浏览器发起Ajax请求这个链接根本无法实现,原因和解决思路如下:
CORS限制的本质
这个错误是浏览器的同源策略(Same-Origin Policy)导致的:浏览器会默认阻止前端脚本从不同域名的服务器获取资源,除非目标服务器明确通过Access-Control-Allow-Origin响应头允许你的域名访问。而你完全无法控制treasury.gov的服务器配置,所以没办法让它添加这个授权头。为什么调整请求配置没用
你可能会想尝试修改dataType、添加自定义头或者调整其他Ajax参数,但这些操作都绕不开浏览器的CORS检查。哪怕你想改用JSONP,这个接口也不支持JSONP格式(它返回的是纯XML,不是带回调函数的JSON结构),所以这条路也走不通。可行的替代方案
既然前端直接请求行不通,你可以通过以下两种方式解决:
- 搭建后端代理:在你自己的服务器上写一个中转接口,由后端去请求treasury.gov的XML文件,然后把获取到的内容返回给前端。后端请求不受浏览器同源策略限制,完全可以正常拿到数据。
- 定期缓存文件到本地:如果数据不需要实时更新,可以定期手动或者通过脚本把这个XML文件下载到你自己的服务器,然后前端直接请求自己服务器上的缓存文件。
总结一下:前端直接请求这个第三方资源是不可能的,必须借助后端代理或者本地缓存的方式绕开CORS限制。
内容的提问来源于stack exchange,提问作者lorless
相关产品推荐
相关产品推荐

