на какому порту работает протокол http по умолчанию

ИТ База знаний

Полезно

— Онлайн генератор устойчивых паролей

— Онлайн калькулятор подсетей

— Руководство администратора FreePBX на русском языке

— Руководство администратора Cisco UCM/CME на русском языке

— Руководство администратора по Linux/Unix

Навигация

Серверные решения

Телефония

FreePBX и Asterisk

Настройка программных телефонов

Корпоративные сети

Протоколы и стандарты

В чем разница между HTTP и HTTPS?

Что скрывает буква «S»

В данной краткой статье поговорим о разнице между HTTP и HTTPS.

Видео: HTTP или HTTPS – как работает и в чем разница?

Что такое HTTP?

Онлайн курс по Linux

Мы собрали концентрат самых востребованных знаний, которые позволят тебе начать карьеру администратора Linux, расширить текущие знания и сделать уверенный шаг к DevOps

на какому порту работает протокол http по умолчанию. Смотреть фото на какому порту работает протокол http по умолчанию. Смотреть картинку на какому порту работает протокол http по умолчанию. Картинка про на какому порту работает протокол http по умолчанию. Фото на какому порту работает протокол http по умолчанию

Что такое HTTPS?

HTTPS также позволяет создать защищенное зашифрованное соединение между сервером и браузером. Он обеспечивает двунаправленную безопасность данных. Это помогает защитить потенциально конфиденциальную информацию от кражи.

В протоколе HTTPS SSL транзакции согласовываются с помощью алгоритма шифрования на основе ключа. Обычно длина ключа составляет 40 или 128 бит.

Ключевые различия

Преимущества HTTP:

Преимущества HTTPS

Ограничения HTTP

Ограничения HTTPS

Разница между HTTP и HTTPS

В приведенной ниже таблице показано различие между HTTP и HTTPS:

Hypertext Transfer Protocol

Hypertext Transfer Protocol Secure

Менее безопасен. Данные могут быть доступны для злоумышленников

Он предназначен для предотвращения доступа хакеров к критически важной информации. Защищен атак типа Man-in The-Middle.

Это хорошо подходит для веб-сайтов общего назначения, таких как блоги.*

Если на сайте нужно вводить конфиденциальную информацию, то данный протокол подходить больше

Нет защиты передаваемой информации. Любой, кто прослушивает трафик может получить доступ к данным

HTTPS шифрует данные перед передачей их по сети. На стороне получателя, данные расшифровываются.

Нет специального протокола. Работает поверх HTTP, но использует TLS/SSL шифрование.

Проверка названия домена

Сайтам с HTTP не нужен SSL

Для работы с HTTPS нужен SSL сертификат

Не использует шифрование

Не влияет на рейтинг поиска

Помогает увеличивать поисковый рейтинг

Уязвима для злоумышленников

Лучше защищен, использует шифрование данных.

*В настоящее время рекомендуется получать сертификат всем сайтам, так как это повышает доверие к нему. Тем более, что сертификат можно получить даже бесплатно.

**По современным меркам скорости подключения к Интернету, эта разница почти не ощущается.

Типы SSL/TLS-сертификатов, используемых с HTTPS

Теперь поговорим о типах SSL/TLS сертификатов, используемых с HTTPS:

Проверка домена

Проверка домена проверяет, является ли лицо, подающее заявку на сертификат, владельцем доменного имени. Этот тип проверки обычно занимает от нескольких минут до нескольких часов.

Проверка организации

Центр сертификации не только проверяет принадлежность домена, но и идентифицирует владельцев. Это означает, что владельцу может быть предложено предоставить документ, удостоверяющий личность.

Расширенная проверка

Источник

Что такое TCP- и UPD-порты

Сервисы и порты

На подключенном к сети сервере могут одновременно работать различные программы, которые принимают и обрабатывают данные, например, запросы к web-серверу или сообщения электронной почты. Эти программы называются сетевыми сервисами.

Каждая приходящая на сервер порция данных предназначена для обработки определенным сервисом.

Для того, чтобы сетевая подсистема сервера различала данные, адресованные определенным сервисам, и правильно распределяла их, в протокол TCP/IP было введено понятие номера порта.

Пакеты данных и их заголовки

Каждый пакет данных имеет специальный заголовок, содержащий служебную информацию.

Сетевая подсистема сервера анализирует заголовок пакета, находит номер порта и, согласно его значению, направляет данные той или иной работающей на сервере программе-сервису.

