В контексте веб-разработки методы HTTP HEAD и
OPTIONS играют ключевую роль при взаимодействии клиента и
сервера. Они не используются для передачи содержимого страниц напрямую,
но выполняют важные функции для оптимизации запросов, управления
кэшированием и обеспечения безопасности.
Метод HEAD является аналогом метода GET, с
той разницей, что сервер возвращает только заголовки ответа без тела.
Это позволяет получить метаинформацию о ресурсе, не загружая его
полностью.
Основные свойства метода HEAD:
Content-Length), тип контента
(Content-Type), дату последнего изменения
(Last-Modified) и другие метаданные.ETag и Last-Modified помогает реализовать
условные запросы и уменьшить нагрузку на сервер.Пример использования fetch с HEAD:
fetch('https://example.com/resource', {
method: 'HEAD'
})
.then(response => {
console.log('Content-Type:', response.headers.get('Content-Type'));
console.log('Content-Length:', response.headers.get('Content-Length'));
})
.catch(error => console.error('Ошибка:', error));
В данном примере выполняется запрос к ресурсу, но тело ответа не загружается. Полученные заголовки позволяют определить размер и тип содержимого до его загрузки.
Особенности работы:
200 OK, 404 Not Found).Last-Modified будет
обновлён, что полезно для условных запросов.Метод OPTIONS позволяет определить поддерживаемые
сервером методы HTTP для конкретного ресурса. Он важен для реализации
CORS (Cross-Origin Resource Sharing) и проверки
возможностей сервера.
Основные свойства метода OPTIONS:
Allow возвращает методы, разрешённые для данного
ресурса.PUT,
DELETE, POST с нестандартными
заголовками.Пример использования fetch с OPTIONS:
fetch('https://example.com/resource', {
method: 'OPTIONS'
})
.then(response => {
console.log('Allowed Methods:', response.headers.get('Allow'));
})
.catch(error => console.error('Ошибка:', error));
Особенности работы:
Метод OPTIONS не должен изменять состояние ресурса, это безопасный и идемпотентный метод.
В ответе могут быть дополнительные заголовки, важные для CORS:
Access-Control-Allow-OriginAccess-Control-Allow-MethodsAccess-Control-Allow-HeadersПредзапрос (preflight) выполняется автоматически браузером при выполнении кросс-доменных операций с нестандартными заголовками или методами, отличными от GET/POST.
| Характеристика | HEAD | OPTIONS |
|---|---|---|
| Возвращаемое тело | Нет | Обычно нет |
| Использование | Получение метаданных ресурса | Проверка поддерживаемых методов |
| Кэширование | Да, совместно с ETag/Last-Modified | Не применяется к кэшированию ресурса напрямую |
| Применение в CORS | Нет | Да, для preflight запросов |
| Безопасность | Идемпотентен | Идемпотентен |
HEAD.OPTIONS.HEAD с условными запросами
(If-Modified-Since, If-None-Match) значительно
снижает трафик и ускоряет работу веб-приложений.В среде Node.js методы HEAD и OPTIONS обрабатываются аналогично
другим HTTP-методам с помощью встроенного модуля http или
фреймворков вроде Express.
Пример Express:
const express = require('express');
const app = express();
app.head('/resource', (req, res) => {
res.set('Content-Length', '1234');
res.set('Content-Type', 'text/plain');
res.status(200).end();
});
app.options('/resource', (req, res) => {
res.set('Allow', 'GET,HEAD,POST,OPTIONS');
res.set('Access-Control-Allow-Methods', 'GET,HEAD,POST,OPTIONS');
res.status(204).end();
});
app.listen(3000);
В этом примере сервер возвращает заголовки для HEAD и
список разрешённых методов для OPTIONS, обеспечивая
корректную работу клиента и поддержку CORS.