stringtranslate.com

Веб-сервер

Клиенты ПК взаимодействуют через сеть с веб-сервером, обслуживающим только статический контент
Внутренняя и передняя часть сервера Dell PowerEdge , компьютера, предназначенного для установки в стойку . Серверы, подобные этому, часто используются в качестве веб-серверов.
Для веб-сайта с высокой посещаемостью можно использовать несколько веб-серверов.
Серверная ферма с тысячами веб-серверов, используемых для веб-сайтов с очень высоким трафиком
Модем ADSL, на котором работает встроенный веб-сервер, обслуживающий динамические веб-страницы , используемые для настройки модема

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

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

Ресурс, отправленный с веб-сервера, может быть уже существующим файлом ( статический контент ), доступным веб-серверу, или он может быть сгенерирован во время запроса ( динамический контент ) другой программой , которая взаимодействует с программным обеспечением сервера. Первый обычно может обслуживаться быстрее и может быть легче кэширован для повторных запросов, в то время как последний поддерживает более широкий спектр приложений.

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

История

Первое веб-предложение (1989) оценено как «расплывчатое, но захватывающее...»
Первый в мире веб-сервер, рабочая станция NeXT Computer с Ethernet, 1990 год. На этикетке корпуса написано: «Эта машина — сервер. НЕ ВЫКЛЮЧАЙТЕ ЕГО!!»

Это очень краткая история программ веб-серверов , поэтому некоторая информация обязательно пересекается с историей веб-браузеров , Всемирной паутины и Интернета ; поэтому, ради ясности и понятности, некоторые ключевые исторические сведения, представленные ниже, могут быть аналогичны тем, которые можно найти в одной или нескольких вышеупомянутых исторических статьях. [ требуется ссылка ]

Первоначальный проект WWW (1989–1991)

В марте 1989 года сэр Тим Бернерс-Ли предложил своему работодателю CERN новый проект с целью облегчения обмена информацией между учеными с помощью гипертекстовой системы. Предложение под названием «Гипертекст и CERN» было запрошено для комментариев, и его прочитали несколько человек. В октябре 1990 года предложение было переформулировано и расширено (имея в качестве соавтора Роберта Кайо ), и, наконец, оно было одобрено. [3] [4] [5]

В период с конца 1990 по начало 1991 года проект привел к написанию и тестированию Бернерсом-Ли и его разработчиками нескольких программных библиотек, а также трех программ, которые изначально работали на ОС NeXTSTEP, установленной на рабочих станциях NeXT : [6] [7] [5]

Эти ранние браузеры извлекали веб-страницы, написанные на простой ранней форме HTML , с веб-серверов, используя новый базовый протокол связи, который назывался HTTP 0.9 .

В августе 1991 года Тим Бернерс-Ли объявил о рождении технологии WWW и призвал ученых принять и развивать ее. [8] Вскоре после этого эти программы вместе с их исходным кодом стали доступны для людей, заинтересованных в их использовании. [6] Хотя исходный код формально не был лицензирован или размещен в открытом доступе, ЦЕРН неофициально разрешил пользователям и разработчикам экспериментировать и продолжать разработку на их основе. Бернерс-Ли начал продвигать принятие и использование этих программ вместе с их переносом на другие операционные системы . [5]

Быстрое и бурное развитие (1991–1995)

Количество активных веб-сайтов (1991–1996) [9] [10]

В декабре 1991 года в SLAC (США) был установлен первый веб-сервер за пределами Европы . [7] Это было очень важное событие, поскольку оно положило начало трансконтинентальным веб-коммуникациям между веб-браузерами и веб-серверами.

В 1991–1993 годах программа веб-сервера ЦЕРНа продолжала активно разрабатываться группой www, в то же время, благодаря доступности ее исходного кода и публичным спецификациям протокола HTTP, начали разрабатываться многие другие реализации веб-серверов.

В апреле 1993 года ЦЕРН опубликовал официальное заявление, в котором говорилось, что три компонента веб-программного обеспечения (базовый клиент линейного режима, веб-сервер и библиотека общего кода) вместе с их исходным кодом были переданы в общественное достояние . [11] Это заявление освободило разработчиков веб-серверов от любых возможных юридических проблем, связанных с разработкой производных работ на основе этого исходного кода (угроза, которая на практике никогда не существовала).

В начале 1994 года наиболее заметным среди новых веб-серверов был NCSA httpd , который работал на различных ОС на базе Unix и мог обслуживать динамически генерируемый контент , реализуя POSTметод HTTP и CGI для связи с внешними программами. Эти возможности, наряду с мультимедийными функциями браузера Mosaic NCSA (также способного управлять HTML FORMs для отправки данных на веб-сервер), подчеркнули потенциал веб-технологий для публикации и распределенных вычислительных приложений.

Во второй половине 1994 года разработка NCSA httpd застопорилась до такой степени, что группа внешних разработчиков программного обеспечения, веб-мастеров и других профессиональных деятелей, заинтересованных в этом сервере, начала писать и собирать патчи благодаря тому, что исходный код NCSA httpd был доступен в общественном достоянии. В начале 1995 года все эти патчи были применены к последнему выпуску исходного кода NCSA, и после нескольких тестов был начат проект Apache HTTP-сервера . [12] [13]

В конце 1994 года был выпущен новый коммерческий веб-сервер Netsite с определенными функциями. Он был первым из многих других подобных продуктов, которые были разработаны сначала Netscape , затем также Sun Microsystems и, наконец, Oracle Corporation .

В середине 1995 года была выпущена первая версия IIS для ОС Windows NT компанией Microsoft . Это ознаменовало выход на рынок технологий Всемирной паутины очень важного коммерческого разработчика и поставщика, который играл и продолжает играть ключевую роль на обеих сторонах (клиент и сервер) сети.

Во второй половине 1995 года веб-серверы CERN и NCSA начали приходить в упадок (в глобальном процентном отношении использования) из-за повсеместного внедрения новых веб-серверов, которые имели гораздо более быстрый цикл разработки, а также больше функций, больше исправлений и большую производительность, чем предыдущие.

Взрывной рост и конкуренция (1996–2014)

Количество активных веб-сайтов (1996-2002) [10] [14]
Cobalt Qube 3 от Sun – компьютерный сервер (2002, снят с производства)

В конце 1996 года уже существовало более пятидесяти известных (различных) программ веб-серверов, которые были доступны каждому, кто хотел владеть доменным именем в Интернете и/или размещать веб-сайты. [15] Многие из них просуществовали недолго и были заменены другими веб-серверами.

Публикация RFC о версиях протоколов HTTP/1.0 (1996) и HTTP/1.1 (1997, 1999) заставила большинство веб-серверов соответствовать (не всегда полностью) этим стандартам. Использование постоянных соединений TCP/IP (HTTP/1.1) потребовало от веб-серверов как увеличения максимального количества одновременных соединений, так и повышения уровня масштабируемости.

В период с 1996 по 1999 год Netscape Enterprise Server и IIS от Microsoft стали одними из ведущих коммерческих вариантов, в то время как среди свободно распространяемых программ с открытым исходным кодом Apache HTTP Server удерживал лидирующие позиции в качестве предпочтительного сервера (благодаря своей надежности и многочисленным функциям).

В те годы существовал еще один коммерческий, весьма инновационный и, следовательно, известный веб-сервер Zeus ( ныне снятый с производства ), который был известен как один из самых быстрых и масштабируемых веб-серверов, доступных на рынке, по крайней мере до первого десятилетия 2000-х годов, несмотря на его низкий процент использования.

Apache стал самым используемым веб-сервером с середины 1996 года до конца 2015 года, когда после нескольких лет спада его сначала превзошел IIS, а затем Nginx. После этого процент использования IIS упал до гораздо более низкого, чем Apache (см. также долю рынка).

С 2005 по 2006 год Apache начал улучшать свою скорость и уровень масштабируемости, внедряя новые функции производительности (например, MPM событий и новый кэш контента). [16] [17] Поскольку эти новые улучшения производительности изначально были отмечены как экспериментальные, они долгое время не были включены пользователями, и поэтому Apache еще больше страдал от конкуренции со стороны коммерческих серверов и, прежде всего, других серверов с открытым исходным кодом, которые тем временем уже достигли гораздо более высокой производительности (в основном при обслуживании статического контента) с самого начала своей разработки и на момент упадка Apache могли предложить также достаточно длинный список хорошо протестированных расширенных функций.

Фактически, через несколько лет после начала 2000 года появились не только другие коммерческие и весьма конкурентоспособные веб-серверы, например, LiteSpeed , но и множество других программ с открытым исходным кодом, часто превосходного качества и очень высокой производительности, среди которых следует отметить Hiawatha , Cherokee HTTP server , Lighttpd , Nginx и другие производные/связанные продукты, также доступные с коммерческой поддержкой.

Около 2007–2008 годов большинство популярных веб-браузеров увеличили свой предыдущий лимит по умолчанию в 2 постоянных соединения на хост-домен (ограничение, рекомендованное RFC-2616) [18] до 4, 6 или 8 постоянных соединений на хост-домен, чтобы ускорить извлечение тяжелых веб-страниц с большим количеством изображений и смягчить проблему нехватки постоянных соединений, выделенных для динамических объектов, используемых для двунаправленных уведомлений о событиях на веб-страницах. [19] В течение года эти изменения в среднем почти утроили максимальное количество постоянных соединений, которые должны были обрабатывать веб-серверы. Эта тенденция (увеличение количества постоянных соединений) определенно дала сильный толчок принятию обратных прокси-серверов перед более медленными веб-серверами, а также дала еще один шанс появляющимся новым веб-серверам, которые могли показать всю свою скорость и свою способность обрабатывать очень большое количество одновременных соединений, не требуя слишком много аппаратных ресурсов (дорогие компьютеры с большим количеством процессоров, оперативной памяти и быстрых дисков). [20]

Новые вызовы (2015 и последующие годы)

В 2015 году RFC опубликовали новую версию протокола [HTTP/2], и поскольку реализация новых спецификаций была совсем нетривиальной, среди разработчиков менее популярных веб-серверов (например, с процентом использования ниже 1% .. 2%) возникла дилемма о добавлении или не добавлении поддержки этой новой версии протокола. [21] [22]

На самом деле поддержка HTTP/2 часто требовала радикальных изменений во внутренней реализации из-за многих факторов (практически всегда требовались зашифрованные соединения, возможность различать соединения HTTP/1.x и HTTP/2 на одном и том же порту TCP, двоичное представление сообщений HTTP, приоритет сообщений, сжатие заголовков HTTP, использование потоков, также известных как подсоединения TCP/IP, и связанное с этим управление потоком и т. д.), поэтому некоторые разработчики этих веб-серверов решили не поддерживать новую версию HTTP/2 (по крайней мере, в ближайшем будущем) также по следующим основным причинам: [21] [22]

Вместо этого разработчики большинства популярных веб-серверов поспешили предложить доступность нового протокола не только потому, что у них были рабочая сила и время, чтобы сделать это, но и потому, что обычно их предыдущая реализация протокола SPDY могла быть повторно использована в качестве отправной точки, и потому, что большинство используемых веб-браузеров реализовывали его очень быстро по той же причине. Другая причина, побудившая этих разработчиков действовать быстро, заключалась в том, что веб-мастера чувствовали давление постоянно растущего веб-трафика , и они действительно хотели установить и попробовать – как можно скорее – что-то, что могло бы радикально снизить количество соединений TCP/IP и ускорить доступ к размещенным веб-сайтам. [23]

В 2020–2021 годах динамика внедрения HTTP/2 (ведущими веб-серверами и популярными веб-браузерами) частично воспроизвелась после публикации предварительных проектов будущих RFC по протоколу HTTP/3 .

Технический обзор

ПК-клиенты, подключенные к веб-серверу через Интернет

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

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

Сложность и эффективность программы веб-сервера может сильно различаться в зависимости от (например): [1]

Общие черты

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

Это основные функции , которые обычно есть у большинства веб-серверов.

Вот еще несколько более продвинутых и популярных функций ( это лишь очень краткий перечень ).

Обычные задачи

Программа веб-сервера, когда она запущена, обычно выполняет несколько общих задач , (например): [1]

Прочитать сообщение с запросом

Программы веб-сервера могут: [24] [25] [26]

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

Нормализация URL-адресов

Программы веб-сервера обычно выполняют некоторую нормализацию URL-адресов ( URL-адрес, встречающийся в большинстве сообщений HTTP-запросов) для того, чтобы:

Термин нормализация URL относится к процессу изменения и стандартизации URL-адреса в согласованной манере. Существует несколько типов нормализации, которые могут быть выполнены, включая преобразование схемы и хоста в нижний регистр. Среди наиболее важных нормализаций — удаление сегментов пути "." и ".." и добавление завершающих слешей к непустому компоненту пути.

URL-сопоставление

«Отображение URL — это процесс, при котором URL анализируется для определения ресурса, на который он ссылается, чтобы этот ресурс мог быть возвращен запрашивающему клиенту. Этот процесс выполняется с каждым запросом, который делается на веб-сервер, при этом некоторые запросы обслуживаются файлом, таким как документ HTML или изображение gif, другие — результатами выполнения программы CGI, а третьи — каким-либо другим процессом, таким как встроенный обработчик модулей, документ PHP или сервлет Java». [27] [ требуется обновление ]

На практике программы веб-сервера, реализующие расширенные функции, выходящие за рамки простого обслуживания статического контента (например, механизм перезаписи URL-адресов, обслуживание динамического контента), обычно должны определять, как обрабатывать этот URL-адрес, например, как:

Один или несколько файлов конфигурации веб-сервера могут определять сопоставление частей пути URL (например, начальных частей пути файла , расширения имени файла и других компонентов пути) с определенным обработчиком URL (файлом, каталогом, внешней программой или внутренним модулем). [28]

Если веб-сервер реализует одну или несколько из вышеупомянутых расширенных функций, то часть пути действительного URL-адреса может не всегда соответствовать существующему пути файловой системы в дереве каталогов веб-сайта (файлу или каталогу в файловой системе ), поскольку он может ссылаться на виртуальное имя внутреннего или внешнего процессора модуля для динамических запросов.

Перевод пути URL в файловую систему

Программы веб-сервера способны преобразовывать URL-путь (полностью или частично), который ссылается на физический путь файловой системы, в абсолютный путь в корневом каталоге целевого веб-сайта. [28]

Корневой каталог веб-сайта может быть указан в файле конфигурации или в каком-либо внутреннем правиле веб-сервера с использованием имени веб-сайта, которое является частью хоста URL-адреса, найденного в HTTP-запросе клиента. [28]

Трансляция путей в файловую систему выполняется для следующих типов веб-ресурсов:

Веб-сервер добавляет путь, найденный в запрошенном URL (сообщение запроса HTTP), и добавляет его к пути корневого каталога веб-сайта (Host). На сервере Apache это обычно /home/www/website(на машинах Unix это обычно: /var/www/website). Смотрите следующие примеры того, как это может произойти.

Перевод пути URL для запроса статического файла

Пример статического запроса существующего файла, указанного по следующему URL:

http://www.example.com/path/file.html

Пользовательский агент клиента подключается www.example.comи затем отправляет следующий HTTP /1.1-запрос:

GET /путь/файл.html HTTP/1.1Хост: www.example.comСоединение: поддерживать активность

Результатом является локальный ресурс файловой системы:

/home/www/www.example.com/path/file.html

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

Перевод пути URL для запроса каталога (без статического индексного файла)

Пример неявного динамического запроса существующего каталога, указанного следующим URL:

http://www.example.com/directory1/directory2/

Пользовательский агент клиента подключается www.example.comи затем отправляет следующий HTTP /1.1-запрос:

GET /каталог1/каталог2 HTTP/1.1Хост: www.example.comСоединение: поддерживать активность

Результатом является путь к локальному каталогу:

/home/www/www.example.com/directory1/directory2/

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

Перевод пути URL для динамического запроса программы

Для динамического запроса URL-путь, указанный клиентом, должен ссылаться на существующую внешнюю программу (обычно исполняемый файл с CGI), используемую веб-сервером для генерации динамического контента. [29]

Пример динамического запроса , использующего программный файл для генерации вывода:

http://www.example.com/cgi-bin/forum.php?action=view&orderby=thread&date=2021-10-15

Пользовательский агент клиента подключается www.example.comи затем отправляет следующий HTTP /1.1-запрос:

GET /cgi-bin/forum.php?action=view&ordeby=thread&date=2021-10-15 HTTP/1.1Хост: www.example.comСоединение: поддерживать активность

Результатом является локальный путь к файлу программы (в данном примере — PHP- программы):

/home/www/www.example.com/cgi-bin/forum.php

Веб-сервер выполняет эту программу, передавая информацию о пути и строку запроса action=view&orderby=thread&date=2021-10-15 , чтобы программа имела информацию, необходимую для запуска. (В этом случае он вернет HTML-документ, содержащий представление записей форума, упорядоченных по теме с 15 октября 2021 г.). В дополнение к этому веб-сервер считывает данные, отправленные из внешней программы, и повторно отправляет эти данные клиенту, который сделал запрос.

Управлять запросом сообщения

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

На практике веб-сервер должен обработать запрос, используя один из следующих путей ответа: [28]

Подавать статический контент

Клиенты ПК взаимодействуют через сеть с веб-сервером, обслуживающим только статический контент

Если программа веб-сервера способна обслуживать статический контент и настроена для этого, то она может отправлять содержимое файла всякий раз, когда сообщение-запрос имеет действительный URL-путь, соответствующий (после сопоставления URL, преобразования URL и перенаправления URL) существующему файлу в корневом каталоге веб-сайта, и файл имеет атрибуты, которые соответствуют тем, которые требуются внутренними правилами программы веб-сервера. [28]

Такой контент называется статическим , поскольку обычно он не изменяется веб-сервером при отправке клиентам и остается неизменным до тех пор, пока не будет изменен (изменен файл) какой-либо программой.

ПРИМЕЧАНИЕ: при обслуживании только статического контента программа веб-сервера обычно не изменяет содержимое файлов обслуживаемых веб-сайтов (поскольку они только читаются и никогда не записываются), поэтому достаточно поддерживать только следующие методы HTTP :

Отклик статического содержимого файла можно ускорить с помощью файлового кэша .

Файлы индекса каталога

Если программа веб-сервера получает сообщение-запрос клиента с URL-адресом, путь которого соответствует одному из существующих каталогов , и этот каталог доступен, а обслуживание индексных файлов каталога включено, то программа веб-сервера может попытаться обслужить первое из известных (или настроенных) имен статических индексных файлов (обычный файл), найденных в этом каталоге; если индексный файл не найден или не выполнены другие условия, возвращается сообщение об ошибке.

Наиболее часто используемые имена для статических индексных файлов: index.html, index.htmи Default.htm.

Обычные файлы

Если программа веб-сервера получает сообщение-запрос клиента с URL-адресом, путь к которому соответствует имени существующего файла , и этот файл доступен программе веб-сервера, а его атрибуты соответствуют внутренним правилам программы веб-сервера, то программа веб-сервера может отправить этот файл клиенту.

Обычно, по соображениям безопасности, большинство программ веб-серверов предварительно настроены на обслуживание только обычных файлов или на избежание использования специальных типов файлов , таких как файлы устройств , а также символических ссылок или жестких ссылок на них. Цель состоит в том, чтобы избежать нежелательных побочных эффектов при обслуживании статических веб-ресурсов. [30]

Предоставляйте динамический контент

Клиенты ПК взаимодействуют через сеть с веб-сервером, обслуживающим статический и динамический контент

Если программа веб-сервера способна обслуживать динамический контент и настроена для этого, то она может взаимодействовать с соответствующим внутренним модулем или внешней программой (связанной с запрошенным путем URL), чтобы передать ей параметры клиентского запроса. После этого программа веб-сервера считывает из нее свой ответ с данными (который она сгенерировала, часто на лету), а затем пересылает его клиентской программе, которая сделала запрос. [ необходима цитата ]

ПРИМЕЧАНИЕ: при обслуживании статического и динамического контента программа веб-сервера обычно должна также поддерживать следующий метод HTTP, чтобы иметь возможность безопасно получать данные от клиента(ов) и, таким образом, иметь возможность размещать веб-сайты с интерактивными формами, которые могут отправлять большие наборы данных (например, большой объем ввода данных или загрузки файлов ) на веб-сервер/внешние программы/модули:

Чтобы иметь возможность взаимодействовать со своими внутренними модулями и/или внешними программами, программа веб-сервера должна реализовать один или несколько из множества доступных интерфейсов шлюза ( см. также Интерфейсы шлюза веб-сервера, используемые для динамического контента).

Ниже приведены три стандартных и исторических интерфейса шлюза .

CGI
Внешняя CGI-программа запускается программой веб-сервера для каждого динамического запроса, затем программа веб-сервера считывает из нее сгенерированный ответ данных и затем повторно отправляет его клиенту.
SCGI
Внешняя программа SCGI (обычно это процесс) запускается один раз программой веб-сервера или какой-либо другой программой/процессом, а затем ожидает сетевых подключений; каждый раз, когда к ней поступает новый запрос, программа веб-сервера создает к ней новое сетевое подключение, чтобы отправить параметры запроса и прочитать ее ответные данные, после чего сетевое подключение закрывается.
FastCGI
Внешняя FastCGI-программа (обычно это процесс) запускается один раз программой веб-сервера или какой-либо другой программой/процессом, а затем ждет сетевого соединения, которое постоянно устанавливается веб-сервером; через это соединение отправляются параметры запроса и считываются ответы данных.
Списки каталогов
Список каталогов, динамически генерируемый веб-сервером

Программа веб-сервера может управлять динамической генерацией (на лету) списка индексов каталогов файлов и подкаталогов. [31]

Если программа веб-сервера настроена на это, и запрошенный путь URL соответствует существующему каталогу, и его доступ разрешен, и в этом каталоге не найден статический индексный файл, то веб-страница (обычно в формате HTML), содержащая список файлов и/или подкаталогов вышеупомянутого каталога, динамически генерируется (на лету). Если ее невозможно сгенерировать, возвращается ошибка.

Некоторые программы веб-сервера позволяют настраивать списки каталогов, разрешая использование шаблона веб-страницы (HTML-документа, содержащего заполнители, например $(FILE_NAME), $(FILE_SIZE), и т. д., которые заменяются значениями полей каждой записи файла, найденной в каталоге веб-сервером), например, index.tplили использование HTML и встроенного исходного кода, который интерпретируется и выполняется «на лету», например index.asp, и/или путем поддержки использования динамических программ индексации, таких как CGI, SCGI, FCGI, например index.cgi, , index.php, index.fcgi.

Использование динамически генерируемых списков каталогов обычно избегается или ограничивается несколькими выбранными каталогами веб-сайта, поскольку такая генерация требует гораздо больше ресурсов ОС, чем отправка статической индексной страницы.

Основное применение списков каталогов — разрешение загрузки файлов (обычно, когда их имена, размеры, дата и время изменения или атрибуты файлов могут меняться случайным образом / часто) в том виде, в котором они есть, без необходимости предоставления дополнительной информации запрашивающему пользователю . [32]

Обработка программы или модуля

Внешняя программа или внутренний модуль ( процессорный блок ) может выполнять некоторую прикладную функцию, которая может использоваться для получения данных из одного или нескольких хранилищ данных или для сохранения данных в них , например: [ необходима ссылка ]

Блок обработки может возвращать любой вид веб-контента, в том числе с использованием данных, полученных из хранилища данных, например: [ необходима цитата ]

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

Отправить ответное сообщение

Программы веб-сервера способны отправлять ответные сообщения в качестве ответов на клиентские запросы. [24]

Сообщение об ошибке может быть отправлено, поскольку сообщение-запрос не может быть успешно прочитано, декодировано, проанализировано или выполнено. [25]

ПРИМЕЧАНИЕ: следующие разделы приведены только в качестве примеров, чтобы помочь понять, что, в общем-то, делает веб-сервер; эти разделы ни в коем случае не являются ни исчерпывающими, ни полными.

Сообщение об ошибке

Программа веб-сервера может отвечать на запрос клиента множеством видов сообщений об ошибках, в любом случае эти ошибки делятся в основном на две категории:

Когда клиентский браузер получает ответ/сообщение об ошибке, то, если оно связано с основным запросом пользователя (например, URL-адресом веб-ресурса, такого как веб-страница), то обычно это сообщение об ошибке отображается в каком-либо окне/сообщении браузера.

URL-авторизация

Программа веб-сервера может проверить, соответствует ли запрошенный URL-путь: [35]

Если реализована и включена функция авторизации/прав доступа, а доступ к веб-ресурсу не предоставлен, то в зависимости от требуемых прав доступа программа веб-сервера:

URL-перенаправление

Программа веб-сервера может иметь возможность выполнять перенаправления URL-адресов на новые URL-адреса (новые местоположения), что заключается в ответе на запрос клиента ответным сообщением, содержащим новый URL-адрес, подходящий для доступа к действительному или существующему веб-ресурсу (клиент должен повторить запрос с новым URL-адресом). [36]

Используется URL-перенаправление местоположения: [36]

Пример 1: URL-путь указывает на имя каталога , но в нем нет завершающего слеша «/», поэтому веб-сервер отправляет клиенту перенаправление, чтобы дать ему указание повторить запрос с фиксированным именем пути. [31]

От:
  /directory1/directory2
Кому:
  /directory1/directory2/

Пример 2: целый набор документов был перемещен внутри веб-сайта с целью реорганизации путей их файловой системы.

От:
  /directory1/directory2/2021-10-08/
Кому:
  /directory1/directory2/2021/10/08/

Пример 3: целый набор документов был перенесен на новый веб-сайт , и теперь для доступа к ним обязательно использовать защищенные HTTPS-соединения.

От:
  http://www.example.com/directory1/directory2/2021-10-08/
Кому:
  https://docs.example.com/directory1/2021-10-08/

Приведенные выше примеры — лишь некоторые из возможных видов перенаправлений.

Успешное сообщение

Программа веб-сервера способна ответить на действительный запрос клиента сообщением об успешном выполнении, опционально содержащим запрошенные данные веб-ресурса . [37]

Если данные веб-ресурса отправляются обратно клиенту, то это может быть статический или динамический контент в зависимости от того, как он был извлечен (из файла или из вывода какой-либо программы/модуля).

Кэш содержимого

Чтобы ускорить ответы веб-сервера за счет снижения среднего времени ответа HTTP и используемых аппаратных ресурсов, многие популярные веб-серверы реализуют один или несколько кэшей контента , каждый из которых специализируется на определенной категории контента. [38] [39]

Контент обычно кэшируется по месту своего происхождения, например:

Кэш файлов

Исторически сложилось так, что статическое содержимое файлов , к которым требовался частый, случайный и быстрый доступ, с середины-конца 1960-х/1970-х годов хранилось в основном на электромеханических дисках . К сожалению, операции чтения и записи на такие устройства всегда считались очень медленными по сравнению со скоростью оперативной памяти , поэтому с момента появления первых ОС сначала разрабатывались дисковые кэши, а затем и подсистемы файлового кэша ОС для ускорения операций ввода- вывода часто используемых данных/файлов.

Даже при использовании файлового кэша ОС относительная/периодическая медлительность операций ввода-вывода с каталогами и файлами, хранящимися на дисках, вскоре стала узким местом в повышении производительности, ожидаемой от веб-серверов верхнего уровня, особенно с середины-конца 1990-х годов, когда трафик Интернета начал расти экспоненциально вместе с постоянным увеличением скорости Интернет-/сетевых линий.

Проблема того, как еще более эффективно ускорить обслуживание статических файлов, тем самым увеличив максимальное количество запросов/ответов в секунду (RPS), начала изучаться/исследоваться с середины 1990-х годов с целью предложить полезные модели кэширования, которые можно было бы реализовать в программах веб-серверов. [40]

На практике в настоящее время многие популярные/высокопроизводительные программы веб-серверов включают в себя собственный пользовательский файловый кэш , адаптированный для использования веб-сервером и использующий их конкретную реализацию и параметры. [41] [42] [43]

Широкое распространение RAID и/или быстрых твердотельных накопителей (оборудования для хранения данных с очень высокой скоростью ввода-вывода) несколько снизило, но, конечно, не устранило преимущества наличия файлового кэша, встроенного в веб-сервер.

Динамический кэш

Динамический контент, выводимый внутренним модулем или внешней программой, не всегда может меняться очень часто (при наличии уникального URL с ключами/параметрами) и поэтому, возможно, на некоторое время (например, от 1 секунды до нескольких часов или более) результирующий вывод может кэшироваться в оперативной памяти или даже на быстром диске . [44]

Типичное использование динамического кэша — когда на веб-сайте есть динамические веб-страницы с новостями, погодой, изображениями, картами и т. д., которые не меняются часто (например, каждые n минут) и к которым обращается огромное количество клиентов в минуту/час; в таких случаях полезно возвращать также кэшированный контент (без вызова внутреннего модуля или внешней программы), поскольку клиенты часто не имеют обновленной копии запрошенного контента в кэшах своих браузеров. [45]

В любом случае, в большинстве случаев такие кэши реализуются внешними серверами (например, обратным прокси-сервером ) или путем хранения динамических выходных данных на отдельных компьютерах, управляемых специальными приложениями (например, memcached ), чтобы не конкурировать за аппаратные ресурсы (ЦП, ОЗУ, диски) с веб-сервером(ами). [46] [47]

Веб-серверы режима ядра и пользовательского режима

Программное обеспечение веб-сервера может быть либо встроено в ОС и выполняться в пространстве ядра , либо выполняться в пространстве пользователя (как и другие обычные приложения).

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

Веб-серверы, работающие в пользовательском режиме, должны запрашивать у системы разрешение на использование большего количества памяти или ресурсов ЦП . Эти запросы к ядру не только занимают время, но и не всегда могут быть удовлетворены, поскольку система резервирует ресурсы для собственного использования и несет ответственность за совместное использование аппаратных ресурсов со всеми другими запущенными приложениями. Выполнение в пользовательском режиме также может означать использование большего количества копий буфера/данных (между пользовательским пространством и пространством ядра), что может привести к снижению производительности веб-сервера пользовательского режима.

В настоящее время почти все программное обеспечение веб-сервера выполняется в пользовательском режиме (потому что многие из вышеупомянутых небольших недостатков были преодолены за счет более быстрого оборудования, новых версий ОС, гораздо более быстрых системных вызовов ОС и нового оптимизированного программного обеспечения веб-сервера). См. также сравнение программного обеспечения веб-сервера, чтобы узнать, какое из них работает в режиме ядра или в пользовательском режиме (также называемом пространством ядра или пространством пользователя).

Выступления

Для улучшения пользовательского опыта (на стороне клиента/браузера) веб-сервер должен быстро (как можно скорее) отвечать на запросы клиентов; если только скорость ответа на контент не ограничена (конфигурацией) для некоторых типов файлов (например, больших или огромных файлов), возвращаемые данные также должны отправляться как можно быстрее (высокая скорость передачи).

Другими словами, веб-сервер всегда должен быть очень отзывчивым , даже при высокой нагрузке веб-трафика, чтобы общее время ожидания ответа пользователем (сумма времени браузера + время сети + время ответа веб-сервера ) было как можно короче .

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

Для программного обеспечения веб-сервера основными ключевыми показателями производительности (измеренными в различных условиях эксплуатации) обычно являются, по крайней мере, следующие (например): [48]

Среди условий эксплуатации важным параметром является количество (1 .. n ) одновременных клиентских подключений, используемых во время теста, поскольку оно позволяет соотнести уровень параллелизма, поддерживаемый веб-сервером, с результатами тестируемых показателей производительности.

Эффективность программного обеспечения

Конкретная принятая конструкция и модель программного обеспечения веб-сервера (например):

... и другие методы программирования , такие как (например):

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

На практике некоторые модели программного обеспечения веб-серверов могут потребовать больше ресурсов ОС (особенно больше ЦП и больше оперативной памяти), чем другие, чтобы работать хорошо и, таким образом, достигать целевых показателей производительности.

Условия эксплуатации

Существует множество условий эксплуатации, которые могут повлиять на производительность веб-сервера; значения производительности могут различаться в зависимости от (например):

Бенчмаркинг

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

Пределы нагрузки

Веб-сервер (программная установка) обычно имеет предопределенные пределы нагрузки для каждой комбинации условий эксплуатации, также потому, что он ограничен ресурсами ОС и потому, что он может обрабатывать только ограниченное количество одновременных клиентских подключений (обычно от 2 до нескольких десятков тысяч для каждого активного процесса веб-сервера, см. также проблему C10k и проблему C10M ).

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

Причины перегрузки

В любой момент веб-серверы могут быть перегружены по одной или нескольким из следующих причин (например).

Симптомы перегрузки

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

Методы борьбы с перегрузками

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

Предостережения относительно использования протоколов HTTP/2 и HTTP/3

Даже если более новые протоколы HTTP (2 и 3) обычно генерируют меньше сетевого трафика для каждого запроса/ответа данных, они могут потребовать больше ресурсов ОС (например, ОЗУ и ЦП), используемых программным обеспечением веб-сервера (из-за зашифрованных данных , большого количества потоковых буферов и других деталей реализации); кроме того, HTTP/2 и, возможно, HTTP/3 тоже, в зависимости также от настроек веб-сервера и клиентской программы, могут быть не лучшими вариантами для загрузки данных больших или огромных файлов на очень высокой скорости, поскольку их потоки данных оптимизированы для параллелизма запросов, и поэтому во многих случаях использование соединений HTTP/1.1 TCP/IP может привести к лучшим результатам/более высокой скорости загрузки (ваш опыт может отличаться) . [53] [54]

Доля рынка

Диаграмма:
Доля рынка всех сайтов для самых популярных веб-серверов 2005–2021 гг.
Диаграмма:
Доля рынка всех сайтов для самых популярных веб-серверов 1995–2005 гг.

Ниже приведены последние статистические данные о доле рынка всех сайтов ведущих веб-серверов в Интернете от Netcraft .

ПРИМЕЧАНИЕ: (*) процент округлен до целого числа, поскольку его десятичные значения не публикуются на исходной странице (на графике отображается только округленное значение).

Смотрите также

Стандартные интерфейсы шлюза веб-сервера, используемые для динамического содержимого :

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

Ссылки

  1. ^ abc Нэнси Дж. Йегер; Роберт Э. МакГрат (1996). Технология веб-сервера. Морган Кауфманн. ISBN 1-55860-376-X. Архивировано из оригинала 20 января 2023 г. . Получено 22 января 2021 г. .
  2. ^ Уильям Нельсон; Арвинд Шринивасан; Мурти Чинталапати (2009). Sun Web Server: The Essential Guide. Pearson Education. ISBN 978-0-13-712892-1. Архивировано из оригинала 20 января 2023 г. . Получено 14 октября 2021 г. .
  3. ^ Золфагарифард, Элли (24 ноября 2018 г.). ««Отец Интернета» сэр Тим Бернерс-Ли о своем плане борьбы с фейковыми новостями» . The Telegraph . Лондон. ISSN  0307-1235. Архивировано из оригинала 11 января 2022 г. Получено 1 февраля 2019 г.
  4. ^ "История компьютеров и вычислений, Интернет, Рождение, Всемирная паутина Тима Бернерса-Ли". history-computer.com . Архивировано из оригинала 4 января 2019 года . Получено 1 февраля 2019 года .
  5. ^ abc Тим Бернер-Ли (1992). "История проекта WWW (оригинал)". ЦЕРН (проект World Wide Web). Архивировано из оригинала 8 декабря 2021 г. . Получено 20 декабря 2021 г. .
  6. ^ ab Тим Бернер-Ли (20 августа 1991 г.). «Доступно приложение WorldWideWeb wide-area hypertext (анонс)». ЦЕРН (проект World Wide Web). Архивировано из оригинала 2 декабря 2021 г. . Получено 16 октября 2021 г. .
  7. ^ ab Web Administrator. "Web History". CERN (проект World Wide Web). Архивировано из оригинала 2 декабря 2021 г. Получено 16 октября 2021 г.
  8. ^ Тим Бернер-Ли (2 августа 1991 г.). «Определители гипертекстовых ссылок ...» ЦЕРН (проект World Wide Web). Архивировано из оригинала 7 декабря 2021 г. . Получено 16 октября 2021 г. .
  9. ^ Али Месбах (2009). Анализ и тестирование одностраничных веб-приложений на основе Ajax. ISBN 978-90-79982-02-8. Получено 18 декабря 2021 г. .
  10. ^ ab Robert H'obbes' Zakon. "Hobbes' Internet Timeline v5.1 (WWW Growth) ПРИМЕЧАНИЕ: до 1996 года количество веб-серверов = количеству веб-сайтов". ISOC. Архивировано из оригинала 15 августа 2000 года . Получено 18 декабря 2021 года .{{cite web}}: CS1 maint: неподходящий URL ( ссылка )
  11. ^ Тим Смит; Франсуа Флюкигер. «Лицензирование Интернета». ЦЕРН (проект World Wide Web). Архивировано из оригинала 6 декабря 2021 г. . Получено 16 октября 2021 г. .
  12. ^ "NCSA httpd". NCSA (веб-архив). Архивировано из оригинала 1 августа 2010 года . Получено 16 декабря 2021 года .
  13. ^ "О сервере Apache HTTPd: как появился Apache". Apache: проект сервера HTTPd. 1997. Архивировано из оригинала 7 июня 2008 г. Получено 17 декабря 2021 г.
  14. ^ «Обследование веб-серверов, ПРИМЕЧАНИЕ: количество активных веб-сайтов в 2000 году было интерполировано». Netcraft. 22 декабря 2021 г. Архивировано из оригинала 27 декабря 2021 г. Получено 27 декабря 2021 г.
  15. ^ "Netcraft: программное обеспечение веб-сервера (1996)". Netcraft (веб-архив). Архивировано из оригинала 30 декабря 1996 года . Получено 16 декабря 2021 года .
  16. ^ "Обзор новых функций Apache 2.2". Apache: проект HTTPd-сервера. 2005. Архивировано из оригинала 27 ноября 2021 г. Получено 16 декабря 2021 г.
  17. ^ "Обзор новых функций Apache 2.4". Apache: проект HTTPd-сервера. 2012. Архивировано из оригинала 26 ноября 2021 г. Получено 16 декабря 2021 г.
  18. ^ "Соединения, постоянные соединения: практические соображения". RFC 2616, Протокол передачи гипертекста -- HTTP/1.1. стр. 46–47. раздел 8.1.4. doi : 10.17487/RFC2616 . RFC 2616.
  19. ^ «Максимальное количество одновременных подключений к одному домену для браузеров». 2017. Архивировано из оригинала 21 декабря 2021 г. Получено 21 декабря 2021 г.
  20. ^ "Linux Web Server Performance Benchmark - 2016 results". RootUsers. 8 марта 2016 г. Архивировано из оригинала 23 декабря 2021 г. Получено 22 декабря 2021 г.
  21. ^ ab "Заменит ли HTTP/2 HTTP/1.x?". Рабочая группа IETF HTTP. Архивировано из оригинала 27 сентября 2014 г. Получено 22 декабря 2021 г.
  22. ^ ab "Реализации HTTP/2 в клиентском и серверном программном обеспечении". Рабочая группа IETF HTTP. Архивировано из оригинала 23 декабря 2021 г. Получено 22 декабря 2021 г.
  23. ^ «Почему только одно TCP-соединение?». Рабочая группа IETF HTTP. Архивировано из оригинала 27 сентября 2014 г. Получено 22 декабря 2021 г.
  24. ^ ab "Обмен сообщениями клиент/сервер". RFC 7230, HTTP/1.1: Синтаксис и маршрутизация сообщений. стр. 7–8. раздел 2.1. doi : 10.17487/RFC7230 . RFC 7230.
  25. ^ ab "Обработка неполных сообщений". RFC 7230, HTTP/1.1: Синтаксис и маршрутизация сообщений. стр. 34. раздел 3.4. doi : 10.17487/RFC7230 . RFC 7230.
  26. ^ «Надежность анализа сообщений». RFC 7230, HTTP/1.1: Синтаксис и маршрутизация сообщений. стр. 34–35. раздел 3.5. doi : 10.17487/RFC7230 . RFC 7230.
  27. ^ R. Bowen (29 сентября 2002 г.). "URL Mapping" (PDF) . Apache software foundation. Архивировано (PDF) из оригинала 15 ноября 2021 г. . Получено 15 ноября 2021 г. .
  28. ^ abcde "Mapping URLs to Filesystem Locations". Apache: HTTPd server project. 2021. Архивировано из оригинала 20 октября 2021 г. Получено 19 октября 2021 г.
  29. ^ "Динамический контент с CGI". Apache: проект HTTPd-сервера. 2021. Архивировано из оригинала 15 ноября 2021 г. Получено 19 октября 2021 г.
  30. ^ Крис Шифлетт (2003). Справочник разработчика HTTP. Издательство Sams. ISBN 0-672-32454-7. Архивировано из оригинала 20 января 2023 г. . Получено 9 декабря 2021 г. .
  31. ^ abc ASF Infrabot (22 мая 2019 г.). "Списки каталогов". Apache foundation: проект HTTPd server. Архивировано из оригинала 7 июня 2019 г. Получено 16 ноября 2021 г.
  32. ^ "Apache: список каталогов для загрузки файлов". Apache: HTTPd-сервер. Архивировано из оригинала 2 декабря 2021 г. Получено 16 декабря 2021 г.
  33. ^ "Ошибка клиента 4xx". RFC 7231, HTTP/1.1: Семантика и содержимое. стр. 58. раздел 6.5. doi : 10.17487/RFC7231 . RFC 7231.
  34. ^ "Ошибка сервера 5xx". RFC 7231, HTTP/1.1: Семантика и содержимое. стр. 62-63. раздел 6.6. doi : 10.17487/RFC7231 . RFC 7231.
  35. ^ "Введение". RFC 7235, HTTP/1.1: Аутентификация. стр. 3. раздел 1. doi : 10.17487/RFC7235 . RFC 7235.
  36. ^ ab "Коды статуса ответа: перенаправление 3xx". RFC 7231, HTTP/1.1: семантика и содержимое. стр. 53–54. раздел 6.4. doi : 10.17487/RFC7231 . RFC 7231.
  37. ^ "Успешно 2xx". RFC 7231, HTTP/1.1: Семантика и содержимое. стр. 51-54. раздел 6.3. doi : 10.17487/RFC7231 . RFC 7231.
  38. ^ "Руководство по кэшированию". Apache: проект HTTPd-сервера. 2021. Архивировано из оригинала 9 декабря 2021 г. Получено 9 декабря 2021 г.
  39. ^ "NGINX Content Caching". F5 NGINX. 2021. Архивировано из оригинала 9 декабря 2021 г. Получено 9 декабря 2021 г.
  40. ^ Эвангелос П. Маркатос (1996). «Кэширование веб-документов в основной памяти». Компьютерные сети и системы ISDN. Архивировано из оригинала 20 января 2023 года . Получено 9 декабря 2021 года .
  41. ^ "IPlanet Web Server 7.0.9: file-cache". Oracle. 2010. Архивировано из оригинала 9 декабря 2021 г. Получено 9 декабря 2021 г.
  42. ^ "Модуль Apache mod_file_cache". Apache: проект HTTPd-сервера. 2021. Архивировано из оригинала 9 декабря 2021 г. Получено 9 декабря 2021 г.
  43. ^ "HTTP-сервер: конфигурация: кэш файлов". GNU. 2021. Архивировано из оригинала 9 декабря 2021 г. Получено 9 декабря 2021 г.
  44. ^ "Модуль Apache mod_cache_disk". Apache: проект HTTPd-сервера. 2021. Архивировано из оригинала 9 декабря 2021 г. Получено 9 декабря 2021 г.
  45. ^ "Что такое динамический кэш?". Образовательный. 2021. Архивировано из оригинала 9 декабря 2021 г. Получено 9 декабря 2021 г.
  46. ^ "Dynamic Cache Option Tutorial". Siteground. 2021. Архивировано из оригинала 20 января 2023 г. Получено 9 декабря 2021 г.
  47. ^ Арун Айенгар; Джим Челленджер (2000). «Улучшение производительности веб-сервера путем кэширования динамических данных». Usenix . Получено 9 декабря 2021 г. .
  48. ^ Jussara M. Almeida ; Virgilio Almeida; David J. Yates (7 июля 1997 г.). "WebMonitor: инструмент для измерения производительности сервера World Wide Web". Первый понедельник . doi : 10.5210/fm.v2i7.539 . Архивировано из оригинала 4 ноября 2021 г. . Получено 4 ноября 2021 г. .
  49. ^ Фишер, Тим; Lifewire. «Получение ошибки 502 Bad Gateway? Вот что делать». Lifewire . Архивировано из оригинала 23 февраля 2017 г. Получено 1 февраля 2019 г.
  50. ^ "Что такое 502 bad gateway и как его исправить?". IT PRO . Архивировано из оригинала 20 января 2023 г. Получено 1 февраля 2019 г.
  51. ^ Фишер, Тим; Lifewire. «Получение ошибки 503 Service Unavailable? Вот что делать». Lifewire . Архивировано из оригинала 20 января 2023 г. Получено 1 февраля 2019 г.
  52. ^ Фишер, Тим; Lifewire. «Получение ошибки 504 Gateway Timeout? Вот что делать». Lifewire . Архивировано из оригинала 23 апреля 2021 г. Получено 1 февраля 2019 г.
  53. ^ many (24 января 2021 г.). "Медленная загрузка с HTTP/2". github. Архивировано из оригинала 16 ноября 2021 г. Получено 15 ноября 2021 г.
  54. ^ Junho Choi (24 августа 2020 г.). «Повышение скорости загрузки HTTP/2». Cloudflare. Архивировано из оригинала 16 ноября 2021 г. Получено 15 ноября 2021 г.
  55. ^ "Опрос веб-серверов за октябрь 2021 г.". Netcraft . 15 октября 2021 г. Архивировано из оригинала 15 ноября 2021 г. Получено 15 ноября 2021 г.
  56. ^ "February 2021 Web Server Survey". Netcraft . 26 февраля 2021 г. Архивировано из оригинала 15 апреля 2021 г. Получено 8 апреля 2021 г.
  57. ^ "February 2020 Web Server Survey". Netcraft . 20 февраля 2020 г. Архивировано из оригинала 17 апреля 2021 г. Получено 8 апреля 2021 г.
  58. ^ "February 2019 Web Server Survey". Netcraft . 28 февраля 2019. Архивировано из оригинала 15 апреля 2021. Получено 8 апреля 2021 .
  59. ^ "February 2018 Web Server Survey". Netcraft . 13 февраля 2018. Архивировано из оригинала 17 апреля 2021 г. Получено 8 апреля 2021 г.
  60. ^ "February 2017 Web Server Survey". Netcraft . 27 февраля 2017. Архивировано из оригинала 14 марта 2017. Получено 13 марта 2017 .
  61. ^ "February 2016 Web Server Survey". Netcraft . 22 февраля 2016 г. Архивировано из оригинала 27 января 2022 г. Получено 27 января 2022 г.

Внешние ссылки