Сеть

Rest(ful) API
REST API — это архитектурный стиль взаимодействия между клиентом и сервером.
Он использует стандартные HTTP-методы для работы с ресурсами:
- GET — получить данные (например, список пользователей).
- POST — создать новый ресурс.
- PUT — полностью заменить существующий ресурс новым.
- PATCH — частично обновить ресурс.
- DELETE — удалить ресурс.
Разница между PUT и PATCH
Напр. хотим отредактировать User:
{ "id": 1, "name": "Alice", "email": "alice@example.com", "age": 25 }
Если редактировать через PUT - даже если нужно изменить только name, всё равно нужно отправить объект со всеми полями. Если редактировать через PATCH - можно отправить объект содержащий только name.
CDN
CDN — это сеть серверов, распределённых по всему миру, которая кеширует и отдает статический контент (изображения, стили, JS, видео и т. д.).
DNS
DNS преобразует удобочитаемые доменные имена в IP-адреса. Пример: openai.com → 104.18.12.123
Безопасность
CORS (Cross-Origin Resource Sharing)
- это политика безопасности браузера, которая ограничивает запросы на другой домен.
- если сервер не разрешает домен клиента в заголовках, браузер заблокирует ответ.
- напр. с локалхоста при разработке фронта, ты отправляешь запрос и браузер заблокирует доступ к ответу, если бэк не добавил в хэдеры "Access-Control-Allow-Origin": http://localhost:3000
- (либо юзать reverse-proxy, это дев-сервер (Next/CRA/Vite), ты шлёшь на него запросы(на его локалхост), а он делает запрос на реальный урл и даёт браузеру ответ от лица локалхоста
Preflight-запрос:
- Для небезопасных методов (например, POST с
Content-Type: application/json
) браузер сначала отправляет OPTIONS-запрос, чтобы проверить, разрешает ли сервер такой доступ. - Preflight отправляется, если запрос не попадает под “simple requests”.
Simple request — это:
- метод: GET, POST, HEAD;
- Content-Type: application/x-www-form-urlencoded, multipart/form-data или text/plain;
- без кастомных заголовков (например, Authorization, X-My-Header).
CSRF (XSRF) (Cross-Site Request Forgery)
Атака: злоумышленник заставляет браузер отправить запрос на доверенный сайт с твоими cookie.
Пример:
- во вкладке 1 ты залогинен в
bank.com
- во вкладке 2 открываешь
evil.com
- там скрытая форма отправляет запрос на
bank.com
- браузер сам прикладывает cookie → сервер думает, что это сделал ты.
Защита:
-
SameSite для cookie
- флаг
SameSite=Lax
илиStrict
говорит браузеру: не отправляй cookie, если запрос пришёл с другого сайта. - значит, при переходе с
evil.com
cookiebank.com
не прикрепятся.
- флаг
-
CSRF-токены
- сервер генерирует случайный токен и вставляет его в форму или выдаёт в API.
- клиент при каждом запросе должен его отправлять.
- злоумышленник не знает токен → его запрос отклоняется.
-
Проверка заголовков
- сервер смотрит
Origin
илиReferer
. - если запрос пришёл не с
bank.com
, он блокируется.
- сервер смотрит
XSS (Cross-Site Scripting)
- внедрение вредоносных скриптов в сайт через инпуты, параметры урла Защита
- Экранирование HTML (React делает автоматически, если не выключить через prop
dangerouslySetInnerHTML
)- замена спецсимволов напр.
<
>
в кодировку<
>
- замена спецсимволов напр.
- HttpOnly cookie
- Флаг HttpOnly делает cookie недоступными для JavaScript
- Напр. (Express)
app.post('/login', (req, res) => { // допустим, пользователь успешно авторизовался res.cookie('session', 'abc123', { httpOnly: true, // ❗ JS на фронте не сможет прочитать secure: true, // только через HTTPS sameSite: 'Lax', // базовая защита от CSRF maxAge: 1000 * 60 * 60 // 1 час }); res.send('Logged in'); });
- CSP (Content Security Policy)
- это HTTP-заголовок, который говорит браузеру: "какие скрипты, стили, картинки и другие ресурсы можно загружать и выполнять на этом сайте"
- выставляется на File Static Server-е (напр. Nginx), в Next.js - в next.config.js
HTTP(S)
- HTTP — это протокол, по которому браузер и сервер обмениваются данными.
- HTTPS — это тот же HTTP, но «поверх» него включается TLS-шифрование.
Что это даёт:
- Никто не может подглядеть, какие данные отправляются (например, пароль).
- Никто не может подменить ответы сервера незаметно.
- Браузер проверяет, что сайт настоящий (через сертификат).
MITM - Атака «человек посередине»
Злоумышленник встраивается между браузером и сервером, читает или подменяет данные.
Часто встречается в открытых Wi-Fi или при HTTP (или при ws://
).
Защита
- Редирект с HTTP на HTTPS (настраивается в Nginx)
- Для Websocket использование
wss://
- CSP
- HSTS (HTTP Strict Transport Security)
- это еще один заголовок (наравне с CSP)
- тоже выставляется на File Static Server-е (напр. Nginx), в Next.js - в next.config.js
После ввода URL в адресную строку
- Браузер через DNS получает IP-адрес домена.
- Если HTTPS → TLS-рукопожатие (договариваются о шифровании, проверяется сертификат).
- Запрос к серверу → приходит HTML.
- Загружаются CSS, JS, картинки.
- Строятся DOM и CSSOM → layout → paint.
- JS делает страницу интерактивной (гидратация).