如何解决 Google API 中的 CORS 问题?

Posted

技术标签:

【中文标题】如何解决 Google API 中的 CORS 问题?【英文标题】:How to get around the CORS issue in Google's API? 【发布时间】:2015-10-02 23:37:41 【问题描述】:

我正在开发一个应用程序,我必须使用 Google 的高程 API 获取某些点的高程,但我陷入了臭名昭著的 CORS 问题。

var elevationUrl = 'https://maps.googleapis.com/maps/api/elevation/json?locations=39.7391536,-104.9847034&key=AIzaSyAgXFgUVR4Nia7pegX_0hcz0aNevCKAa58';

$.ajax(
    url: elevationUrl,
    type: 'GET',
    // dataType: 'JSONP',
    success: function()
    
);

对于初学者,我只是尝试查询一个固定点。执行此操作时,我会在浏览器的控制台中收到 CORS 警报。

当我尝试dataType: 'JSONP' 时,它可以工作,并且我从 API 获得响应,但我的浏览器抱怨响应中有错误,而它没有。基本上我试图将 JSON 解析为 JSONP,这就是为什么我在响应中收到语法错误。

解决这个问题的方法是什么?如何通过 AJAX 调用查询 Elevation API?

【问题讨论】:

“我的浏览器抱怨响应中有错误”——确切地说,它抱怨什么?引用错误信息,不要笼统地描述它。 Read the documentation 顶部有一个巨大的框,指向为客户端 JS 设计的 API 版本。 请参考我对 CORS 问题的回答:How to bypass CORS issue ? 【参考方案1】:

我使用 chrome 的 Allow-Control-Allow-Origin 插件来解决这种问题。它将允许您在 chrome 中启用/禁用 CORS。 https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?hl=en

【讨论】:

【参考方案2】:
https://medium.com/@akhouri/cors-issues-and-resolutions-803e6abda52a

OR

Make data type to jsonp

$('#btnAll').click(function ()   
$.ajax(  
   type: 'Get',  
   url: 'http://localhost:60545/api/student',  
   dataType: 'jsonp',  
success: function myfunction(data)   
   $.each(data, function myfunction(index, val)   
      $('#ulStudents').append('<li>' + val.FirstName + '' + val.LastName + '</li>');  
   );  

【讨论】:

【参考方案3】:

如果您的站点有后端 api,您可以创建简单的端点以传递到 google api 并在服务器上执行 google 结果,其中 CORS 标头无关紧要。 让您受益于拥有更好的缓存系统。

【讨论】:

我不确定 6 年前我在做什么,但是,是的,我自己后端的代理 API 似乎是解决这个问题以避免 CORS 问题的好方法! B)

以上是关于如何解决 Google API 中的 CORS 问题?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 mapbox 解决 Surface API 中的 CORS 问题?

使用 Swagger UI 进行测试时如何解决 API 中的 CORS 错误(使用 Lumen 实现)

如何解决真实设备中的 CORS 问题?

如何使用 CORS 实现 JavaScript Google Places API 请求

Angular 4 前端中的 CORS 问题,Google Cloud Endpoints 运行 go API 后端

Postman(一个电子应用程序)如何绕过 CORS?