Каждая принимающая сетевые данные программа на сервере при запуске сообщает операционной системе, что готова получать и обрабатывать данные, адресованные на определенный порт.

на какому порту работает протокол http по умолчанию. Смотреть фото на какому порту работает протокол http по умолчанию. Смотреть картинку на какому порту работает протокол http по умолчанию. Картинка про на какому порту работает протокол http по умолчанию. Фото на какому порту работает протокол http по умолчанию

Распределение пакета данных IP по сервисам в соответствии с номером порта

TCP- и UDP-порты

Порты используются протоколами TCP или UDP.

Протокол UDP предназначен для быстрой передачи порции данных без гарантии доставки и без предварительной установки соединения.

Оба протокола в заголовке пакета данных указывают порт получателя, а также исходящий номер порта. Протокол TCP устанавливает соединение, при котором данные между сервером и клиентом обмениваются между исходящим портом клиента и входящим портом сервера.

Диапазоны портов

Номер порта может находиться в диапазоне от 0 до 65535. Как и другие используемые в сети Интернет ресурсы, номера портов стандартизированы. Все порты в диапазоне 1-1023 называются “системными портами” и распределены, согласно списку, от координационного центра Internet организации IANA.

Порты в диапазоне 1024-49151 называются “пользовательскими”, и они предназначены для настройки дополнительных сервисов по выбору пользователя.

Оставшиеся порты из диапазона 49152-65535 называются “динамическими” и предназначены для использования операционной системой для установки соединений в рамках протокола TCP/IP.

Система Linux применяет в качестве динамических портов диапазон 32768-60999.

Список портов и протоколов

Технически администратор сервера может гибко настраивать используемые порты для каждого из запускаемых на сервере сетевых сервисов. Например, при желании он может изменить номер порта, на котором работает web-сервер, с 80 на 8080. Но при этом, если пользователи не знают, что номер порта изменен, то они не смогут присоединиться к web-серверу. Поэтому для публичных сетевых сервисов принято применять стандартные номера портов.

Если вы работаете с интернет-сервисами, то будет лучше выучить наизусть номера портов, используемых для наиболее часто встречающихся сервисов: HTTP, HTTPS, FTP, SSH, почтовых протоколов.

Таблица наиболее важных и распространенных номеров портов выглядит так:

Порты и URL

Номер порта можно указывать в ссылках на web-ресурсы, то есть в URL (Universal Resource Locator). Это делается с помощью двоеточия, за которым следует номер порта. Если используется стандартный порт протокола HTTP (80) или HTTPS (443), то тогда он не указывается в URL.

Пример URL с указанным номером порта: HTTP://www.myserver.ru:1500/manager

Как просмотреть список используемых портов на сервере

Для пользователей виртуальных и выделенных серверов может понадобиться просмотреть список применяемых на сервере портов TCP и UDP. Для этой задачи в операционной системе Linux имеется утилита Netstat.

Утилита Netstat работает из командной строки. Чтобы просмотреть список используемых для входящих соединений портов, прослушиваемых запущенными на сервере сетевыми сервисами, примените следующую команду:

Netstat выводит информацию в несколько колонок. Номер порта, на который принимаются соединения, можно увидеть в колонке “Local address”. Также в колонке “PID/Program name” можно увидеть, какая программа на сервере слушает конкретный порт.

на какому порту работает протокол http по умолчанию. Смотреть фото на какому порту работает протокол http по умолчанию. Смотреть картинку на какому порту работает протокол http по умолчанию. Картинка про на какому порту работает протокол http по умолчанию. Фото на какому порту работает протокол http по умолчанию

Порты и безопасность сервера

Порты TCP и UDP используются для соединения с сервером, а значит, могут подвергаться атакам. Например, протокол SSH работает по умолчанию на порте 22, и злоумышленники часто ведут атаку на этот порт, пытаясь подобрать пароль от сервера.

Для повышения уровня безопасности вы можете изменить номер порта для SSH. Например, замените порт 22 на 2222.

1. Отредактируйте на сервере файл /etc/ssh/sshd_config.

на какому порту работает протокол http по умолчанию. Смотреть фото на какому порту работает протокол http по умолчанию. Смотреть картинку на какому порту работает протокол http по умолчанию. Картинка про на какому порту работает протокол http по умолчанию. Фото на какому порту работает протокол http по умолчанию

2. Найдите в файле строку “Port 22” и измените ее на “Port 2222”.

на какому порту работает протокол http по умолчанию. Смотреть фото на какому порту работает протокол http по умолчанию. Смотреть картинку на какому порту работает протокол http по умолчанию. Картинка про на какому порту работает протокол http по умолчанию. Фото на какому порту работает протокол http по умолчанию

3. Перезагрузите программу-сервис sshd командой:

на какому порту работает протокол http по умолчанию. Смотреть фото на какому порту работает протокол http по умолчанию. Смотреть картинку на какому порту работает протокол http по умолчанию. Картинка про на какому порту работает протокол http по умолчанию. Фото на какому порту работает протокол http по умолчанию

Теперь сервер будет принимать SSH-соединения по нестандартному порту 2222, который не известен злоумышленникам.

В других случаях порты менять не нужно, так как большинство плагинов, модулей, почтовых программ и другого стороннего ПО для работы с сайтами и серверами настроено по умолчанию для работы по стандартным портам.

Выводы

1. TCP и UPD- протоколы транспортного уровня:

2. Для просмотра списка используемых на сервере портов TCP и UDP используйте утилиту Netstst в операционной системе Linux.

3. Номера портов сервисов HTTP, HTTPS, FTP, SSH и почтовых протоколов лучше выучить наизусть для более комфортной работы.

Источник

Простым языком об HTTP

Вашему вниманию предлагается описание основных аспектов протокола HTTP — сетевого протокола, с начала 90-х и по сей день позволяющего вашему браузеру загружать веб-страницы. Данная статья написана для тех, кто только начинает работать с компьютерными сетями и заниматься разработкой сетевых приложений, и кому пока что сложно самостоятельно читать официальные спецификации.

HTTP — широко распространённый протокол передачи данных, изначально предназначенный для передачи гипертекстовых документов (то есть документов, которые могут содержать ссылки, позволяющие организовать переход к другим документам).

Аббревиатура HTTP расшифровывается как HyperText Transfer Protocol, «протокол передачи гипертекста». В соответствии со спецификацией OSI, HTTP является протоколом прикладного (верхнего, 7-го) уровня. Актуальная на данный момент версия протокола, HTTP 1.1, описана в спецификации RFC 2616.

Протокол HTTP предполагает использование клиент-серверной структуры передачи данных. Клиентское приложение формирует запрос и отправляет его на сервер, после чего серверное программное обеспечение обрабатывает данный запрос, формирует ответ и передаёт его обратно клиенту. После этого клиентское приложение может продолжить отправлять другие запросы, которые будут обработаны аналогичным образом.

Задача, которая традиционно решается с помощью протокола HTTP — обмен данными между пользовательским приложением, осуществляющим доступ к веб-ресурсам (обычно это веб-браузер) и веб-сервером. На данный момент именно благодаря протоколу HTTP обеспечивается работа Всемирной паутины.

Также HTTP часто используется как протокол передачи информации для других протоколов прикладного уровня, таких как SOAP, XML-RPC и WebDAV. В таком случае говорят, что протокол HTTP используется как «транспорт».

API многих программных продуктов также подразумевает использование HTTP для передачи данных — сами данные при этом могут иметь любой формат, например, XML или JSON.

Как правило, передача данных по протоколу HTTP осуществляется через TCP/IP-соединения. Серверное программное обеспечение при этом обычно использует TCP-порт 80 (и, если порт не указан явно, то обычно клиентское программное обеспечение по умолчанию использует именно 80-й порт для открываемых HTTP-соединений), хотя может использовать и любой другой.

Как отправить HTTP-запрос?

Самый простой способ разобраться с протоколом HTTP — это попробовать обратиться к какому-нибудь веб-ресурсу вручную. Представьте, что вы браузер, и у вас есть пользователь, который очень хочет прочитать статьи Анатолия Ализара.

Предположим, что он ввёл в адресной строке следующее:

Соответственно вам, как веб-браузеру, теперь необходимо подключиться к веб-серверу по адресу alizar.habrahabr.ru.

Для этого вы можете воспользоваться любой подходящей утилитой командной строки. Например, telnet:

telnet alizar.habrahabr.ru 80

Сразу уточню, что если вы вдруг передумаете, то нажмите Ctrl + «]», и затем ввод — это позволит вам закрыть HTTP-соединение. Помимо telnet можете попробовать nc (или ncat) — по вкусу.

После того, как вы подключитесь к серверу, нужно отправить HTTP-запрос. Это, кстати, очень легко — HTTP-запросы могут состоять всего из двух строчек.

Для того, чтобы сформировать HTTP-запрос, необходимо составить стартовую строку, а также задать по крайней мере один заголовок — это заголовок Host, который является обязательным, и должен присутствовать в каждом запросе. Дело в том, что преобразование доменного имени в IP-адрес осуществляется на стороне клиента, и, соответственно, когда вы открываете TCP-соединение, то удалённый сервер не обладает никакой информацией о том, какой именно адрес использовался для соединения: это мог быть, например, адрес alizar.habrahabr.ru, habrahabr.ru или m.habrahabr.ru — и во всех этих случаях ответ может отличаться. Однако фактически сетевое соединение во всех случаях открывается с узлом 212.24.43.44, и даже если первоначально при открытии соединения был задан не этот IP-адрес, а какое-либо доменное имя, то сервер об этом никак не информируется — и именно поэтому этот адрес необходимо передать в заголовке Host.

Стартовая (начальная) строка запроса для HTTP 1.1 составляется по следующей схеме:

Например (такая стартовая строка может указывать на то, что запрашивается главная страница сайта):

Метод (в англоязычной тематической литературе используется слово method, а также иногда слово verb — «глагол») представляет собой последовательность из любых символов, кроме управляющих и разделителей, и определяет операцию, которую нужно осуществить с указанным ресурсом. Спецификация HTTP 1.1 не ограничивает количество разных методов, которые могут быть использованы, однако в целях соответствия общим стандартам и сохранения совместимости с максимально широким спектром программного обеспечения как правило используются лишь некоторые, наиболее стандартные методы, смысл которых однозначно раскрыт в спецификации протокола.

URI (Uniform Resource Identifier, унифицированный идентификатор ресурса) — путь до конкретного ресурса (например, документа), над которым необходимо осуществить операцию (например, в случае использования метода GET подразумевается получение ресурса). Некоторые запросы могут не относиться к какому-либо ресурсу, в этом случае вместо URI в стартовую строку может быть добавлена звёздочка (астериск, символ «*»). Например, это может быть запрос, который относится к самому веб-серверу, а не какому-либо конкретному ресурсу. В этом случае стартовая строка может выглядеть так:

Версия определяет, в соответствии с какой версией стандарта HTTP составлен запрос. Указывается как два числа, разделённых точкой (например 1.1).

Для того, чтобы обратиться к веб-странице по определённому адресу (в данном случае путь к ресурсу — это «/»), нам следует отправить следующий запрос:

GET / HTTP/1.1
Host: alizar.habrahabr.ru

При этом учитывайте, что для переноса строки следует использовать символ возврата каретки (Carriage Return), за которым следует символ перевода строки (Line Feed). После объявления последнего заголовка последовательность символов для переноса строки добавляется дважды.

Впрочем, в спецификации HTTP рекомендуется программировать HTTP-сервер таким образом, чтобы при обработке запросов в качестве межстрочного разделителя воспринимался символ LF, а предшествующий символ CR, при наличии такового, игнорировался. Соответственно, на практике бо́льшая часть серверов корректно обработает и такой запрос, где заголовки отделены символом LF, и он же дважды добавлен после объявления последнего заголовка.

Если вы хотите отправить запрос в точном соответствии со спецификацией, можете воспользоваться управляющими последовательностями \r и \n:

Как прочитать ответ?

Стартовая строка ответа имеет следующую структуру:

Версия протокола здесь задаётся так же, как в запросе.

Код состояния (Status Code) — три цифры (первая из которых указывает на класс состояния), которые определяют результат совершения запроса. Например, в случае, если был использован метод GET, и сервер предоставляет ресурс с указанным идентификатором, то такое состояние задаётся с помощью кода 200. Если сервер сообщает о том, что такого ресурса не существует — 404. Если сервер сообщает о том, что не может предоставить доступ к данному ресурсу по причине отсутствия необходимых привилегий у клиента, то используется код 403. Спецификация HTTP 1.1 определяет 40 различных кодов HTTP, а также допускается расширение протокола и использование дополнительных кодов состояний.

Пояснение к коду состояния (Reason Phrase) — текстовое (но не включающее символы CR и LF) пояснение к коду ответа, предназначено для упрощения чтения ответа человеком. Пояснение может не учитываться клиентским программным обеспечением, а также может отличаться от стандартного в некоторых реализациях серверного ПО.

