簡體   English   中英

跨域發出請求時,getJSON() 函數和 post() 函數有什么區別?

[英]What is the difference between getJSON() function and post() function when make a request across domain?

我正在嘗試使用 javascript 從我的網站訪問 Google Apps Script WebAPI 以傳遞一些值並創建一個 excel 文件並通過此 API 下載它。

我嘗試了以下兩種方式:

  1. 使用帶有 $.post 的 POST 請求。

我的價值觀很多。 因此,首先,我使用帶有正文的 POST 請求是列表值的 JSON。 由於 CORS 錯誤,瀏覽器拒絕 API 響應。

我研究了 CORS 以了解它。 在某些主題上,我發現解決方案是以下第二種方式。

CORS 政策已阻止在“ https://script.google.com/macros/s/xxxxxxx ”處訪問 XMLHttpRequest 來自源“ https://example.com ”:對預檢請求的響應未通過訪問控制檢查:請求的資源上不存在“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 中托管圖像和靜態文件,這與源不同,並有助於通過緩存和發出並行請求來提高性能。

同樣, GET也用於從第三方域提供廣告、跟蹤器和分析。

有關同源策略和 GET 的更多信息,訪問https://security.stackexchange.com/a/16221/9517

瀏覽器如何識別允許跨源請求的其他 HTTP 動詞詳細說明@ https://developer.mozilla.org/en-US/docs/Glossary/Preflight_request

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM