update browser

This commit is contained in:
2025-03-06 16:09:21 +03:00
parent 1445c4f31f
commit 7484909864
16 changed files with 572 additions and 91 deletions

39
docs/browser/06-cors.md Normal file
View File

@@ -0,0 +1,39 @@
---
sidebar_position: 6
---
# CORS
**CORS** (Cross-Origin Resource Sharing) — это механизм, который позволяет веб-страницам запрашивать ресурсы с другого домена, отличного от того, с которого была загружена сама страница. Это важно, потому что браузеры по умолчанию блокируют такие запросы из соображений безопасности (это называется политикой одного источника — Same-Origin Policy).
## Как работает CORS:
1. **Запрос с другого источника:**
- Когда веб-страница пытается сделать запрос (например, через `fetch` или `XMLHttpRequest`) к ресурсу на другом домене, браузер автоматически добавляет в запрос заголовок `Origin`. Этот заголовок содержит домен, с которого был отправлен запрос.
2. **Ответ сервера:**
- Сервер, получив запрос, может разрешить или запретить доступ к ресурсу. Если сервер поддерживает CORS, он добавляет в ответ заголовок `Access-Control-Allow-Origin`, указывая, какие домены могут получить доступ к ресурсу.
- Например, если сервер разрешает доступ всем доменам, он может вернуть: \
`Access-Control-Allow-Origin: *` \
Если доступ разрешен только конкретному домену, то:
`Access-Control-Allow-Origin: https://example.com`
3. **Проверка браузером:**
- Браузер проверяет заголовок `Access-Control-Allow-Origin` в ответе сервера. Если значение заголовка совпадает с доменом, с которого был отправлен запрос (или это *), браузер разрешает доступ к данным. В противном случае запрос блокируется, и на странице возникает ошибка CORS.
4. **Предварительные запросы (Preflight):**
- Для некоторых типов запросов (например, с использованием методов, отличных от GET/POST, или с кастомными заголовками), браузер сначала отправляет предварительный запрос (OPTIONS), чтобы проверить, поддерживает ли сервер CORS и разрешает ли он такие запросы.
- Сервер должен ответить на этот запрос, указав разрешенные методы, заголовки и другие параметры.
## Пример
- Веб-страница на https://example.com делает запрос к API на https://api.example.com.
- Браузер отправляет запрос с заголовком: `Origin: https://example.com`
- Сервер отвечает: `Access-Control-Allow-Origin: https://example.com`
- Браузер проверяет заголовок и разрешает доступ к данным.
## Основные заголовки CORS:
- **Origin:** Указывает домен, с которого отправлен запрос.
- **Access-Control-Allow-Origin:** Указывает, какие домены могут получить доступ к ресурсу.
- **Access-Control-Allow-Methods:** Указывает разрешенные HTTP-методы (например, GET, POST).
- **Access-Control-Allow-Headers:** Указывает разрешенные заголовки в запросе.
- **Access-Control-Allow-Credentials:** Указывает, можно ли отправлять куки или другие учетные данные.
## Важно:
CORS работает только в браузерах. Серверные приложения (например, на Node.js или Python) не ограничены политикой CORS.
Если сервер не настроен для поддержки CORS, браузер заблокирует запрос, даже если сервер возвращает данные.