\n\n```\n```javascript\n// Ответ сервера (не JSON, а исполняемый JS)\nhandleData({\"userId\": 123, \"name\": \"John\"});\n```\n**Недостатки JSONP:** поддерживает только GET-запросы, уязвим к XSS, менее контролируем, чем CORS.\n\n#### 3. Прокси-сервер\nПрактический обходной путь на уровне инфраструктуры. Ваш фронтенд делает запрос не на чужой домен, а на **ваш собственный сервер**, который, в свою очередь, перенаправляет запрос к целевому API и возвращает ответ.\n```javascript\n// Вместо прямого вызова\nfetch('https://external-api.com/data')\n\n// Фронтенд обращается к своему прокси\nfetch('/api/proxy/external-data')\n```\n**Преимущества:** полный контроль над запросами и ответами, возможность добавить аутентификацию, логирование, кэширование. Не требует изменений на стороне внешнего API.\n\n#### 4. Другие методы\n* **Настройка `document.domain`**: Работает только для поддоменов одного домена (например, `shop.site.com` и `api.site.com`) и считается устаревшим.\n* **`postMessage()` API**: Безопасный способ связи между окнами, фреймами или вкладками с разными источниками.\n* **Веб-сокеты (`WebSocket`)**: Соединение через протокол `ws://` или `wss://` не подпадает под SOP после установки handshake.\n* **CORS для изображений, CSS, шрифтов**: Некоторые ресурсы (картинки, стили, шрифты) могут загружаться кросс-доменно по умолчанию, но взаимодействие с их содержимым через JavaScript будет ограничено.\n\n### Вывод\n\nПравило **Same-Origin Policy** — это **базовая и необходимая защита**, а не универсальный запрет. Современная веб-разработка активно использует кросс-доменные запросы через **CORS** как стандартный, безопасный и гибкий механизм. **JSONP** остаётся в legacy-коде, а **прокси-сервер** — мощное решение для полного контроля или работы с API, не поддерживающими CORS.\n\nТаким образом, разработчик должен не бороться с SOP, а понимать её и правильно применять инструменты для легального кросс-доменного взаимодействия, выбирая их в зависимости от требований безопасности, архитектуры приложения и возможностей серверной инфраструктуры.","dateCreated":"2026-04-07T20:09:49.347332","upvoteCount":0,"author":{"@type":"Person","name":"deepseek-v3.2"}}}}
← Назад к вопросам

Является ли универсальным правило запрета кросс-доменных запросов?

2.2 Middle🔥 151 комментариев
#JavaScript Core

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI7 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Является ли правило запрета кросс-доменных запросов универсальным?

Нет, правило запрета кросс-доменных (междоменных) запросов не является универсальным. Это фундаментальное ограничение, известное как Same-Origin Policy (SOP, Политика одинакового источника), является краеугольным камнем безопасности веб-браузеров, но существует множество механизмов, которые легально и безопасно его обходят. SOP — это не абсолютный запрет, а стандартная модель безопасности, которую можно контролируемо ослабить с помощью явно определённых технологий.

Что такое Same-Origin Policy и зачем она нужна?

SOP — это политика, реализованная во всех современных браузерах, которая разрешает скриптам и другим ресурсам одной веб-страницы свободно взаимодействовать только с ресурсами, имеющими тот же протокол, хост (домен) и порт. Это предотвращает множество атак, таких как:

  • Кража сессий и CSRF (межсайтовая подделка запроса): Злонамеренный сайт не может прочитать ответ от вашего банка, если вы авторизованы в другой вкладке.
  • Кража данных: Скрипт с одного сайта не может получить доступ к содержимому <iframe> с другого сайта (например, к вашей почте).
  • Утечка конфиденциальной информации.

Однако современные веб-приложения по своей природе распределённые и часто состоят из микросервисов, API и CDN, расположенных на разных доменах. Поэтому были разработаны стандартные механизмы для безопасного кросс-доменного взаимодействия.

Основные механизмы обхода SOP (кросс-доменные запросы)

1. CORS (Cross-Origin Resource Sharing)

Это основной и рекомендуемый стандарт W3C для легальных кросс-доменных запросов. Сервер явно указывает, с каких доменов разрешено получать его ресурсы, с помощью специальных HTTP-заголовков.

Пример заголовков ответа сервера, разрешающего запросы с https://frontend-app.com:

Access-Control-Allow-Origin: https://frontend-app.com
Access-Control-Allow-Methods: GET, POST, PUT
Access-Control-Allow-Headers: Content-Type, Authorization

Браузер, получив такие заголовки, разрешит фронтенду с указанного домена прочитать ответ. Для "непростых" запросов (например, с кастомными заголовками) используется предварительный запрос OPTIONS (preflight).

2. JSONP (JSON with Padding)

Исторический метод, использовавшийся до широкой поддержки CORS. Он использует особенность тега <script>, на который SOP не распространяется.

<!-- Фронтенд -->
<script src="https://api.example.com/data?callback=handleData"></script>
<script>
function handleData(data) {
    console.log(data); // Данные получены!
}
</script>
// Ответ сервера (не JSON, а исполняемый JS)
handleData({"userId": 123, "name": "John"});

Недостатки JSONP: поддерживает только GET-запросы, уязвим к XSS, менее контролируем, чем CORS.

3. Прокси-сервер

Практический обходной путь на уровне инфраструктуры. Ваш фронтенд делает запрос не на чужой домен, а на ваш собственный сервер, который, в свою очередь, перенаправляет запрос к целевому API и возвращает ответ.

// Вместо прямого вызова
fetch('https://external-api.com/data')

// Фронтенд обращается к своему прокси
fetch('/api/proxy/external-data')

Преимущества: полный контроль над запросами и ответами, возможность добавить аутентификацию, логирование, кэширование. Не требует изменений на стороне внешнего API.

4. Другие методы

  • Настройка document.domain: Работает только для поддоменов одного домена (например, shop.site.com и api.site.com) и считается устаревшим.
  • postMessage() API: Безопасный способ связи между окнами, фреймами или вкладками с разными источниками.
  • Веб-сокеты (WebSocket): Соединение через протокол ws:// или wss:// не подпадает под SOP после установки handshake.
  • CORS для изображений, CSS, шрифтов: Некоторые ресурсы (картинки, стили, шрифты) могут загружаться кросс-доменно по умолчанию, но взаимодействие с их содержимым через JavaScript будет ограничено.

Вывод

Правило Same-Origin Policy — это базовая и необходимая защита, а не универсальный запрет. Современная веб-разработка активно использует кросс-доменные запросы через CORS как стандартный, безопасный и гибкий механизм. JSONP остаётся в legacy-коде, а прокси-сервер — мощное решение для полного контроля или работы с API, не поддерживающими CORS.

Таким образом, разработчик должен не бороться с SOP, а понимать её и правильно применять инструменты для легального кросс-доменного взаимодействия, выбирая их в зависимости от требований безопасности, архитектуры приложения и возможностей серверной инфраструктуры.

Является ли универсальным правило запрета кросс-доменных запросов? | PrepBro