После стартовой строки следуют заголовки, а также тело ответа. Например:

Тело ответа следует через два переноса строки после последнего заголовка. Для определения окончания тела ответа используется значение заголовка Content-Length (в данном случае ответ содержит 7 восьмеричных байтов: слово «Wisdom» и символ переноса строки).

Но вот по тому запросу, который мы составили ранее, веб-сервер вернёт ответ не с кодом 200, а с кодом 302. Таким образом он сообщает клиенту о том, что обращаться к данному ресурсу на данный момент нужно по другому адресу.

В заголовке Location передан новый адрес. Теперь URI (идентификатор ресурса) изменился на /users/alizar/, а обращаться нужно на этот раз к серверу по адресу habrahabr.ru (впрочем, в данном случае это тот же самый сервер), и его же указывать в заголовке Host.

GET /users/alizar/ HTTP/1.1
Host: habrahabr.ru

В ответ на этот запрос веб-сервер Хабрахабра уже выдаст ответ с кодом 200 и достаточно большой документ в формате HTML.

Если вы уже успели вжиться в роль, то можете теперь прочитать полученный от сервера HTML-код, взять карандаш и блокнот, и нарисовать профайл Ализара — в принципе, именно этим бы на вашем месте браузер сейчас и занялся.

А что с безопасностью?

Сам по себе протокол HTTP не предполагает использование шифрования для передачи информации. Тем не менее, для HTTP есть распространённое расширение, которое реализует упаковку передаваемых данных в криптографический протокол SSL или TLS.

Название этого расширения — HTTPS (HyperText Transfer Protocol Secure). Для HTTPS-соединений обычно используется TCP-порт 443. HTTPS широко используется для защиты информации от перехвата, а также, как правило, обеспечивает защиту от атак вида man-in-the-middle — в том случае, если сертификат проверяется на клиенте, и при этом приватный ключ сертификата не был скомпрометирован, пользователь не подтверждал использование неподписанного сертификата, и на компьютере пользователя не были внедрены сертификаты центра сертификации злоумышленника.

На данный момент HTTPS поддерживается всеми популярными веб-браузерами.

А есть дополнительные возможности?

Протокол HTTP предполагает достаточно большое количество возможностей для расширения. В частности, спецификация HTTP 1.1 предполагает возможность использования заголовка Upgrade для переключения на обмен данными по другому протоколу. Запрос с таким заголовком отправляется клиентом. Если серверу требуется произвести переход на обмен данными по другому протоколу, то он может вернуть клиенту ответ со статусом «426 Upgrade Required», и в этом случае клиент может отправить новый запрос, уже с заголовком Upgrade.

Такая возможность используется, в частности, для организации обмена данными по протоколу WebSocket (протокол, описанный в спецификации RFC 6455, позволяющий обеим сторонам передавать данные в нужный момент, без отправки дополнительных HTTP-запросов): стандартное «рукопожатие» (handshake) сводится к отправке HTTP-запроса с заголовком Upgrade, имеющим значение «websocket», на который сервер возвращает ответ с состоянием «101 Switching Protocols», и далее любая сторона может начать передавать данные уже по протоколу WebSocket.

Что-то ещё, кстати, используют?

На данный момент существуют и другие протоколы, предназначенные для передачи веб-содержимого. В частности, протокол SPDY (произносится как английское слово speedy, не является аббревиатурой) является модификацией протокола HTTP, цель которой — уменьшить задержки при загрузке веб-страниц, а также обеспечить дополнительную безопасность.

Увеличение скорости обеспечивается посредством сжатия, приоритизации и мультиплексирования дополнительных ресурсов, необходимых для веб-страницы, чтобы все данные можно было передать в рамках одного соединения.

Опубликованный в ноябре 2012 года черновик спецификации протокола HTTP 2.0 (следующая версия протокола HTTP после версии 1.1, окончательная спецификация для которой была опубликована в 1999) базируется на спецификации протокола SPDY.

Многие архитектурные решения, используемые в протоколе SPDY, а также в других предложенных реализациях, которые рабочая группа httpbis рассматривала в ходе подготовки черновика спецификации HTTP 2.0, уже ранее были получены в ходе разработки протокола HTTP-NG, однако работы над протоколом HTTP-NG были прекращены в 1998.

На данный момент поддержка протокола SPDY есть в браузерах Firefox, Chromium/Chrome, Opera, Internet Exporer и Amazon Silk.

И что, всё?

В общем-то, да. Можно было бы описать конкретные методы и заголовки, но фактически эти знания нужны скорее в том случае, если вы пишете что-то конкретное (например, веб-сервер или какое-то клиентское программное обеспечение, которое связывается с серверами через HTTP), и для базового понимания принципа работы протокола не требуются. К тому же, всё это вы можете очень легко найти через Google — эта информация есть и в спецификациях, и в Википедии, и много где ещё.

Впрочем, если вы знаете английский и хотите углубиться в изучение не только самого HTTP, но и используемых для передачи пакетов TCP/IP, то рекомендую прочитать вот эту статью.

Ну и, конечно, не забывайте, что любая технология становится намного проще и понятнее тогда, когда вы фактически начинаете ей пользоваться.

Источник

Глава 1. Введение в протоколы HTTP и HTTPS

Протокол HTTP предназначен для передачи содержимого в Интернете. HTTP — это простой протокол, который использует для передачи содержимого надежные службы протокола TCP. Благодаря этому HTTP считается очень надежным протоколом для обмена содержимым. Также HTTP является одним из самых часто используемых протоколов приложений. Все операции в Интернете используют протокол HTTP.

HTTPS — это безопасная версия протокола HTTP, которая реализует протокол HTTP с использованием протокола TLS для защиты базового TCP-подключения. За исключением дополнительной конфигурации, необходимой для настройки TLS, использование протокола HTTPS по сути не отличается от протокола HTTP.

Общие требования для протокола HTTP

Для правильной работы пакета NetX Web HTTP требуется установить NetX Duo 5.10 или более поздней версии. Кроме того, должен быть создан экземпляр IP, для которого включено использование протокола TCP. Для поддержки HTTPS также необходимо установить NetX Secure TLS 5.11 или более поздней версии (см. следующий раздел). Этот процесс показан в демонстрационном файле в разделе «Пример небольшой системы» главы 2.

Для HTTP-клиента из пакета NetX Web HTTP больше нет дополнительных требований.

Но HTTP-сервер из пакета NetX Web HTTP определяет еще несколько дополнительных требований. Во-первых, ему требуется полный доступ к известному TCP-порту 80 для обработки всех запросов HTTP-клиента (приложение может указать любой другой допустимый порт TCP). HTTP-сервер также разработан для работы с внедренной файловой системой FileX. Если система FileX недоступна, пользователь может перенести используемые разделы FileX в собственную среду. Этот процесс рассматривается в последующих разделах этого руководства.

Требования для протокола HTTPS

Для правильной работы протокола HTTPS на основе пакета NetX Web HTTP требуется, чтобы были установлены NetX Duo 5.10 или более поздней версии и NetX Secure TLS 5.11 или более поздней версии. Кроме того, должен быть создан экземпляр IP, для которого включено использование протокола TCP для работы с протоколом TLS. Сеанс TLS необходимо будет инициализировать с помощью соответствующих криптографических процедур и сертификата доверенного ЦС. Кроме того, потребуется выделить пространство для сертификатов, которые будут предоставляться удаленными узлами сервера во время подтверждения TLS. Этот процесс показан в демонстрационном файле в разделе «Пример небольшой системы HTTPS» главы 2.

Для HTTPS-клиента из пакета NetX Web HTTP больше нет дополнительных требований.

Но HTTPS-сервер из пакета NetX Web HTTP определяет еще несколько дополнительных требований. Во-первых, ему требуется полный доступ к известному TCP-порту 443 для обработки всех HTTPS-запросов клиента (как и в случае протокола HTTP без шифрования, приложение может изменить этот порт). Во-вторых, потребуется инициализировать сеанс TLS с помощью соответствующих криптографических процедур и сертификата удостоверения сервера (или общего ключа). HTTPS-сервер также разработан для работы с внедренной файловой системой FileX. Если система FileX недоступна, пользователь может перенести используемые разделы FileX в собственную среду. Использование FileX рассматривается в последующих разделах этого руководства.

Дополнительные сведения о параметрах конфигурации TLS см. в документации по NetX Secure.

Если не указано иное, все функции HTTP, описанные в этом документе, также относятся к протоколу HTTPS.

Ограничения протоколов HTTP и HTTPS

NetX Web HTTP реализует стандарт HTTP 1.1. Но существует ряд ограничений, которые приведены ниже:

URL-адрес HTTP (имена ресурсов)

Протокол HTTP разработан для передачи содержимого через Интернет. Запрашиваемое содержимое определяется URL-адресом. Это основной компонент каждого HTTP-запроса. URL-адреса всегда начинаются с символа «/» и обычно обозначают определенные файлы на HTTP-сервере. Ниже приведены типичные расширения файлов, используемые с протоколом HTTP:

Запросы HTTP-клиента

Эти команды ASCII обычно генерируются веб-браузерами и службами клиента NetX Web HTTP для выполнения операций HTTP на HTTP-сервере.

Ответы HTTP-сервера

Например, в ответ на успешно выполненный запрос PUT клиента для файла test.htm будет возвращено сообщение «HTTP/1.1 200 OK».

Взаимодействие по протоколу HTTP

HTTP-запрос GET

HTTP-запрос PUT

Проверка подлинности HTTP

Проверка подлинности HTTP является необязательной, то есть требуется не для всех веб-запросов. Существуют две разновидности проверки подлинности: обычная и на основе дайджеста. Обычная проверка подлинности по имени и паролю работает точно так же, как во многих других протоколах. При обычной проверке подлинности HTTP имя и пароли объединяются в одну строку и кодируются в формате Base64. Основным недостатком обычной проверки подлинности является то, что имя и пароль передаются в запросе в открытом виде. Это позволяет достаточно легко похищать такие имена и пароли. Дайджест-проверка подлинности устраняет эту проблему, так как при ней имя и пароль не передаются вместе с запросом. Вместо этого применяется специальный механизм вычисления 128-разрядного дайджеста по имени пользователя, паролю и некоторым другим параметрам. Сервер NetX Web HTTP поддерживает стандартный алгоритм дайджестов MD5.

Когда нужна проверка подлинности? HTTP-сервер самостоятельно решает, требуется ли проверка подлинности для запрошенного ресурса. Если проверка подлинности нужна, но в запросе от клиента нет необходимых данных проверки подлинности, то клиенту возвращается ответ «HTTP/1.1 401 Unauthorized» с указанием требуемого типа проверки подлинности. Ожидается, что клиент в этом случае сформирует новый запрос с правильными данными проверки подлинности.

При использовании протокола HTTPS HTTPS-сервер по-прежнему может использовать проверку подлинности HTTP. В этом случае для шифрования всего трафика HTTP используется протокол TLS, поэтому использование обычной проверки подлинности HTTP не обуславливает угрозу безопасности. Дайджест-проверка подлинности также допускается, но не обеспечивает значительного повышения безопасности по сравнению с обычной проверкой подлинности на основе протокола TLS.

Обратный вызов проверки подлинности HTTP

Как уже упоминалось, проверка подлинности HTTP является необязательной, то есть используется не при любой передаче данных через Интернет. Кроме того, проверка подлинности обычно зависит от конкретного ресурса. Один и тот же сервер может требовать проверку подлинности для доступа к некоторым ресурсам и не требовать для доступа к другим. Пакет сервера NetX Web HTTP позволяет приложению указать (с помощью вызова nx_http_server_create) подпрограмму обратного вызова проверки подлинности, которая будет вызываться в начале обработки каждого запроса от HTTP-клиента.

Эта подпрограмма обратного вызова предоставляет серверу NetX Web HTTP строковые значения имени пользователя, пароля и области, которые связаны с конкретным ресурсом, и возвращает необходимый тип проверки подлинности. Если для ресурса не требуется проверка подлинности, обратный вызов проверки подлинности должен возвращать значение NX_WEB_HTTP_DONT_AUTHENTICATE. Если для указанного ресурса требуется обычная проверка подлинности, эта подпрограмма должна возвращать NX_WEB_HTTP_BASIC_AUTHENTICATE. Наконец, если требуется дайджест-проверка подлинности MD5, подпрограмма обратного вызова должна возвращать NX_WEB_HTTP_DIGEST_AUTHENTICATE. Если ни для одного из ресурсов, предоставляемого HTTP-сервером, не требуется проверка подлинности, обратный вызов можно не указывать, передав в вызов для создания HTTP-сервера пустой указатель.

Формат подпрограммы обратного вызова проверки подлинности для приложения достаточно прост и определен ниже.

Входные параметры определяются следующим образом.

Возвращаемое значение подпрограммы проверки подлинности указывает, требуется ли проверка подлинности. Указатели на имя, пароль и область определения приложения не используются, если подпрограмма обратного вызова проверки подлинности возвращает значение NX_WEB_HTTP_DONT_AUTHENTICATE. В противном случае разработчик HTTP-сервера должен убедиться, что значения NX_WEB_HTTP_MAX_USERNAME и NX_WEB_HTTP_MAX_PASSWORD, определенные в файле nx_web_http_server.h, достаточно велики для размещения имени пользователя и пароля, указанных в обратном вызове проверки подлинности. По умолчанию оба значения равны 20 символам.

Обратный вызов для недопустимых значений имени пользователя или пароля HTTP

Чтобы зарегистрировать обратный вызов на HTTP-сервере, используется приведенная ниже служба, которая определена на сервере NetX Web HTTP.

Определены следующие типы запроса:

Обратный вызов для добавления заголовка даты GMT в HTTP

Этот необязательный обратный вызов на сервере NetX Web HTTP позволяет добавлять в ответные сообщения заголовок со значением даты. Он вызывается, когда HTTP-сервер отвечает на запрос PUT или GET.

Чтобы зарегистрировать обратный вызов для добавления даты GMT на HTTP-сервере, определена приведенная ниже служба.

Тип данных NX_WEB_HTTP_SERVER_DATE определяется следующим образом:

Обратный вызов для получения сведений из кэша HTTP

HTTP-сервер поддерживает обратный вызов для запроса ограничений по возрасту и датам для определенного ресурса в приложении HTTP. Эти сведения позволяют определить, будет ли HTTP-сервер отправлять всю страницу клиенту по запросу GET. Если в запросе клиента нет строки «if modified since» (если изменено позднее) или это значение не совпадает с датой «last modified» (последнее изменение), полученной в обратном вызове запроса сведений из кэша, то клиенту отправляется вся страница.

Чтобы зарегистрировать обратный вызов на HTTP-сервере, определена приведенная ниже служба.

Поддержка поблочного кодирования HTTP

Если определить общую длину сообщения HTTP перед отправкой невозможно, то можно использовать функцию поблочного кодирования для отправки сообщений в виде серий блоков без поля заголовка Content-Length. Эта функция поддерживается во всех сообщениях HTTP-запросов и HTTP-ответов. Эта функция поддерживается на стороне получателя, а заголовок блока автоматически обрабатывается внутренней логикой. На стороне отправителя клиентом и сервером должны вызываться интерфейсы API nx_web_http_client_request_chunked_set и nx_web_http_server_response_chunked_set соответственно.

Дополнительные сведения об использовании этих служб можно найти в главе 3 «Описание служб HTTP».

Поддержка многокомпонентных сообщений HTTP

Протокол MIME изначально предназначался для взаимодействия с протоколом SMTP, но теперь он используется и с протоколом HTTP. Протокол MIME позволяет включать в одно сообщение смешанные типы данных (например, image/jpg и text/plain). Сервер NetX Web HTTP включает в себя службы для определения типа содержимого в полученных от клиента сообщениях HTTP, содержащих данные MIME. Чтобы включить поддержку многокомпонентных сообщений HTTP и использовать эти службы, необходимо определить параметр конфигурации NX_WEB_HTTP_MULTIPART_ENABLE.

Дополнительные сведения об использовании этих служб можно найти в главе 3 «Описание служб HTTP».

Поддержка многопоточности HTTP

Службы клиента NetX Web HTTP можно вызывать из нескольких потоков одновременно. Но запросы на чтение или запись для конкретного экземпляра HTTP-клиента должны выполняться последовательно из одного потока.

При использовании протокола HTTPS службы клиента NetX Web HTTP могут вызываться из нескольких потоков, но ввиду повышенной сложности базовых функций TLS каждый поток должен использовать отдельный, независимый экземпляр HTTP-клиента (структуру управления NX_WEB_HTTP_CLIENT).

Соответствие протокола HTTP положениям документов RFC

NetX Web HTTP соответствует требованиям документов RFC 1945 «Hypertext Transfer Protocol/1.0» (Протокол передачи гипертекста, версия 1.0), RFC 2616 «Hypertext Transfer Protocol/1.1» (Протокол передачи гипертекста, версия 1.1), RFC 2581 «TCP Congestion Control» (Контроль перегрузки TCP), RFC 1122 «Requirements for Internet Hosts» (Требования к Интернет-узлам) и других связанных с ними документов RFC.

Реализация протокола HTTPS в NetX Web HTTP соответствует требованиям документа RFC 2818 «HTTP over TLS» (Передача данных HTTP по протоколу TLS).

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *