← Назад ко всем вопросам

Как понять, что проблема CORS

1️⃣ Как кратко ответить

Проблема CORS проявляется, когда браузер блокирует HTTP-запросы к ресурсу на другом домене из-за отсутствия соответствующих заголовков разрешения. Это можно определить по ошибке в консоли браузера, обычно содержащей текст "CORS policy" или "Access-Control-Allow-Origin".

2️⃣ Подробное объяснение темы

CORS (Cross-Origin Resource Sharing) — это механизм безопасности, который позволяет или запрещает веб-приложениям делать запросы на ресурсы, находящиеся на другом домене. Это важно для защиты данных пользователя и предотвращения атак, таких как XSS (Cross-Site Scripting).

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

Как это работает

  1. Запрос с другого домена: Когда ваш веб-приложение делает запрос к API или ресурсу на другом домене, браузер автоматически добавляет заголовок Origin, который указывает, откуда пришел запрос.

  2. Проверка сервером: Сервер, получив запрос, проверяет, разрешен ли доступ с указанного домена. Если разрешен, сервер отправляет ответ с заголовком Access-Control-Allow-Origin, указывающим, какие домены могут получить доступ к ресурсу.

  3. Ответ браузера: Если браузер не видит заголовок Access-Control-Allow-Origin или видит, что домен не совпадает с текущим, он блокирует доступ и выдает ошибку CORS.

Пример ошибки CORS

Когда возникает проблема CORS, в консоли браузера вы можете увидеть сообщение об ошибке, например:

Access to XMLHttpRequest at 'https://api.example.com/data' from origin 'https://myapp.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Пример кода

Рассмотрим пример, как сервер может настроить заголовки для разрешения CORS:

const express = require('express');
const app = express();
​
app.use((req, res, next) => {
  // Разрешаем доступ с домена 'https://myapp.com'
  res.header('Access-Control-Allow-Origin', 'https://myapp.com');
  // Разрешаем определенные методы HTTP
  res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
  // Разрешаем определенные заголовки
  res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
  next();
});
​
app.get('/data', (req, res) => {
  res.json({ message: 'Data accessed successfully' });
});
​
app.listen(3000, () => {
  console.log('Server running on port 3000');
});
  • app.use((req, res, next) => {...}): Middleware для настройки заголовков CORS.
  • res.header('Access-Control-Allow-Origin', 'https://myapp.com'): Разрешает доступ только с домена https://myapp.com.
  • res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE'): Указывает, какие методы HTTP разрешены.
  • res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization'): Указывает, какие заголовки могут быть использованы в запросе.

Зачем это нужно

CORS защищает пользователей от небезопасных запросов, которые могут быть выполнены без их ведома. Это особенно важно для защиты данных и предотвращения атак, которые могут использовать уязвимости в веб-приложениях. Понимание и правильная настройка CORS необходимы для безопасной работы веб-приложений, взаимодействующих с внешними API и ресурсами.

Тема: Web-тестирование, DevTools и хранилища
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки