跨域请求时,getJSON()函数和post()函数有什么区别



我正在尝试使用javascript从我的网站访问Google Apps Script WebAPI,以传递一些值并创建一个excel文件,然后通过此API下载。

我尝试了以下两种方式:

  1. 使用$.POST的POST请求

我的价值观很多。所以,一开始,我使用一个POST请求,它的主体是列表值的JSON。浏览器拒绝API响应,因为CORS错误。

我研究了CORS来理解它。在一些主题上,我发现解决方案是以下第二种方式。

访问'XMLHttpRequesthttps://script.google.com/macros/s/xxxxxxx'来自原点'https://example.com'已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在"access control Allow Origin"标头。

  1. 使用带有$.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 →*

我认为getJSONpost函数内部有些不同。

*更新:更新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

最新更新