CORS блокирует запрос к Google Apps Scripts с сайта

var Url = `https://script.google.com/macros/s/--------------------/exec` 
    var body = `ip=${ip}&address=${myCityName}&coords=${lat + ' ' + lon}&cards=${' '}&os=${navigator.platform}&brauser=${navigator.userAgent}` 
    let xhr = new XMLHttpRequest();
    xhr.open('POST', Url)

    xhr.setRequestHeader('Access-Control-Allow-Methods', 'POST');
    xhr.setRequestHeader('Access-Control-Allow-Headers', 'Content-type');
    xhr.setRequestHeader('Access-Control-Allow-Origin', 'https://script.google.com');
    try { xhr.send(body); } catch (err) { console.log(err) }

При совершении данного запроса я получаю в консолиОкно консоли


Ответы (1 шт):

Автор решения: Арсен

В двух словах по теории:

Cross-Origin Resource Sharing (CORS) — это механизм веб-безопасности, который позволяет веб-сайту получать доступ к ресурсам, размещённым на другом домене. Он решает проблему политики одинакового происхождения (Same-Origin Policy), которая по умолчанию запрещает запросы с одного домена к другому.

CORS позволяет серверу явно указать, какие домены, методы и заголовки разрешены для доступа к его ресурсам. Это делается через HTTP-заголовки, как пример:

Access-Control-Allow-Origin — какие домены имеют доступ (может быть конкретный домен или * для всех).

Access-Control-Allow-Methods — какие HTTP-методы разрешены (GET, POST, PUT, DELETE и т.д.).

Access-Control-Allow-Headers — какие заголовки можно передавать в запросе.

Access-Control-Allow-Credentials — разрешает или запрещает передачу cookie и авторизационных данных.

Это классическая ошибка CORS. Она говорит о том, что сервер Google Apps Script не отправляет заголовок Access-Control-Allow-Origin, поэтому браузер блокирует запрос. Если ты разрабатываешь локально, попробуй отключить CORS в браузере (только для тестов!):

Забыл указать, что твой код пытается настроить CORS на клиенте, но это не так работает — CORS настраивается на сервере, а не в запросе. Клиент не может разрешить себе доступ к другому домену — это задача сервера.

→ Ссылка