我正在尝试使用javascript从我的网站访问Google Apps Script WebAPI,以传递一些值并创建一个excel文件,然后通过此API下载。
我尝试了以下两种方式:
- 使用$.POST的POST请求
我的价值观很多。所以,一开始,我使用一个POST请求,它的主体是列表值的JSON。浏览器拒绝API响应,因为CORS错误。
我研究了CORS来理解它。在一些主题上,我发现解决方案是以下第二种方式。
访问'XMLHttpRequesthttps://script.google.com/macros/s/xxxxxxx'来自原点'https://example.com'已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在"access control Allow Origin"标头。
- 使用带有$.getJSON的GET请求
我将列表值的JSON传递给URL参数并发出GET请求。它运行良好。
var url = 'https://script.google.com/macros/s/' + api_id + '/exec?' + request_parameter_string;
$.post(url, payload, function(data, textStatus) {
// Do something
}, 'json');
$.getJSON(url, function(json_result) {
// Do something
})
.fail(function() {
// Do something
});
我不明白的是为什么?为什么它能与getJSON
一起工作而不能与post
一起工作?
我认为CORS可以同时处理GET和POST请求。我和邮差核对了回复信头。标头是相同的Access-Control-Allow-Origin →*
。
我认为getJSON
和post
函数内部有些不同。
*更新:更新POST CORS错误消息。
GET
请求不受CORS的约束。我们可以在CDN中托管图像和静态文件,这与原始CDN不同,并通过缓存和发出并行请求来帮助提高性能。
类似地,GET
也用于提供来自第三方域的广告、跟踪器和分析。
有关同源策略和GET的更多信息,请访问https://security.stackexchange.com/a/16221/9517
浏览器如何识别跨源请求允许的其他HTTP谓词,详细阐述了@https://developer.mozilla.org/en-US/docs/Glossary/Preflight_request