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 настраивается на сервере, а не в запросе. Клиент не может разрешить себе доступ к другому домену — это задача сервера.