HTTP¶
Стабильность: 2 – Стабильная
АПИ является удовлетворительным. Совместимость с NPM имеет высший приоритет и не будет нарушена кроме случаев явной необходимости.
Для использования HTTP-сервера и клиента необходимо require('node:http')
.
Интерфейсы HTTP в Node.js разработаны для поддержки многих особенностей протокола, которые традиционно были сложны в использовании. В частности, большие, возможно, закодированные в виде кусков, сообщения. Интерфейс тщательно следит за тем, чтобы никогда не буферизировать целые запросы или ответы, поэтому пользователь может передавать данные в потоковом режиме.
Заголовки HTTP-сообщений представлены объектом следующим образом:
1 2 3 4 5 6 7 |
|
Ключи приводятся в нижнем регистре. Значения не изменяются.
Для того чтобы поддерживать весь спектр возможных HTTP-приложений, HTTP API Node.js является очень низкоуровневым. Он занимается только обработкой потоков и разбором сообщений. Он разбирает сообщение на заголовки и тело, но не разбирает собственно заголовки или тело.
Смотрите message.headers
для подробностей о том, как обрабатываются дублирующиеся заголовки.
Необработанные заголовки в том виде, в котором они были получены, сохраняются в свойстве rawHeaders
, которое представляет собой массив [key, value, key2, value2, ...]
. Например, объект заголовка предыдущего сообщения может иметь следующий список rawHeaders
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Класс http.Agent¶
Агент отвечает за управление сохранением и повторным использованием соединений для HTTP-клиентов. Он поддерживает очередь ожидающих запросов для данного хоста и порта, повторно используя одно сокетное соединение для каждого до тех пор, пока очередь не опустеет, после чего сокет либо уничтожается, либо помещается в пул, где он хранится для повторного использования для запросов к тому же хосту и порту. Будет ли он уничтожен или помещен в пул, зависит от keepAlive
опция.
Для пула соединений включена функция TCP Keep-Alive, но серверы могут закрывать простаивающие соединения, в этом случае они будут удалены из пула, а новое соединение будет создано при новом HTTP-запросе на этот хост и порт. Серверы также могут отказаться разрешать несколько запросов через одно и то же соединение, в этом случае соединение будет создаваться заново для каждого запроса и не может быть объединено в пул. Агент будет по-прежнему выполнять запросы к этому серверу, но каждый запрос будет выполняться через новое соединение.
Когда соединение закрывается клиентом или сервером, оно удаляется из пула. Любые неиспользуемые сокеты в пуле будут удалены, чтобы не заставлять процесс Node.js работать, когда нет незавершенных запросов. (см. socket.unref()
).
Хорошей практикой является destroy()
экземпляра Agent
, когда он больше не используется, поскольку неиспользуемые сокеты потребляют ресурсы ОС.
Сокеты удаляются из агента, когда сокет испускает либо событие 'close'
, либо событие 'agentRemove'
. Если вы хотите держать один HTTP-запрос открытым в течение длительного времени, не сохраняя его в агенте, можно поступить следующим образом:
1 2 3 4 5 |
|
Агент также может быть использован для отдельного запроса. Если указать {agent: false}
в качестве опции для функций http.get()
или http.request()
, то для клиентского соединения будет использоваться одноразовый Agent
с параметрами по умолчанию.
agent:false
:
1 2 3 4 5 6 7 8 9 10 11 |
|
new Agent¶
1 |
|
options
<Object>
Набор конфигурируемых опций для установки на агента. Может иметь следующие поля:keepAlive
<boolean>
Сохранять сокеты даже при отсутствии невыполненных запросов, чтобы их можно было использовать для будущих запросов без необходимости восстанавливать TCP-соединение. Не путать со значениемkeep-alive
заголовкаConnection
. ЗаголовокConnection: keep-alive
всегда отправляется при использовании агента, за исключением случаев, когда заголовокConnection
указан явно или когда опцииkeepAlive
иmaxSockets
соответственно установлены вfalse
иInfinity
, в этом случае будет использоватьсяConnection: close
. По умолчанию:false
.keepAliveMsecs
<number>
При использовании опцииkeepAlive
указывает начальную задержку для пакетов TCP Keep-Alive. Игнорируется, если опцияkeepAlive
имеет значениеfalse
илиundefined
. По умолчанию:1000
.maxSockets
<number>
Максимальное количество сокетов, разрешенное для одного хоста. Если один и тот же хост открывает несколько одновременных соединений, каждый запрос будет использовать новый сокет, пока не будет достигнуто значениеmaxSockets
. Если хост пытается открыть больше соединений, чемmaxSockets
, дополнительные запросы попадают в очередь ожидающих запросов и переходят в состояние активного соединения, когда существующее соединение завершается. Это гарантирует, что в любой момент времени с данного хоста будет не болееmaxSockets
активных соединений. По умолчанию:бесконечность
.maxTotalSockets
<number>
Максимальное количество сокетов, разрешенное для всех хостов в целом. Каждый запрос будет использовать новый сокет, пока не будет достигнуто максимальное значение. По умолчанию:Infinity
.maxFreeSockets
<number>
Максимальное количество сокетов на хосте, которое можно оставить открытым в свободном состоянии. Имеет значение, только еслиkeepAlive
установлено вtrue
. По умолчанию:256
.scheduling
<string>
Стратегия планирования, которую следует применять при выборе следующего свободного сокета для использования. Это может быть'fifo'
или'lifo'
. Основное различие между этими двумя стратегиями планирования заключается в том, что'lifo'
выбирает последний использованный сокет, а'fifo'
выбирает наименее использованный сокет. В случае низкой скорости запросов в секунду, планирование'lifo'
снижает риск выбора сокета, который мог быть закрыт сервером из-за неактивности. В случае высокой скорости запросов в секунду, планирование'fifo'
будет максимизировать количество открытых сокетов, в то время как планирование'lifo'
будет поддерживать его на минимально возможном уровне. По умолчанию:'lifo'
.timeout
<number>
Таймаут сокета в миллисекундах. Таймаут устанавливается при создании сокета.
Также поддерживаются опции
в socket.connect()
.
В стандартном http.globalAgent
, который используется http.request()
, все эти значения установлены по умолчанию.
Для настройки любого из них необходимо создать пользовательский экземпляр http.Agent
.
1 2 3 4 |
|
agent.createConnection¶
1 |
|
options
<Object>
Опции, содержащие детали соединения. Формат опций смотрите вnet.createConnection()
callback
<Function>
Функция обратного вызова, которая получает созданный сокет- Возвращает: {stream.Duplex}
Создает сокет/поток, который будет использоваться для HTTP-запросов.
По умолчанию эта функция аналогична net.createConnection()
. Однако пользовательские агенты могут переопределить этот метод, если требуется большая гибкость.
Сокет/поток может быть предоставлен одним из двух способов: путем возврата сокета/потока из этой функции или путем передачи сокета/потока в callback
.
Этот метод гарантированно возвращает экземпляр класса <net.Socket>
, подкласса {stream.Duplex}, если пользователь не укажет тип сокета, отличный от <net.Socket>
.
callback
имеет сигнатуру (err, stream)
.
agent.keepSocketAlive¶
1 |
|
socket
{stream.Duplex}
Вызывается, когда socket
отделяется от запроса и может быть сохранен агентом
. Поведение по умолчанию:
1 2 3 |
|
Этот метод может быть переопределен конкретным подклассом Agent
. Если этот метод возвращает ложное значение, то сокет будет уничтожен, а не сохранен для использования при следующем запросе.
Аргумент socket
может быть экземпляром <net.Socket>
, подкласса {stream.Duplex}.
agent.reuseSocket¶
1 |
|
socket
{stream.Duplex}request
{http.ClientRequest}
Вызывается, когда socket
присоединяется к request
после того, как он был сохранен из-за опций keep-alive. Поведение по умолчанию таково:
1 |
|
Этот метод может быть переопределен конкретным подклассом Agent
.
Аргумент socket
может быть экземпляром <net.Socket>
, подкласса {stream.Duplex}.
agent.destroy¶
1 |
|
Уничтожьте все сокеты, которые в настоящее время используются агентом.
Обычно в этом нет необходимости. Однако если используется агент с включенной опцией keepAlive
, то лучше всего явно завершить работу агента, когда он больше не нужен. В противном случае сокеты могут оставаться открытыми довольно долгое время, прежде чем сервер их завершит.
agent.freeSockets¶
Объект, который содержит массивы сокетов, ожидающих использования агентом, когда включено keepAlive
. Не модифицируйте.
Сокеты в списке freeSockets
будут автоматически уничтожены и удалены из массива по таймауту
.
agent.getName¶
1 |
|
Получает уникальное имя для набора опций запроса, чтобы определить, может ли соединение быть использовано повторно. Для HTTP-агента это возвращает host:port:localAddress
или host:port:localAddress:family
. Для HTTPS-агента имя включает CA, cert, шифры и другие специфические для HTTPS/TLS опции, определяющие возможность повторного использования сокета.
agent.maxFreeSockets¶
По умолчанию установлено значение 256. Для агентов с включенной опцией keepAlive
задается максимальное количество сокетов, которые будут оставлены открытыми в свободном состоянии.
agent.maxSockets¶
По умолчанию установлено на бесконечность
. Определяет, сколько одновременных сокетов может быть открыто агентом для каждого origin. Origin - это возвращаемое значение agent.getName()
.
agent.maxTotalSockets¶
По умолчанию имеет значение бесконечность
. Определяет, сколько одновременных сокетов может быть открыто у агента. В отличие от maxSockets
, этот параметр применяется ко всем источникам.
agent.requests¶
Объект, содержащий очереди запросов, которые еще не были назначены на сокеты. Не модифицируйте.
agent.sockets¶
Объект, содержащий массивы сокетов, используемых агентом в данный момент. Не модифицировать.
Класс http.ClientRequest¶
- Расширяет: {http.OutgoingMessage}
Этот объект создается внутри и возвращается из http.request()
. Он представляет проходящий запрос, заголовок которого уже поставлен в очередь. Заголовок все еще можно изменить с помощью API setHeader(name, value)
, getHeader(name)
, removeHeader(name)
. Фактический заголовок будет отправлен вместе с первым куском данных или при вызове request.end()
.
Чтобы получить ответ, добавьте к объекту запроса слушатель для 'response'
. 'response'
будет испущен из объекта запроса, когда будут получены заголовки ответа. Событие 'response'
выполняется с одним аргументом, который является экземпляром http.IncomingMessage
.
Во время события response
можно добавить слушателей к объекту ответа, в частности, для прослушивания события данные
.
Если обработчик response
не добавлен, то ответ будет полностью отброшен. Однако если обработчик события 'response'
добавлен, то данные из объекта ответа должны быть потреблены, либо вызовом response.read()
при каждом событии 'readable'
, либо добавлением обработчика 'data'
, либо вызовом метода .resume()
. Пока данные не будут прочитаны, событие 'end'
не произойдет. Кроме того, пока данные не будут считаны, будет расходоваться память, что в конечном итоге может привести к ошибке "процесс вышел из памяти".
Для обратной совместимости, res
будет выдавать 'error'
только если зарегистрирован слушатель 'error'
.
Установите заголовок Content-Length
, чтобы ограничить размер тела ответа. Если response.strictContentLength
установлен в true
, несоответствие значения заголовка Content-Length
приведет к возникновению ошибки
, определяемой code:
'ERR_HTTP_CONTENT_LENGTH_MISMATCH
.
Значение Content-Length
должно быть в байтах, а не в символах. Используйте Buffer.byteLength()
для определения длины тела в байтах.
Событие abort¶
Стабильность: 0 – устарело или набрало много негативных отзывов
Эта фича является проблемной и ее планируют изменить. Не стоит полагаться на нее. Использование фичи может вызвать ошибки. Не стоит ожидать от нее обратной совместимости.
Вместо этого слушайте событие 'close'
.
Выдается, когда запрос был прерван клиентом. Это событие происходит только при первом вызове abort()
.
Событие close¶
Указывает, что запрос завершен, или его базовое соединение было прервано преждевременно (до завершения ответа).
Событие connect¶
ответ
{http.IncomingMessage}сокет
{stream.Duplex}head
<Buffer>
Выдается каждый раз, когда сервер отвечает на запрос методом CONNECT
. Если это событие не прослушивается, клиенты, получающие метод CONNECT
, закрывают свои соединения.
Это событие гарантированно передается экземпляру класса <net.Socket>
, подкласса {stream.Duplex}, если только пользователь не укажет тип сокета, отличный от <net.Socket>
.
Пара клиент-сервер демонстрирует, как слушать событие 'connect'
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
|
Событие continue¶
Выдается, когда сервер посылает HTTP-ответ '100 Continue', обычно потому, что запрос содержит 'Expect: 100-continue'. Это указание, что клиент должен отправить тело запроса.
Событие finish¶
Вызывается, когда запрос отправлен. Точнее, это событие возникает, когда последний сегмент заголовков и тела ответа был передан операционной системе для передачи по сети. Это не означает, что сервер уже что-то получил.
Событие information¶
info
<Object>
Выдается, когда сервер посылает промежуточный ответ 1xx (исключая 101 Upgrade). Слушатели этого события получат объект, содержащий версию HTTP, код статуса, сообщение о статусе, объект заголовков с ключевыми значениями и массив с именами необработанных заголовков, за которыми следуют их соответствующие значения.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Статусы 101 Upgrade не вызывают этого события из-за отхода от традиционной цепочки HTTP-запросов/ответов, таких как веб-сокеты, обновления TLS на месте или HTTP 2.0. Чтобы получать уведомления о 101 обновлении, вместо этого слушайте событие 'upgrade'
.
Событие response¶
response
{http.IncomingMessage}
Испускается, когда получен ответ на данный запрос. Это событие испускается только один раз.
Событие socket¶
socket
{stream.Duplex}
Это событие гарантированно передается экземпляру класса <net.Socket>
, подкласса {stream.Duplex}, если пользователь не укажет тип сокета, отличный от <net.Socket>
.
Событие timeout¶
Выдается, когда базовый сокет завершает работу от бездействия. Это только уведомляет о том, что сокет бездействовал. Запрос должен быть уничтожен вручную.
См. также: request.setTimeout()
.
Событие upgrade¶
ответ
{http.IncomingMessage}сокет
{stream.Duplex}head
<Buffer>
Выдается каждый раз, когда сервер отвечает на запрос с обновлением. Если это событие не прослушивается и код состояния ответа равен 101 Switching Protocols, клиенты, получившие заголовок обновления, закрывают свои соединения.
Это событие гарантированно передается экземпляру класса <net.Socket>
, подкласса {stream.Duplex}, если только пользователь не укажет тип сокета, отличный от <net.Socket>
.
Пара клиент-сервер демонстрирует, как прослушивать событие update
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
|
request.abort¶
1 |
|
Стабильность: 0 – устарело или набрало много негативных отзывов
Эта фича является проблемной и ее планируют изменить. Не стоит полагаться на нее. Использование фичи может вызвать ошибки. Не стоит ожидать от нее обратной совместимости.
Вместо этого используйте request.destroy()
.
Помечает запрос как прерванный. Вызов этой функции приведет к тому, что оставшиеся данные в ответе будут удалены, а сокет будет уничтожен.
request.aborted¶
Стабильность: 0 – устарело или набрало много негативных отзывов
Эта фича является проблемной и ее планируют изменить. Не стоит полагаться на нее. Использование фичи может вызвать ошибки. Не стоит ожидать от нее обратной совместимости.
Вместо этого проверьте request.destroyed
.
Свойство request.aborted
будет true
, если запрос был прерван.
request.connection¶
Стабильность: 0 – устарело или набрало много негативных отзывов
Эта фича является проблемной и ее планируют изменить. Не стоит полагаться на нее. Использование фичи может вызвать ошибки. Не стоит ожидать от нее обратной совместимости.
Используйте request.socket
.
- {stream.Duplex}
См. request.socket
.
request.cork¶
1 |
|
См. writable.cork()
.
request.end¶
1 |
|
данные
<string>
|<Buffer>
|<Uint8Array>
encoding
<string>
callback
<Function>
- Возвращает:
<this>
Завершает отправку запроса. Если какие-либо части тела остались неотправленными, он спустит их в поток. Если запрос чанкирован, то будет отправлено завершающее '0\r\n\r\n'
.
Если указано data
, это эквивалентно вызову request.write(data, encoding)
, за которым следует request.end(callback)
.
Если указан callback
, он будет вызван, когда поток запросов завершится.
request.destroy¶
1 |
|
Уничтожить запрос. Опционально выдает событие 'error'
и выдает событие 'close'
. Вызов этой функции приведет к тому, что оставшиеся данные в ответе будут сброшены, а сокет будет уничтожен.
Подробности см. в writable.destroy()
.
request.destroyed¶
Является true
после вызова request.destroy()
.
Более подробную информацию смотрите в writable.destroyed
.
request.finished¶
Стабильность: 0 – устарело или набрало много негативных отзывов
Эта фича является проблемной и ее планируют изменить. Не стоит полагаться на нее. Использование фичи может вызвать ошибки. Не стоит ожидать от нее обратной совместимости.
Используйте request.writableEnded
.
Свойство request.finished
будет true
, если был вызван request.end()
. Свойство request.end()
будет вызвано автоматически, если запрос был инициирован через http.get()
.
request.flushHeaders¶
1 |
|
Смывает заголовки запроса.
В целях эффективности Node.js обычно буферизирует заголовки запроса до тех пор, пока не будет вызван request.end()
или не будет записан первый фрагмент данных запроса. Затем он пытается упаковать заголовки запроса и данные в один TCP-пакет.
Обычно это желательно (это экономит время на обход TCP), но не тогда, когда первые данные не будут отправлены, возможно, намного позже. Функция request.flushHeaders()
обходит эту оптимизацию и запускает запрос.
request.getHeader¶
1 |
|
Считывает заголовок запроса. Имя не чувствительно к регистру. Тип возвращаемого значения зависит от аргументов, переданных в request.setHeader()
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
request.getHeaderNames¶
1 |
|
- Возвращает:
<string[]>
Возвращает массив, содержащий уникальные имена текущих исходящих заголовков. Все имена заголовков в нижнем регистре.
1 2 3 4 5 |
|
request.getHeaders¶
1 |
|
- Возвращает:
<Object>
Возвращает неглубокую копию текущих исходящих заголовков. Поскольку используется неглубокая копия, значения массива могут быть изменены без дополнительных вызовов различных методов модуля http, связанных с заголовками. Ключами возвращаемого объекта являются имена заголовков, а значениями - соответствующие значения заголовков. Все имена заголовков пишутся в нижнем регистре.
Объект, возвращаемый методом request.getHeaders()
, не прототипически наследует от JavaScript Object
. Это означает, что типичные методы Object
, такие как obj.toString()
, obj.hasOwnProperty()
и другие, не определены и не будут работать.
1 2 3 4 5 |
|
request.getRawHeaderNames¶
1 |
|
- Возвращает:
<string[]>
Возвращает массив, содержащий уникальные имена текущих исходящих необработанных заголовков. Имена заголовков возвращаются с установленным точным регистром.
1 2 3 4 5 |
|
request.hasHeader¶
1 |
|
Возвращает true
, если заголовок, обозначенный name
, в настоящее время установлен в исходящих заголовках. Соответствие имени заголовка не чувствительно к регистру.
1 |
|
request.maxHeadersCount¶
<number>
По умолчанию:2000
.
Ограничивает максимальное количество заголовков ответа. Если установлено значение 0, ограничение не будет применяться.
request.path¶
<string>
Путь запроса.
request.method¶
<string>
Метод запроса.
request.host¶
<string>
Хост запроса.
request.protocol¶
<string>
Протокол запроса.
request.removeHeader¶
1 |
|
name
<string>
Удаляет заголовок, который уже определен в объекте headers.
1 |
|
request.reusedSocket¶
<boolean>
Отправляется ли запрос через повторно используемый сокет.
При отправке запроса через агент с поддержкой keep-alive, базовый сокет может быть использован повторно. Но если сервер закроет соединение в неудачное время, клиент может столкнуться с ошибкой 'ECONNRESET'.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Пометив запрос, использовал ли он повторно сокет или нет, мы можем сделать автоматический повтор ошибки на его основе.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
request.setHeader¶
1 |
|
Устанавливает значение одного заголовка для объекта headers. Если этот заголовок уже существует в отправляемых заголовках, его значение будет заменено. Для отправки нескольких заголовков с одинаковым именем используйте массив строк. Значения, не являющиеся строками, будут сохранены без изменений. Поэтому request.getHeader()
может возвращать нестроковые значения. Однако нестроковые значения будут преобразованы в строки для передачи по сети.
1 |
|
или
1 2 3 4 |
|
Когда значение представляет собой строку, будет выдано исключение, если оно содержит символы вне кодировки latin1
.
Если вам нужно передать в значении символы UTF-8, пожалуйста, кодируйте значение, используя стандарт RFC 8187.
1 2 3 4 5 6 7 |
|
request.setNoDelay¶
1 |
|
noDelay
<boolean>
Как только сокет будет назначен этому запросу и подключен socket.setNoDelay()
будет вызван.
request.setSocketKeepAlive¶
1 |
|
Как только сокет будет назначен этому запросу и подключен socket.setKeepAlive()
будет вызван.
request.setTimeout¶
1 |
|
timeout
<number>
Миллисекунды до завершения запроса.callback
<Function>
Необязательная функция, которая будет вызвана, когда произойдет таймаут. Аналогично привязке к событиюtimeout
.- Возвращает: {http.ClientRequest}
Когда сокет назначен этому запросу и подключен, будет вызвана функция socket.setTimeout()
.
request.socket¶
- {stream.Duplex}
Ссылка на базовый сокет. Обычно пользователи не хотят обращаться к этому свойству. В частности, сокет не будет испускать события `'readable'' из-за того, как парсер протокола присоединяется к сокету.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Это свойство гарантированно является экземпляром класса <net.Socket>
, подкласса {stream.Duplex}, если пользователь не указал тип сокета, отличный от <net.Socket>
.
request.uncork¶
1 |
|
См. writable.uncork()
.
request.writableEnded¶
Является true
после вызова request.end()
. Это свойство не указывает, были ли данные выгружены, для этого используйте request.writableFinished
.
request.writableFinished¶
Является true
, если все данные были выгружены в базовую систему, непосредственно перед тем, как будет выпущено событие 'finish'
.
request.write¶
1 |
|
chunk
<string>
|<Buffer>
|<Uint8Array>
encoding
<string>
обратный вызов
<Function>
- Возвращает:
<boolean>
Отправляет фрагмент тела. Этот метод может быть вызван несколько раз. Если не задана Content-Length
, данные будут автоматически закодированы в кодировке передачи HTTP Chunked, чтобы сервер знал, когда данные заканчиваются. Добавляется заголовок Transfer-Encoding: chunked
. Вызов request.end()
необходим для завершения отправки запроса.
Аргумент encoding
является необязательным и применяется только в том случае, если chunk
является строкой. По умолчанию используется значение 'utf8
.
Аргумент callback
необязателен и будет вызван, когда этот кусок данных будет смыт, но только если кусок не пустой.
Возвращает true
, если все данные были успешно сброшены в буфер ядра. Возвращает false
, если все данные или их часть были помещены в пользовательскую память. Когда буфер снова станет свободным, будет выдано сообщение `'drain''.
Когда функция write
вызывается с пустой строкой или буфером, она ничего не делает и ждет новых данных.
http.Server¶
- Расширяет: {net.Server}
Событие: checkContinue¶
запрос
{http.IncomingMessage}ответ
{http.ServerResponse}
Выдается каждый раз, когда получен запрос с HTTP Expect: 100-continue
. Если это событие не прослушивается, сервер автоматически отвечает на запрос с 100 Continue
.
Обработка этого события включает вызов response.writeContinue()
, если клиент должен продолжить отправку тела запроса, или генерацию соответствующего HTTP ответа (например, 400 Bad Request), если клиент не должен продолжать отправку тела запроса.
Когда это событие испущено и обработано, событие 'request'
не будет испущено.
Событие: checkExpectation¶
запрос
{http.IncomingMessage}ответ
{http.ServerResponse}
Выдается каждый раз, когда получен запрос с заголовком HTTP Expect
, значение которого не равно 100-continue
. Если это событие не прослушивается, сервер автоматически отвечает на него сообщением 417 Expectation Failed
.
Когда это событие испущено и обработано, событие 'request'
не будет испущено.
Событие: clientError¶
exception
<Error>
socket
{stream.Duplex}
Если клиентское соединение испускает событие `'error'', оно будет передано сюда. Слушатель этого события отвечает за закрытие/уничтожение базового сокета. Например, можно пожелать более изящно закрыть сокет с помощью пользовательского HTTP-ответа вместо резкого разрыва соединения. Сокет должен быть закрыт или уничтожен до завершения работы слушателя.
Это событие гарантированно передается экземпляру класса <net.Socket>
, подкласса {stream.Duplex}, если пользователь не укажет тип сокета, отличный от <net.Socket>
.
Поведение по умолчанию заключается в попытке закрыть сокет с HTTP '400 Bad Request', или HTTP '431 Request Header Fields Too Large' в случае ошибки HPE_HEADER_OVERFLOW
. Если сокет не доступен для записи или были отправлены заголовки текущего присоединенного http.ServerResponse
, он немедленно уничтожается.
socket
- это объект net.Socket
, с которого произошла ошибка.
1 2 3 4 5 6 7 8 9 |
|
Когда происходит событие clientError
, не существует ни объекта request
, ни объекта response
, поэтому любой отправленный HTTP-ответ, включая заголовки ответа и полезную нагрузку, должен быть записан непосредственно в объект socket
. Необходимо следить за тем, чтобы ответ был правильно отформатированным сообщением HTTP-ответа.
err
- это экземпляр Error
с двумя дополнительными колонками:
bytesParsed
: количество байт пакета запроса, который Node.js, возможно, разобрал правильно;rawPacket
: необработанный пакет текущего запроса.
В некоторых случаях клиент уже получил ответ и/или сокет уже был уничтожен, как в случае ошибок ECONNRESET
. Прежде чем пытаться отправить данные в сокет, лучше проверить, что он все еще доступен для записи.
1 2 3 4 5 6 7 |
|
Событие: close¶
Выдается при закрытии сервера.
Событие: connect¶
request
{http.IncomingMessage} Аргументы для HTTP-запроса, как в событии'request'
socket
{stream.Duplex} Сетевой сокет между сервером и клиентомhead
<Buffer>
Первый пакет туннелируемого потока (может быть пустым).
Выдается каждый раз, когда клиент запрашивает метод HTTP CONNECT
. Если это событие не прослушивается, то клиенты, запрашивающие метод CONNECT
, будут иметь закрытые соединения.
Это событие гарантированно передается экземпляру класса <net.Socket>
, подкласса {stream.Duplex}, если пользователь не укажет тип сокета, отличный от <net.Socket>
.
После испускания этого события сокет запроса не будет иметь слушателя события 'data'
, что означает, что для обработки данных, отправленных на сервер по этому сокету, его нужно будет привязать.
Событие: connection¶
socket
{stream.Duplex}
Это событие возникает при установлении нового TCP-потока. socket
обычно представляет собой объект типа net.Socket
. Обычно пользователи не хотят обращаться к этому событию. В частности, сокет не будет испускать события readable
из-за того, как парсер протокола присоединяется к сокету. Доступ к socket
можно также получить через request.socket
.
Это событие также может быть явно вызвано пользователями для инъекции соединений в HTTP-сервер. В этом случае может быть передан любой поток Duplex
.
Если здесь вызывается socket.setTimeout()
, то таймаут будет заменен на server.keepAliveTimeout
, когда сокет обслужит запрос (если server.keepAliveTimeout
ненулевой).
Это событие гарантированно передается экземпляру класса <net.Socket>
, подкласса {stream.Duplex}, если пользователь не укажет тип сокета, отличный от <net.Socket>
.
Событие: dropRequest¶
request
{http.IncomingMessage} Аргументы для HTTP-запроса, как в событии'request'
socket
{stream.Duplex} Сетевой сокет между сервером и клиентом
Когда количество запросов на сокете достигнет порога server.maxRequestsPerSocket
, сервер отменит новые запросы и вместо них выдаст событие 'dropRequest'
, а затем отправит 503
клиенту.
Событие: request¶
запрос
{http.IncomingMessage}ответ
{http.ServerResponse}
Выдается каждый раз, когда поступает запрос. На одно соединение может приходиться несколько запросов (в случае соединений HTTP Keep-Alive).
Событие: upgrade¶
request
{http.IncomingMessage} Аргументы для HTTP-запроса, как в событии'request'
socket
{stream.Duplex} Сетевой сокет между сервером и клиентомhead
<Buffer>
Первый пакет обновленного потока (может быть пустым).
Выдается каждый раз, когда клиент запрашивает обновление HTTP. Прослушивание этого события необязательно, и клиенты не могут настаивать на смене протокола.
После испускания этого события сокет запроса не будет иметь слушателя события 'data'
, что означает, что его нужно будет привязать, чтобы обрабатывать данные, отправленные серверу на этом сокете.
Это событие гарантированно передается экземпляру класса <net.Socket>
, подкласса {stream.Duplex}, если пользователь не укажет тип сокета, отличный от <net.Socket>
.
server.close¶
1 |
|
callback
<Function>
Останавливает сервер от приема новых соединений и закрывает все соединения, подключенные к этому серверу, которые не посылают запрос или не ожидают ответа. См. net.Server.close()
.
server.closeAllConnections¶
1 |
|
Закрывает все соединения, подключенные к этому серверу.
server.closeIdleConnections¶
1 |
|
Закрывает все соединения, подключенные к этому серверу, которые не посылают запрос и не ожидают ответа.
server.headersTimeout¶
<number>
По умолчанию: Минимальное значение междуserver.requestTimeout
или60000
.
Ограничивает количество времени, в течение которого парсер будет ждать получения полных заголовков HTTP.
Если таймаут истекает, сервер отвечает статусом 408, не пересылая запрос слушателю запросов, а затем закрывает соединение.
Это значение должно быть ненулевым (например, 120 секунд) для защиты от потенциальных атак Denial-of-Service в случае, если сервер развернут без обратного прокси.
server.listen¶
1 |
|
Запускает HTTP-сервер, прослушивающий соединения. Этот метод идентичен server.listen()
из net.Server
.
server.listening¶
<boolean>
Указывает, прослушивает ли сервер соединения или нет.
server.maxHeadersCount¶
<number>
По умолчанию:2000
.
Ограничивает максимальное количество входящих заголовков. Если установлено значение 0, ограничение не будет применяться.
server.requestTimeout¶
<number>
По умолчанию:300000
.
Устанавливает значение таймаута в миллисекундах для получения всего запроса от клиента.
Если таймаут истекает, сервер отвечает статусом 408 без пересылки запроса слушателю запроса, а затем закрывает соединение.
Это значение должно быть ненулевым (например, 120 секунд) для защиты от потенциальных атак Denial-of-Service в случае, если сервер развернут без обратного прокси.
server.setTimeout¶
1 |
|
msecs
<number>
По умолчанию: 0 (без таймаута)callback
<Function>
- Возвращает: {http.Server}
Устанавливает значение тайм-аута для сокетов и выдает событие 'timeout'
на объект Server, передавая сокет в качестве аргумента, если тайм-аут произошел.
Если на объекте Server есть слушатель события 'timeout'
, то он будет вызван с тайм-аутом сокета в качестве аргумента.
По умолчанию сервер не отключает сокеты по таймауту. Однако если событию 'timeout'
сервера назначен обратный вызов, то таймауты должны обрабатываться явно.
server.maxRequestsPerSocket¶
<number>
Запросы на сокет. По умолчанию: 0 (без ограничений).
Максимальное количество запросов, которое может обработать сокет перед закрытием соединения keep alive.
Значение 0
отключает ограничение.
При достижении лимита значение заголовка Connection
будет установлено на close
, но фактически соединение закрыто не будет, последующие запросы, отправленные после достижения лимита, получат в ответ 503 Service Unavailable
.
server.timeout¶
<number>
Таймаут в миллисекундах. По умолчанию: 0 (таймаут отсутствует).
Количество миллисекунд бездействия, после которого считается, что сокет завершил работу.
Значение 0
отключает таймаут для входящих соединений.
Логика таймаута сокета устанавливается при подключении, поэтому изменение этого значения влияет только на новые соединения с сервером, а не на существующие.
server.keepAliveTimeout¶
<number>
Таймаут в миллисекундах. По умолчанию:5000
(5 секунд).
Количество миллисекунд бездействия, в течение которых сервер должен ждать новых входящих данных, после того как он закончил писать последний ответ, прежде чем сокет будет уничтожен. Если сервер получит новые данные до истечения таймаута keep-alive, он сбросит обычный таймаут бездействия, т.е. server.timeout
.
Значение 0
отключает таймаут "keep-alive" для входящих соединений. Значение 0
заставляет http-сервер вести себя аналогично Node.js версий до 8.0.0, в которых не было таймаута keep-alive.
Логика таймаута сокета устанавливается при подключении, поэтому изменение этого значения влияет только на новые подключения к серверу, а не на существующие.
http.ServerResponse¶
- Расширяет: {http.OutgoingMessage}
Этот объект создается внутри HTTP-сервера, а не пользователем. Он передается в качестве второго параметра в событие 'request'
.
Событие: close¶
Указывает на то, что ответ завершен, или его базовое соединение было прервано преждевременно (до завершения ответа).
Событие: finish¶
Вызывается, когда ответ был отправлен. Точнее, это событие возникает, когда последний сегмент заголовков и тела ответа был передан операционной системе для передачи по сети. Это не означает, что клиент уже что-то получил.
response.addTrailers¶
1 |
|
headers
<Object>
Этот метод добавляет к ответу HTTP трейлерные заголовки (заголовок, но в конце сообщения).
Заголовки будут только если для ответа используется кодировка chunked
; если это не так (например, если запрос был HTTP/1.0), они будут молча отброшены.
HTTP требует отправки заголовка Trailer
для эмиссии трейлеров, в значении которого содержится список полей заголовка. Например,
1 2 3 4 5 6 7 8 9 |
|
Попытка установить имя или значение поля заголовка, содержащее недопустимые символы, приведет к возникновению TypeError
.
response.connection¶
Стабильность: 0 – устарело или набрало много негативных отзывов
Эта фича является проблемной и ее планируют изменить. Не стоит полагаться на нее. Использование фичи может вызвать ошибки. Не стоит ожидать от нее обратной совместимости.
Используйте response.socket
.
- {stream.Duplex}
См. response.socket
.
response.cork¶
1 |
|
См. writable.cork()
.
response.end¶
1 |
|
данные
<string>
|<Buffer>
|<Uint8Array>
encoding
<string>
callback
<Function>
- Возвращает:
<this>
Этот метод сигнализирует серверу, что все заголовки и тело ответа были отправлены; сервер должен считать это сообщение завершенным. Метод response.end()
ДОЛЖЕН вызываться в каждом ответе.
Если указаны data
, это аналогично вызову response.write(data, encoding)
, за которым следует response.end(callback)
.
Если указан callback
, он будет вызван, когда поток ответа будет завершен.
response.finished¶
Стабильность: 0 – устарело или набрало много негативных отзывов
Утратил актуальность. Используйте response.writableEnded
.
Свойство response.finished
будет true
, если был вызван response.end()
.
response.flushHeaders¶
1 |
|
Промывает заголовки ответа. См. также: request.flushHeaders()
.
response.getHeader¶
1 |
|
Считывает заголовок, который уже был поставлен в очередь, но не отправлен клиенту. Имя не чувствительно к регистру. Тип возвращаемого значения зависит от аргументов, переданных в response.setHeader()
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
response.getHeaderNames¶
1 |
|
- Возвращает:
<string[]>
Возвращает массив, содержащий уникальные имена текущих исходящих заголовков. Все имена заголовков пишутся в нижнем регистре.
1 2 3 4 5 |
|
response.getHeaders¶
1 |
|
- Возвращает:
<Object>
Возвращает неглубокую копию текущих исходящих заголовков. Поскольку используется неглубокая копия, значения массива могут быть изменены без дополнительных вызовов различных методов модуля http, связанных с заголовками. Ключами возвращаемого объекта являются имена заголовков, а значениями - соответствующие значения заголовков. Все имена заголовков пишутся в нижнем регистре.
Объект, возвращаемый методом response.getHeaders()
, не прототипически наследует от JavaScript Object
. Это означает, что типичные методы Object
, такие как obj.toString()
, obj.hasOwnProperty()
и другие, не определены и не будут работать.
1 2 3 4 5 |
|
response.hasHeader¶
1 |
|
Возвращает true
, если заголовок, обозначенный name
, в настоящее время установлен в исходящих заголовках. Соответствие имени заголовка не чувствительно к регистру.
1 |
|
response.headersSent¶
Булево (только для чтения). true
, если заголовки были отправлены, false
в противном случае.
response.removeHeader¶
1 |
|
name
<string>
Удаляет заголовок, поставленный в очередь для неявной отправки.
1 |
|
response.req¶
- {http.IncomingMessage}
Ссылка на исходный объект HTTP request
.
response.sendDate¶
При значении true заголовок Date будет автоматически сгенерирован и отправлен в ответ, если он еще не присутствует в заголовках. По умолчанию установлено значение true.
Это значение следует отключать только для тестирования; HTTP требует наличия заголовка Date в ответах.
response.setHeader¶
1 |
|
Возвращает объект ответа.
Устанавливает одно значение заголовка для неявных заголовков. Если этот заголовок уже существует в отправляемых заголовках, его значение будет заменено. Для отправки нескольких заголовков с одинаковым именем используйте массив строк. Значения, не являющиеся строками, будут сохранены без изменений. Поэтому response.getHeader()
может возвращать нестроковые значения. Однако нестроковые значения будут преобразованы в строки для передачи по сети. Один и тот же объект ответа возвращается вызывающей стороне, чтобы обеспечить возможность цепочки вызовов.
1 |
|
или
1 2 3 4 |
|
Попытка установить имя или значение поля заголовка, которое содержит недопустимые символы, приведет к возникновению TypeError
.
Когда заголовки были установлены с помощью response.setHeader()
, они будут объединены с любыми заголовками, переданными в response.writeHead()
, причем заголовки, переданные в response.writeHead()
, будут иметь приоритет.
1 2 3 4 5 6 7 |
|
Если вызывается метод response.writeHead()
и этот метод не был вызван, то он напрямую запишет значения предоставленных заголовков в сетевой канал без внутреннего кэширования, и обращение response.getHeader()
к заголовку не даст ожидаемого результата. Если требуется постепенное накопление заголовков с возможным извлечением и изменением в будущем, используйте response.setHeader()
вместо response.writeHead()
.
response.setTimeout¶
1 |
|
msecs
<number>
callback
<Function>
- Возвращает: {http.ServerResponse}
Устанавливает значение тайм-аута сокета в msecs
. Если указан обратный вызов, то он добавляется в качестве слушателя события 'timeout'
на объекте ответа.
Если к запросу, ответу или серверу не добавлен слушатель 'timeout'
, то сокеты уничтожаются по истечении времени. Если для событий 'timeout'
запроса, ответа или сервера назначен обработчик, то сокеты с таймаутом должны обрабатываться явно.
response.socket¶
- {stream.Duplex}
Ссылка на базовый сокет. Обычно пользователи не хотят обращаться к этому свойству. В частности, сокет не будет выдавать события 'readable'
из-за того, как парсер протокола подключается к сокету. После response.end()
свойство обнуляется.
1 2 3 4 5 6 7 8 9 10 |
|
Это свойство гарантированно является экземпляром класса <net.Socket>
, подкласса {stream.Duplex}, если пользователь не указал тип сокета, отличный от <net.Socket>
.
response.statusCode¶
<number>
По умолчанию:200
.
При использовании неявных заголовков (не вызывая response.writeHead()
явно), это свойство контролирует код статуса, который будет отправлен клиенту, когда заголовки будут смыты.
1 |
|
После того, как заголовок ответа был отправлен клиенту, это свойство указывает на код статуса, который был отправлен.
response.statusMessage¶
При использовании неявных заголовков (не вызывая response.writeHead()
явно), это свойство управляет сообщением о статусе, которое будет отправлено клиенту, когда заголовки будут смыты. Если оставить это свойство как undefined
, то будет использоваться стандартное сообщение для кода статуса.
1 |
|
После того, как заголовок ответа был отправлен клиенту, это свойство указывает на сообщение о статусе, которое было отправлено.
response.strictContentLength¶
<boolean>
По умолчанию:false
.
Если установлено значение true
, Node.js будет проверять, равны ли значение заголовка Content-Length
и размер тела в байтах. Несоответствие значения заголовка Content-Length
приведет к возникновению ошибки
, определяемой кодом:
'ERR_HTTP_CONTENT_LENGTH_MISMATCH'
.
response.uncork¶
1 |
|
См. writable.uncork()
.
response.writableEnded¶
Является true
после вызова response.end()
. Это свойство не указывает, были ли данные удалены, для этого используйте response.writableFinished
.
response.writableFinished¶
Является true
, если все данные были выгружены в базовую систему, непосредственно перед тем, как будет выпущено событие 'finish'
.
response.write¶
1 |
|
chunk
<string>
|<Buffer>
|<Uint8Array>
encoding
<string>
По умолчанию: `'utf8''callback
<Function>
- Возвращает:
<boolean>
Если этот метод вызван и response.writeHead()
не был вызван, он переключится в режим неявных заголовков и промоет неявные заголовки.
При этом отправляется фрагмент тела ответа. Этот метод может быть вызван несколько раз для предоставления последовательных частей тела.
В модуле node:http
тело ответа опускается, если запрос является запросом HEAD. Аналогично, ответы 204
и 304
не должны включать тело сообщения.
chunk
может быть строкой или буфером. Если chunk
является строкой, второй параметр указывает, как кодировать его в поток байтов. Функция callback
будет вызвана, когда этот кусок данных будет сброшен.
Это необработанное тело HTTP и не имеет ничего общего с многокомпонентными кодировками тела более высокого уровня, которые могут быть использованы.
При первом вызове response.write()
клиенту будет отправлена буферизованная информация заголовка и первый фрагмент тела. При втором вызове response.write()
Node.js предполагает, что данные будут передаваться потоком, и отправляет новые данные отдельно. То есть, ответ буферизируется до первого куска тела.
Возвращает true
, если все данные были успешно переданы в буфер ядра. Возвращает false
, если все данные или их часть были помещены в пользовательскую память. Когда буфер снова освободится, будет выдано сообщение 'drain'
.
response.writeContinue¶
1 |
|
Отправляет клиенту сообщение HTTP/1.1 100 Continue, указывающее на то, что тело запроса должно быть отправлено. См. событие 'checkContinue'
на Server
.
response.writeEarlyHints¶
1 |
|
hints
<Object>
callback
<Function>
Отправляет сообщение HTTP/1.1 103 Early Hints клиенту с заголовком Link, указывая, что пользовательский агент может предварительно загрузить/подключить связанные ресурсы. hints
- это объект, содержащий значения заголовков, которые должны быть отправлены с сообщением ранних подсказок. Необязательный аргумент callback
будет вызван, когда сообщение ответа будет записано.
Пример
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
response.writeHead¶
1 |
|
statusCode
<number>
statusMessage
<string>
headers
<Object>
|<Array>
- Возвращает: {http.ServerResponse}
Отправляет заголовок ответа на запрос. Код статуса - это трехзначный код статуса HTTP, например 404
. Последний аргумент, headers
, - это заголовки ответа. Опционально в качестве второго аргумента можно указать человекочитаемое statusMessage
.
headers
может быть массивом
, где ключи и значения находятся в одном списке. Это не список кортежей. Таким образом, четные смещения являются значениями ключей, а нечетные смещения - связанными с ними значениями. Массив имеет тот же формат, что и request.rawHeaders
.
Возвращает ссылку на ServerResponse
, так что вызовы могут быть объединены в цепочку.
1 2 3 4 5 6 7 |
|
Этот метод должен быть вызван только один раз для сообщения, и он должен быть вызван до вызова response.end()
.
Если response.write()
или response.end()
будут вызваны до вызова этой функции, неявные/изменяемые заголовки будут вычислены и вызовут эту функцию.
Если заголовки были установлены с помощью response.setHeader()
, они будут объединены с любыми заголовками, переданными в response.writeHead()
, причем заголовки, переданные в response.writeHead()
, будут иметь приоритет.
Если этот метод вызван, а response.setHeader()
не был вызван, он будет напрямую записывать переданные значения заголовков в сетевой канал без внутреннего кэширования, и response.getHeader()
по заголовку не даст ожидаемого результата. Если требуется постепенное накопление заголовков с возможным извлечением и изменением в будущем, используйте вместо этого response.setHeader()
.
1 2 3 4 5 6 7 |
|
Content-Length
считывается в байтах, а не в символах. Используйте Buffer.byteLength()
для определения длины тела в байтах. Node.js будет проверять, равны ли Content-Length
и длина переданного тела или нет.
Попытка установить имя или значение поля заголовка, которое содержит недопустимые символы, приведет к ошибке.
response.writeProcessing¶
1 |
|
Отправляет клиенту сообщение HTTP/1.1 102 Processing, указывающее на то, что тело запроса должно быть отправлено.
http.IncomingMessage¶
- Расширяет:
<stream.Readable>
Объект IncomingMessage
создается http.Server
или http.ClientRequest
и передается в качестве первого аргумента в события 'request'
и 'response'
соответственно. Он может быть использован для доступа к статусу ответа, заголовкам и данным.
В отличие от своего значения socket
, которое является подклассом {stream.Duplex}, само IncomingMessage
расширяет <stream.Readable>
и создается отдельно для разбора и выдачи входящих HTTP-заголовков и полезной нагрузки, поскольку базовый сокет может быть использован многократно в случае keep-alive.
Событие: aborted¶
Стабильность: 0 – устарело или набрало много негативных отзывов
Эта фича является проблемной и ее планируют изменить. Не стоит полагаться на нее. Использование фичи может вызвать ошибки. Не стоит ожидать от нее обратной совместимости.
Вместо этого слушайте событие 'close'
.
Выдается, когда запрос был прерван.
Событие: close¶
Выдается, когда запрос завершен.
message.aborted¶
Стабильность: 0 – устарело или набрало много негативных отзывов
Эта фича является проблемной и ее планируют изменить. Не стоит полагаться на нее. Использование фичи может вызвать ошибки. Не стоит ожидать от нее обратной совместимости.
Проверьте message.destroyed
из {stream.Readable}.
Свойство message.aborted
будет true
, если запрос был прерван.
message.complete¶
Свойство message.complete
будет иметь значение true
, если было получено и успешно разобрано полное HTTP-сообщение.
Это свойство особенно полезно как средство определения того, полностью ли клиент или сервер передал сообщение до того, как соединение было разорвано:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
message.connection¶
Стабильность: 0 – устарело или набрало много негативных отзывов
Эта фича является проблемной и ее планируют изменить. Не стоит полагаться на нее. Использование фичи может вызвать ошибки. Не стоит ожидать от нее обратной совместимости.
Используйте message.socket
.
Псевдоним для message.socket
.
message.destroy¶
1 |
|
Вызывает destroy()
на сокете, который получил IncomingMessage
. Если указано error
, то на сокете испускается событие 'error
, а error
передается в качестве аргумента всем слушателям этого события.
message.headers¶
Объект заголовков запроса/ответа.
Пары ключ-значение имен и значений заголовков. Имена заголовков приводятся в нижнем регистре.
1 2 3 4 5 6 |
|
Дубликаты в необработанных заголовках обрабатываются следующими способами, в зависимости от имени заголовка:
- Дубликаты
age
,authorization
,content-length
,content-type
,etag
,expires
,from
,host
,if-modified-since
,if-unmodified-since
,last-modified
,location
,max-forwards
,proxy-authorization
,referer
,retry-after
,server
илиuser-agent
отбрасываются. Чтобы разрешить объединение дубликатов перечисленных выше заголовков, используйте опциюjoinDuplicateHeaders
вhttp.request()
иhttp.createServer()
. См. RFC 9110 Раздел 5.3 для получения дополнительной информации. set-cookie
- это всегда массив. Дубликаты добавляются в массив.- Для дублирующихся заголовков
cookie
значения объединяются с помощью;
. - Для всех остальных заголовков значения объединяются с помощью
,
.
message.headersDistinct¶
Аналогично message.headers
, но нет логики объединения и значения всегда являются массивами строк, даже для заголовков, полученных только один раз.
1 2 3 4 5 6 |
|
message.httpVersion¶
В случае запроса сервера, версия HTTP, отправленная клиентом. В случае ответа клиента, версия HTTP подключенного сервера. Возможно, либо '1.1'
, либо '1.0'
.
Также message.httpVersionMajor
является первым целым числом, а message.httpVersionMinor
- вторым.
message.method¶
Действителен только для запроса, полученного с http.Server
..
Метод запроса в виде строки. Только для чтения. Примеры: 'GET'
, 'DELETE'
.
message.rawHeaders¶
Список необработанных заголовков запроса/ответа в том виде, в котором они были получены.
Ключи и значения находятся в одном списке. Это не список кортежей. Таким образом, четные смещения - это значения ключей, а нечетные смещения - связанные с ними значения.
Имена заголовков не выделяются нижним регистром, а дубликаты не объединяются.
1 2 3 4 5 6 7 8 9 10 11 |
|
message.rawTrailers¶
Необработанные ключи и значения трейлеров запроса/ответа точно в том виде, в котором они были получены. Заполняются только при событии конец
.
message.setTimeout¶
1 |
|
msecs
<number>
callback
<Function>
- Возвращает: {http.IncomingMessage}
Вызывает message.socket.setTimeout(msecs, callback)
.
message.socket¶
- {stream.Duplex}
Объект net.Socket
, связанный с соединением.
При поддержке HTTPS используйте request.socket.getPeerCertificate()
для получения аутентификационных данных клиента.
Это свойство гарантированно является экземпляром класса <net.Socket>
, подкласса {stream.Duplex}, если пользователь не указал тип сокета, отличный от <net.Socket>
, или не обнулен внутренне.
message.statusCode¶
Действительно только для ответа, полученного от http.ClientRequest
..
Трехзначный код состояния ответа HTTP. НАПРИМЕР, 404
.
message.statusMessage¶
Действительно только для ответа, полученного из http.ClientRequest
..
Сообщение о статусе ответа HTTP (фраза причины). Например, OK
или Internal Server Error
.
message.trailers¶
Объект трейлеров запроса/ответа. Заполняется только при событии end
.
message.trailersDistinct¶
Аналогичен message.trailers
, но здесь нет логики объединения и значения всегда являются массивами строк, даже для заголовков, полученных только один раз. Заполняется только при событии end
.
message.url¶
Действительно только для запроса, полученного с http.Server
..
Строка URL запроса. Она содержит только тот URL, который присутствует в фактическом HTTP-запросе. Возьмем следующий запрос:
1 2 |
|
Разберем URL на части:
1 |
|
Когда request.url
будет '/status?name=ryan'
и request.headers.host
будет 'localhost:3000'
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
http.OutgoingMessage¶
- Расширяет:
<Stream>
Этот класс служит в качестве родительского класса для http.ClientRequest
и http.ServerResponse
. Это абстрактное исходящее сообщение с точки зрения участников HTTP-транзакции.
Событие: drain¶
Выдается, когда буфер сообщения снова свободен.
Событие: finish¶
Выдается при успешном завершении передачи.
Событие: prefinish¶
Вызывается после вызова функции outgoingMessage.end()
. Когда это событие происходит, все данные были обработаны, но не обязательно полностью смыты.
outgoingMessage.addTrailers¶
1 |
|
headers
<Object>
Добавляет HTTP трейлеры (заголовки, но в конце сообщения) к сообщению.
Трейлеры будут только если сообщение закодировано в виде чанков. В противном случае трейлеры будут молча отброшены.
HTTP требует отправки заголовка Trailer
для создания трейлеров, в значении которого содержится список имен полей заголовка, например.
1 2 3 4 5 6 7 8 9 |
|
Попытка установить имя или значение поля заголовка, содержащее недопустимые символы, приведет к возникновению ошибки TypeError
.
outgoingMessage.appendHeader¶
1 |
|
name
<string>
имя заголовкаvalue
<string>
|<string[]>
Значение заголовка- Возвращает:
<this>
Добавляет одно значение заголовка для объекта заголовка.
Если значение является массивом, это эквивалентно вызову этого метода несколько раз.
Если предыдущего значения для заголовка не было, это эквивалентно вызову outgoingMessage.setHeader(name, value)
.
В зависимости от значения параметра options.uniqueHeaders
при создании клиентского запроса или сервера, заголовок будет отправлен несколько раз или один раз со значениями, объединенными с помощью ;
.
outgoingMessage.connection¶
Стабильность: 0 – устарело или набрало много негативных отзывов
Эта фича является проблемной и ее планируют изменить. Не стоит полагаться на нее. Использование фичи может вызвать ошибки. Не стоит ожидать от нее обратной совместимости.
Используйте outgoingMessage.socket
вместо этого.
Псевдоним outgoingMessage.socket
.
outgoingMessage.cork¶
1 |
|
См. writable.cork()
.
outgoingMessage.destroy¶
1 |
|
Уничтожает сообщение. Если сокет связан с сообщением и подключен, этот сокет также будет уничтожен.
outgoingMessage.end¶
1 |
|
chunk
<string>
|<Buffer>
|<Uint8Array>
encoding
<string>
Необязательно, по умолчанию:utf8
callback
<Function>
Необязательно- Возвращает:
<this>
Завершает исходящее сообщение. Если какие-либо части тела остались неотправленными, то они будут переданы в базовую систему. Если сообщение разбито на части, будет отправлен завершающий фрагмент 0\r\n\r\n
, и отправлены трейлеры (если они есть).
Если указано chunk
, это эквивалентно вызову outgoingMessage.write(chunk, encoding)
, за которым следует outgoingMessage.end(callback)
.
Если указан callback
, он будет вызван, когда сообщение будет завершено (эквивалентно слушателю события 'finish'
).
outgoingMessage.flushHeaders¶
1 |
|
Смывает заголовки сообщений.
По причине эффективности Node.js обычно буферизирует заголовки сообщений до тех пор, пока не будет вызвана функция outgoingMessage.end()
или не будет записан первый фрагмент данных сообщения. Затем он пытается упаковать заголовки и данные в один TCP-пакет.
Обычно это желательно (это экономит время прохождения TCP), но не тогда, когда первые данные не будут отправлены, возможно, намного позже. Функция outgoingMessage.flushHeaders()
обходит оптимизацию и запускает сообщение.
outgoingMessage.getHeader¶
1 |
|
name
<string>
Имя заголовка- Возвращает
<string>
|<undefined>
Получает значение HTTP-заголовка с заданным именем. Если этот заголовок не установлен, возвращаемое значение будет undefined
.
outgoingMessage.getHeaderNames¶
1 |
|
- Возвращает
<string[]>
Возвращает массив, содержащий уникальные имена текущих заголовков исходящих сообщений. Все имена в нижнем регистре.
outgoingMessage.getHeaders¶
1 |
|
- Возвращает:
<Object>
Возвращает неглубокую копию текущих заголовков исходящего сообщения. Поскольку используется неглубокая копия, значения массива могут быть изменены без дополнительных вызовов различных методов модуля HTTP, связанных с заголовками. Ключами возвращаемого объекта являются имена заголовков, а значениями - соответствующие значения заголовков. Все имена заголовков пишутся в нижнем регистре.
Объект, возвращаемый методом outgoingMessage.getHeaders()
, прототипически не наследует от JavaScript Object
. Это означает, что типичные методы Object
, такие как obj.toString()
, obj.hasOwnProperty()
и другие, не определены и не будут работать.
1 2 3 4 5 6 7 8 |
|
outgoingMessage.hasHeader¶
1 |
|
Возвращает true
, если заголовок, обозначенный name
, в настоящее время установлен в исходящих заголовках. Имя заголовка не чувствительно к регистру.
1 2 3 |
|
outgoingMessage.headersSent¶
Только для чтения. true
, если заголовки были отправлены, иначе false
.
outgoingMessage.pipe¶
1 |
|
Переопределяет метод stream.pipe()
, унаследованный от унаследованного класса Stream
, который является родительским классом http.OutgoingMessage
.
Вызов этого метода вызовет ошибку
, поскольку outgoingMessage
является потоком только для записи.
outgoingMessage.removeHeader¶
1 |
|
name
<string>
Имя заголовка
Удаляет заголовок, который находится в очереди на неявную отправку.
1 |
|
outgoingMessage.setHeader¶
1 |
|
Устанавливает одно значение заголовка. Если заголовок уже существует в отправляемых заголовках, его значение будет заменено. Используйте массив строк для отправки нескольких заголовков с одинаковым именем.
outgoingMessage.setHeaders¶
1 |
|
headers
{Headers} | {Map}- Возвращает: {http.ServerResponse}
Возвращает объект ответа.
Устанавливает несколько значений заголовков для неявных заголовков. headers
должен быть экземпляром Headers
или Map
, если заголовок уже существует в отправляемых заголовках, его значение будет заменено.
1 2 |
|
или
1 2 |
|
Когда заголовки были установлены с помощью outgoingMessage.setHeaders()
, они будут объединены с любыми заголовками, переданными в response.writeHead()
, причем заголовки, переданные в response.writeHead()
, будут иметь приоритет.
1 2 3 4 5 6 7 8 9 |
|
outgoingMessage.setTimeout¶
1 |
|
msesc
<number>
callback
<Function>
Необязательная функция, которая будет вызываться при возникновении тайм-аута. Аналогично привязке к событиюtimeout
.- Возвращает:
<this>
Когда сокет связан с сообщением и подключен, будет вызвана функция socket.setTimeout()
с msecs
в качестве первого параметра.
outgoingMessage.socket¶
- {stream.Duplex}
Ссылка на базовый сокет. Обычно пользователи не хотят обращаться к этому свойству.
После вызова outgoingMessage.end()
это свойство будет обнулено.
outgoingMessage.uncork¶
1 |
|
outgoingMessage.writableCorked¶
Количество раз, когда outgoingMessage.cork()
был вызван.
outgoingMessage.writableEnded¶
Является true
, если была вызвана функция outgoingMessage.end()
. Это свойство не указывает, были ли данные удалены. Для этого используйте message.writableFinished
.
outgoingMessage.writableFinished¶
Является true
, если все данные были переданы в базовую систему.
outgoingMessage.writableHighWaterMark¶
highWaterMark
базового сокета, если он назначен. Иначе, уровень буфера по умолчанию, когда writable.write()
начинает возвращать false (16384
).
outgoingMessage.writableLength¶
Количество буферизованных байтов.
outgoingMessage.writableObjectMode¶
Всегда false
.
outgoingMessage.write¶
1 |
|
chunk
<string>
|<Buffer>
|<Uint8Array>
encoding
<string>
По умолчанию:utf8
callback
<Function>
- Возвращает
<boolean>
Отправляет фрагмент тела. Этот метод может быть вызван несколько раз.
Аргумент encoding
имеет значение только тогда, когда chunk
является строкой. По умолчанию это 'utf8
.
Аргумент callback
является необязательным и будет вызван, когда этот фрагмент данных будет удален.
Возвращает true
, если все данные были успешно сброшены в буфер ядра. Возвращает false
, если все данные или их часть были помещены в пользовательскую память. Событие `'drain'' будет выдано, когда буфер снова освободится.
http.METHODS¶
Список методов HTTP, которые поддерживаются парсером.
http.STATUS_CODES¶
Коллекция всех стандартных кодов состояния ответа HTTP и краткое описание каждого из них. Например, http.STATUS_CODES[404] === 'Not Found'
.
http.createServer¶
1 |
|
-
options
<Object>
connectionsCheckingInterval
: Устанавливает значение интервала в миллисекундах для проверки таймаута запроса и заголовков в неполных запросах. По умолчанию:30000
.headersTimeout
: Устанавливает значение таймаута в миллисекундах для получения полных заголовков HTTP от клиента. Дополнительную информацию смотрите вserver.headersTimeout
. По умолчанию:60000
.insecureHTTPParser
<boolean>
Использовать небезопасный парсер HTTP, который принимает недействительные заголовки HTTP, еслиtrue
. Следует избегать использования небезопасного парсера. Дополнительную информацию смотрите в--insecure-http-parser
. По умолчанию:false
.IncomingMessage
{http.IncomingMessage} Определяет классIncomingMessage
, который будет использоваться. Полезно для расширения оригинальногоIncomingMessage
. По умолчанию:IncomingMessage
.keepAlive
<boolean>
Если установлено значениеtrue
, это включает функцию keep-alive на сокете сразу после получения нового входящего соединения, аналогично тому, как это делается в [socket.setKeepAlive([enable][, initialDelay])
][socket.setKeepAlive(enable, initialDelay)
]. По умолчанию:false
.keepAliveInitialDelay
<number>
Если задано положительное число, оно устанавливает начальную задержку перед отправкой первого зонда keepalive на неработающем сокете. По умолчанию:0
.keepAliveTimeout
: Количество миллисекунд бездействия, в течение которых сервер должен ожидать поступления дополнительных данных, после того как он закончил писать последний ответ, прежде чем сокет будет уничтожен. Дополнительную информацию смотрите вserver.keepAliveTimeout
. По умолчанию:5000
.maxHeaderSize
<number>
Опционально переопределяет значение параметра--max-http-header-size
для запросов, полученных этим сервером, т.е. максимальную длину заголовков запроса в байтах. По умолчанию: 16384 (16 KiB).noDelay
<boolean>
Если установлено значениеtrue
, то отключает использование алгоритма Нагла сразу после получения нового входящего соединения. По умолчанию:true
.requestTimeout
: Устанавливает значение таймаута в миллисекундах для получения всего запроса от клиента. Дополнительную информацию смотрите вserver.requestTimeout
. По умолчанию:300000
.requireHostHeader
<boolean>
Заставляет сервер отвечать кодом состояния 400 (Bad Request) на любой запрос HTTP/1.1, в котором отсутствует заголовок Host (как предписано спецификацией). По умолчанию:true
.joinDuplicateHeaders
<boolean>
Объединяет значения строк полей нескольких заголовков в запросе с помощью,
вместо того, чтобы отбрасывать дубликаты. Более подробную информацию смотрите вmessage.headers
. По умолчанию:false
.ServerResponse
{http.ServerResponse} Определяет классServerResponse
, который будет использоваться. Полезен для расширения оригинальногоServerResponse
. По умолчанию:ServerResponse
.uniqueHeaders
<Array>
Список заголовков ответа, которые должны быть отправлены только один раз. Если значение заголовка представляет собой массив, элементы будут объединены с помощью;
.
-
requestListener
<Function>
-
Возвращает: {http.Server}
Возвращает новый экземпляр http.Server
.
requestListener
- это функция, которая автоматически добавляется к событию 'request'
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
http.get¶
1 |
|
1 |
|
url
<string>
|<URL>
options
<Object>
Принимает те жеoptions
, что иhttp.request()
, сmethod
, всегда установленным наGET
. Свойства, унаследованные от прототипа, игнорируются.callback
<Function>
- Возвращает: {http.ClientRequest}
Поскольку большинство запросов - это GET-запросы без тела, Node.js предоставляет этот удобный метод. Единственное отличие этого метода от http.request()
в том, что он устанавливает метод на GET и автоматически вызывает req.end()
. Обратный вызов должен позаботиться о потреблении данных ответа по причинам, указанным в разделе http.ClientRequest
.
Обратный вызов вызывается с единственным аргументом, который является экземпляром http.IncomingMessage
.
Пример получения JSON:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
|
http.globalAgent¶
- {http.Agent}
Глобальный экземпляр Agent
, который используется по умолчанию для всех клиентских HTTP-запросов.
http.maxHeaderSize¶
Свойство только для чтения, определяющее максимально допустимый размер HTTP-заголовков в байтах. По умолчанию 16 килобайт. Настраивается с помощью опции CLI --max-http-header-size
.
Его можно переопределить для серверов и клиентских запросов, передав параметр maxHeaderSize
.
http.request¶
1 |
|
http.request¶
1 |
|
url
<string>
|<URL>
options
<Object>
agent
{http.Agent} |<boolean>
Управляет поведениемAgent
. Возможные значения:undefined
(по умолчанию): использоватьhttp.globalAgent
для данного хоста и порта.Agent
объект: явно использовать переданныйAgent
.false
: заставляет использовать новыйAgent
со значениями по умолчанию.
auth
<string>
Базовая аутентификация ('user:password'
) для вычисления заголовка Authorization.createConnection
<Function>
Функция, создающая сокет/поток для использования в запросе, когда опцияagent
не используется. Это можно использовать, чтобы не создавать собственный классAgent
только для переопределения функции по умолчаниюcreateConnection
. Подробнее см. вagent.createConnection()
. Любой потокDuplex
является допустимым возвращаемым значением.defaultPort
<number>
Порт по умолчанию для протокола. По умолчанию:agent.defaultPort
, если используетсяAgent
, иначеundefined
.family
<number>
Семейство IP-адресов для использования при разрешенииhost
илиhostname
. Допустимыми значениями являются4
или6
. Если значение не указано, будут использоваться IP v4 и v6.headers
<Object>
Объект, содержащий заголовки запроса.hints
<number>
Необязательныеdns.lookup()
hints.host
<string>
Доменное имя или IP-адрес сервера, на который будет отправлен запрос. По умолчанию:'localhost'
.hostname
<string>
Псевдоним дляhost
. Для поддержкиurl.parse()
,hostname
будет использоваться, если указаны иhost
иhostname
.insecureHTTPParser
<boolean>
Использовать небезопасный парсер HTTP, который принимает недействительные заголовки HTTP, еслиtrue
. Следует избегать использования небезопасного парсера. Дополнительную информацию смотрите в--insecure-http-parser
. По умолчанию:false
.localAddress
<string>
Локальный интерфейс для привязки сетевых соединений.localPort
<number>
Локальный порт для подключения.lookup
<Function>
Пользовательская функция поиска. По умолчанию:dns.lookup()
.maxHeaderSize
<number>
Опционально переопределяет значение параметра--max-http-header-size
(максимальная длина заголовков ответа в байтах) для ответов, полученных от сервера. По умолчанию: 16384 (16 KiB).method
<string>
Строка, определяющая метод запроса HTTP. По умолчанию:GET
.path
<string>
Путь запроса. Должен включать строку запроса, если таковая имеется. Например,'/index.htm?page=12'
. Исключение возникает, если путь запроса содержит недопустимые символы. В настоящее время отклоняются только пробелы, но в будущем это может измениться. По умолчанию:'/'
.port
<number>
Порт удаленного сервера. По умолчанию:defaultPort
, если установлен, иначе80
.protocol
<string>
Используемый протокол. По умолчанию:'http:'
.setHost
<boolean>
: Определяет, следует ли автоматически добавлять заголовокHost
. По умолчаниюtrue
.signal
<AbortSignal>
: Сигнал прерывания, который может быть использован для прерывания текущего запроса.socketPath
<string>
. Сокет домена Unix. Не может быть использован, если указано одно изhost
илиport
, так как они определяют TCP-сокет.timeout
<number>
: Число, определяющее таймаут сокета в миллисекундах. Это задает таймаут до подключения сокета.uniqueHeaders
<Array>
. Список заголовков запроса, которые должны быть отправлены только один раз. Если значение заголовка представляет собой массив, элементы будут объединены с помощью;
.joinDuplicateHeaders
<boolean>
Объединяет значения строк полей нескольких заголовков в запросе с помощью,
вместо того, чтобы отбрасывать дубликаты. Более подробную информацию смотрите вmessage.headers
. По умолчанию:false
.
callback
<Function>
- Возвращает: {http.ClientRequest}
Также поддерживаются опции
в socket.connect()
.
Node.js поддерживает несколько соединений для каждого сервера для выполнения HTTP-запросов. Эта функция позволяет прозрачно отправлять запросы.
url
может быть строкой или объектом URL
. Если url
- строка, она автоматически разбирается с помощью new URL()
. Если это объект URL
, то он будет автоматически преобразован в обычный объект options
.
Если указаны и url
, и options
, объекты будут объединены, причем свойства options
будут иметь приоритет.
Необязательный параметр callback
будет добавлен как одноразовый слушатель для события 'response'
.
http.request()
возвращает экземпляр класса http.ClientRequest
. Экземпляр ClientRequest
представляет собой поток, доступный для записи. Если нужно загрузить файл с помощью POST-запроса, то пишите в объект ClientRequest
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
|
В примере был вызван req.end()
. При использовании http.request()
необходимо всегда вызывать req.end()
для обозначения окончания запроса - даже если в тело запроса не записываются данные.
Если во время запроса встречается какая-либо ошибка (будь то разрешение DNS, ошибки на уровне TCP или фактические ошибки разбора HTTP), на возвращаемом объекте запроса выдается событие 'error'
. Как и в случае со всеми событиями 'error'
, если не зарегистрированы слушатели, ошибка будет сброшена.
Есть несколько специальных заголовков, на которые следует обратить внимание.
-
Отправка 'Connection: keep-alive' уведомляет Node.js о том, что соединение с сервером должно сохраняться до следующего запроса.
-
Отправка заголовка 'Content-Length' отключит кодировку по умолчанию.
-
Отправка заголовка 'Expect' немедленно отправит заголовки запроса. Обычно при отправке 'Expect: 100-continue' следует установить таймаут и слушателя для события
'continue'
. См. RFC 2616 Раздел 8.2.3 для получения дополнительной информации. -
Отправка заголовка
Authorization
отменяет использование опцииauth
для вычисления базовой аутентификации.
Пример с использованием URL
в качестве options
:
1 2 3 4 5 |
|
При успешном запросе будут выданы следующие события в следующем порядке:
socket
response
'data'
любое количество раз, на объектеres
('data'
не будет выдаваться вообще, если тело ответа пустое, например, при большинстве перенаправлений)'end'
на объектеres
.
close
.
В случае ошибки соединения будут выданы следующие события:
socket
error
close
В случае преждевременного закрытия соединения до получения ответа, будут выданы следующие события в следующем порядке:
socket
error
с ошибкой с сообщением'Error: socket hang up'
и кодом'ECONNRESET'
close
В случае преждевременного закрытия соединения после получения ответа, следующие события будут выдаваться в следующем порядке:
socket
response
data
любое количество раз, на объектеres
.
- (здесь соединение закрыто)
aborted
на объектеres
error
на объектеres
с ошибкой с сообщениемОшибка: прервано
и кодомECONNRESET
.close
close
объектаres
Если req.destroy()
вызывается до назначения сокета, то следующие события будут выдаваться в следующем порядке:
- (
req.destroy()
вызывается здесь) 'error'
с ошибкой с сообщением'Error: socket hang up'
и кодом'ECONNRESET'
.close
.
Если req.destroy()
вызывается до успешного соединения, то следующие события будут выдаваться в следующем порядке:
'socket'
- (
req.destroy()
вызывается здесь) 'error'
с ошибкой с сообщением'Error: socket hang up'
и кодом'ECONNRESET'
close
.
Если req.destroy()
вызывается после получения ответа, то следующие события будут выдаваться в следующем порядке:
'socket'
response
data
любое количество раз, на объектеres
.
- (
req.destroy()
вызывается здесь) aborted
на объектеres
'error'
на объектеres
с ошибкой с сообщением'Error: aborted'
и кодом'ECONNRESET'
.close
close
объекта `res``
Если req.abort()
вызывается до назначения сокета, то следующие события будут выдаваться в следующем порядке:
- (
req.abort()
вызывается здесь) abort
close
.
Если req.abort()
вызывается до успешного соединения, то следующие события будут выдаваться в следующем порядке:
'socket'
- (
req.abort()
вызывается здесь) 'abort'
'error'
с ошибкой с сообщением'Error: socket hang up'
и кодом'ECONNRESET'
close
.
Если req.abort()
вызывается после получения ответа, то следующие события будут выдаваться в следующем порядке:
'socket'
response
data
любое количество раз, на объектеres
.
- (
req.abort()
вызывается здесь) 'abort'
aborted
на объектеres
error
на объектеres
с ошибкой с сообщением'Error: aborted'
и кодом'ECONNRESET'
.close
close
на объектеres
Установка опции timeout
или использование функции setTimeout()
не прервет запрос и не сделает ничего, кроме добавления события 'timeout'
.
Передача AbortSignal
и последующий вызов abort
на соответствующем AbortController
будет вести себя так же, как вызов .destroy()
на самом запросе.
http.validateHeaderName¶
1 |
|
Выполняет низкоуровневые проверки предоставленного name
, которые выполняются при вызове res.setHeader(name, value)
.
Передача недопустимого значения в качестве name
приведет к возникновению TypeError
, идентифицируемой code: 'ERR_INVALID_HTTP_TOKEN'
.
Нет необходимости использовать этот метод перед передачей заголовков в HTTP-запрос или ответ. Модуль HTTP автоматически проверит такие заголовки. Примеры:
Пример:
1 2 3 4 5 6 7 8 9 |
|
http.validateHeaderValue¶
1 |
|
Выполняет низкоуровневые проверки предоставленного значения
, которые выполняются при вызове res.setHeader(name, value)
.
Передача недопустимого значения в качестве value
приведет к возникновению TypeError
.
- Ошибка неопределенного значения идентифицируется
code: 'ERR_HTTP_INVALID_HEADER_VALUE'
. - Ошибка недопустимого символа значения идентифицируется
кодом: 'ERR_INVALID_CHAR'
.
Нет необходимости использовать этот метод перед передачей заголовков в HTTP-запрос или ответ. Модуль HTTP автоматически проверит такие заголовки.
Примеры:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
http.setMaxIdleHTTPParsers¶
1 |
|
max
<number>
По умолчанию:1000
.
Устанавливает максимальное количество неработающих парсеров HTTP.