Обзор протокола HTTP — HTTP
HTTP — это протокол, позволяющий получать различные ресурсы, например HTML-документы. Протокол HTTP лежит в основе обмена данными в Интернете. HTTP является протоколом клиент-серверного взаимодействия, что означает инициирование запросов к серверу самим получателем, обычно веб-браузером (web-browser). Полученный итоговый документ будет (может) состоять из различных поддокументов, являющихся частью итогового документа: например, из отдельно полученного текста, описания структуры документа, изображений, видео-файлов, скриптов и многого другого.
Клиенты и серверы взаимодействуют, обмениваясь одиночными сообщениями (а не потоком данных). Сообщения, отправленные клиентом, обычно веб-браузером, называются запросами, а сообщения, отправленные сервером, называются ответами.
Хотя HTTP был разработан ещё в начале 1990-х годов, за счёт своей расширяемости в дальнейшем он все время совершенствовался. HTTP является протоколом прикладного уровня, который чаще всего использует возможности другого протокола — TCP (или TLS — защищённый TCP) — для пересылки своих сообщений, однако любой другой надёжный транспортный протокол теоретически может быть использован для доставки таких сообщений. Благодаря своей расширяемости, он используется не только для получения клиентом гипертекстовых документов, изображений и видео, но и для передачи содержимого серверам, например, с помощью HTML-форм. HTTP также может быть использован для получения только частей документа с целью обновления веб-страницы по запросу (например, посредством AJAX запроса).
HTTP — это клиент-серверный протокол, то есть запросы отправляются какой-то одной стороной — участником обмена (user-agent) (либо прокси вместо него). Чаще всего в качестве участника выступает веб-браузер, но им может быть кто угодно, например, робот, путешествующий по Сети для пополнения и обновления данных индексации веб-страниц для поисковых систем.
Каждый запрос (англ. request) отправляется серверу, который обрабатывает его и возвращает ответ (англ. response). Между этими запросами и ответами как правило существуют многочисленные посредники, называемые прокси, которые выполняют различные операции и работают как шлюзы или кэш, например.
Обычно между браузером и сервером гораздо больше различных устройств-посредников, которые играют какую-либо роль в обработке запроса: маршрутизаторы, модемы и так далее. Благодаря тому, что Сеть построена на основе системы уровней (слоёв) взаимодействия, эти посредники «спрятаны» на сетевом и транспортном уровнях. В этой системе уровней HTTP занимает самый верхний уровень, который называется «прикладным» (или «уровнем приложений»). Знания об уровнях сети, таких как представительский, сеансовый, транспортный, сетевой, канальный и физический, имеют важное значение для понимания работы сети и диагностики возможных проблем, но не требуются для описания и понимания HTTP.
Клиент: участник обмена
Участник обмена (user agent) — это любой инструмент или устройство, действующие от лица пользователя. Эту задачу преимущественно выполняет веб-браузер; в некоторых случаях участниками выступают программы, которые используются инженерами и веб-разработчиками для отладки своих приложений.
Браузер всегда является той сущностью, которая создаёт запрос. Сервер обычно этого не делает, хотя за многие годы существования сети были придуманы способы, которые могут позволить выполнить запросы со стороны сервера.
Чтобы отобразить веб страницу, браузер отправляет начальный запрос для получения HTML-документа этой страницы. После этого браузер изучает этот документ и запрашивает дополнительные файлы, необходимые для отображения содержания веб-страницы (исполняемые скрипты, информацию о макете страницы — CSS таблицы стилей, дополнительные ресурсы в виде изображений и видео-файлов), которые непосредственно являются частью исходного документа, но расположены в других местах сети. Далее браузер соединяет все эти ресурсы для отображения их пользователю в виде единого документа — веб-страницы. Скрипты, выполняемые самим браузером, могут получать по сети дополнительные ресурсы на последующих этапах обработки веб-страницы, и браузер соответствующим образом обновляет отображение этой страницы для пользователя.
Веб-страница является гипертекстовым документом. Это означает, что некоторые части отображаемого текста являются ссылками, которые могут быть активированы (обычно нажатием кнопки мыши) с целью получения и соответственно отображения новой веб-страницы (переход по ссылке). Это позволяет пользователю «перемещаться» по страницам сети (Internet). Браузер преобразует эти гиперссылки в HTTP-запросы и в дальнейшем полученные HTTP-ответы отображает в понятном для пользователя виде.
Веб-сервер
На другой стороне коммуникационного канала расположен сервер, который обслуживает (англ. serve) пользователя, предоставляя ему документы по запросу. С точки зрения конечного пользователя, сервер всегда является некой одной виртуальной машиной, полностью или частично генерирующей документ, хотя фактически он может быть группой серверов, между которыми балансируется нагрузка, то есть перераспределяются запросы различных пользователей, либо сложным программным обеспечением, опрашивающим другие компьютеры (такие как кеширующие серверы, серверы баз данных, серверы приложений электронной коммерции и другие).
Сервер не обязательно расположен на одной машине, и наоборот — несколько серверов могут быть расположены (поститься) на одной и той же машине. В соответствии с версией HTTP/1.1 и имея Host
заголовок, они даже могут делить тот же самый IP-адрес.
Прокси
Между веб-браузером и сервером находятся большое количество сетевых узлов, передающих HTTP сообщения. Из-за слоистой структуры большинство из них оперируют также на транспортном сетевом или физическом уровнях, становясь прозрачным на HTTP слое и потенциально снижая производительность. Эти операции на уровне приложений называются прокси. Они могут быть прозрачными или нет, (изменяющие запросы не пройдут через них), и способны исполнять множество функций:
- caching (кеш может быть публичным или приватными, как кеш браузера)
- фильтрация (как сканирование антивируса, родительский контроль, …)
- выравнивание нагрузки (позволить нескольким серверам обслуживать разные запросы)
- аутентификация (контролировать доступом к разным ресурсам)
- протоколирование (разрешение на хранение истории операций)
HTTP — прост
Даже с большей сложностью, введённой в HTTP/2 путём инкапсуляции HTTP-сообщений в фреймы, HTTP, как правило, прост и удобен для восприятия человеком. HTTP-сообщения могут читаться и пониматься людьми, обеспечивая более лёгкое тестирование разработчиков и уменьшенную сложность для новых пользователей.
HTTP — расширяемый
Введённые в HTTP/1.0 HTTP-заголовки сделали этот протокол лёгким для расширения и экспериментирования. Новая функциональность может быть даже введена простым соглашением между клиентом и сервером о семантике нового заголовка.
HTTP не имеет состояния, но имеет сессию
HTTP не имеет состояния: не существует связи между двумя запросами, которые последовательно выполняются по одному соединению. Из этого немедленно следует возможность проблем для пользователя, пытающегося взаимодействовать с определённой страницей последовательно, например, при использовании корзины в электронном магазине. Но хотя ядро HTTP не имеет состояния, куки позволяют использовать сессии с сохранением состояния. Используя расширяемость заголовков, куки добавляются к рабочему потоку, позволяя сессии на каждом HTTP-запросе делиться некоторым контекстом или состоянием.
HTTP и соединения
Соединение управляется на транспортном уровне, и потому принципиально выходит за границы HTTP. Хотя HTTP не требует, чтобы базовый транспортного протокол был основан на соединениях, требуя только
HTTP/1.0 открывал TCP-соединение для каждого обмена запросом/ответом, имея два важных недостатка: открытие соединения требует нескольких обменов сообщениями, и потому медленно, хотя становится более эффективным при отправке нескольких сообщений, или при регулярной отправке сообщений: тёплые соединения более эффективны, чем
Для смягчения этих недостатков, HTTP/1.1 предоставил конвейерную обработку (которую оказалось трудно реализовать) и устойчивые соединения: лежащее в основе TCP соединение можно частично контролировать через заголовок Connection
. HTTP/2 сделал следующий шаг, добавив мультиплексирование сообщений через простое соединение, помогающее держать соединение тёплым и более эффективным.
Проводятся эксперименты по разработке лучшего транспортного протокола, более подходящего для HTTP. Например, Google экспериментирует с QUIC (которая основана на UDP) для предоставления более надёжного и эффективного транспортного протокола.
Естественная расширяемость HTTP со временем позволила большее управление и функциональность Сети. Кеш и методы аутентификации были ранними функциями в истории HTTP. Способность ослабить первоначальные ограничения, напротив, была добавлена в 2010-е.
Ниже перечислены общие функции, управляемые с HTTP.
- Кеш
Сервер может инструктировать прокси и клиенты, указывая что и как долго кешировать. Клиент может инструктировать прокси промежуточных кешей игнорировать хранимые документы. - Ослабление ограничений источника
Для предотвращения шпионских и других нарушающих приватность вторжений, веб-браузер обеспечивает строгое разделение между веб-сайтами. - Аутентификация
Некоторые страницы доступны только специальным пользователям. Базовая аутентификация может предоставляться через HTTP, либо через использование заголовка WWW-Authenticate (en-US) и подобных ему, либо с помощью настройки спецсессии, используя куки. - Прокси и туннелирование
Серверы и/или клиенты часто располагаются в интернете и скрывают свои истинные IP-адреса от других. HTTP запросы идут через прокси для пересечения этого сетевого барьера. Не все прокси — HTTP прокси. SOCKS-протокол, например, оперирует на более низком уровне. Другие, как, например, ftp, могут быть обработаны этими прокси. - Сессии
Использование HTTP кук позволяет связать запрос с состоянием на сервере.Это создаёт сессию, хотя ядро HTTP — протокол без состояния. Это полезно не только для корзин в интернет-магазинах, но также для любых сайтов, позволяющих пользователю настроить выход.
Когда клиент хочет взаимодействовать с сервером, являющимся конечным сервером или промежуточным прокси, он выполняет следующие шаги:
- Открытие TCP соединения: TCP-соединение будет использоваться для отправки запроса (или запросов) и получения ответа. Клиент может открыть новое соединение, переиспользовать существующее или открыть несколько TCP-соединений к серверу.
- Отправка HTTP-сообщения: HTTP-сообщения (до HTTP/2) являются человекочитаемыми. Начиная с HTTP/2, простые сообщения инкапсулируются во фреймы, делая невозможным их чтение напрямую, но принципиально остаются такими же.
GET / HTTP/1.1 Host: developer.mozilla.org Accept-Language: fr
- Читает ответ от сервера:
HTTP/1.1 200 OK Date: Sat, 09 Oct 2010 14:28:02 GMT Server: Apache Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT ETag: "51142bc1-7449-479b075b2891b" Accept-Ranges: bytes Content-Length: 29769 Content-Type: text/html <!DOCTYPE html.
.. (here comes the 29769 bytes of the requested web page)
- Закрывает или переиспользует соединение для дальнейших запросов.
Если активирован HTTP-конвейер, несколько запросов могут быть отправлены без ожидания получения первого ответа целиком. HTTP-конвейер тяжело внедряется в существующие сети, где старые куски ПО сосуществуют с современными версиями. HTTP-конвейер был заменён в HTTP/2 на более надёжные мультиплексные запросы во фрейме.
Подробнее в отдельной статье «Сообщения HTTP»
HTTP/1.1 и более ранние HTTP сообщения человекочитаемые. В версии HTTP/2 эти сообщения встроены в новую бинарную структуру, фрейм, позволяющий оптимизации, такие как компрессия заголовков и мультиплексирование. Даже если часть оригинального HTTP сообщения отправлена в этой версии HTTP, семантика каждого сообщения не изменяется и клиент воссоздаёт (виртуально) оригинальный HTTP-запрос. Это также полезно для понимания HTTP/2 сообщений в формате HTTP/1.1.
Существует два типа HTTP сообщений, запросы и ответы, каждый в своём формате.
Запросы
Примеры HTTP запросов:
Запросы содержат следующие элементы:
- HTTP-метод, обычно глагол подобно
GET
,POST
или существительное, какOPTIONS
илиHEAD
, определяющее операцию, которую клиент хочет выполнить. Обычно, клиент хочет получить ресурс (используяGET
) или передать значения HTML-формы (используяPOST
), хотя другие операция могут быть необходимы в других случаях. - Путь к ресурсу: URL ресурсы лишены элементов, которые очевидны из контекста, например без протокола (
), домена (здесьdeveloper.mozilla.org
), или TCP порта (здесь80
). - Версию HTTP-протокола.
- Заголовки (опционально), предоставляющие дополнительную информацию для сервера.
- Или тело, для некоторых методов, таких как
POST
, которое содержит отправленный ресурс.
Ответы
Примеры ответов:
Ответы содержат следующие элементы:
- Версию HTTP-протокола.
- HTTP код состояния, сообщающий об успешности запроса или причине неудачи.
- Сообщение состояния — краткое описание кода состояния.
- HTTP заголовки, подобно заголовкам в запросах.
- Опционально: тело, содержащее пересылаемый ресурс.
HTTP — лёгкий в использовании расширяемый протокол. Структура клиент-сервера, вместе со способностью к простому добавлению заголовков, позволяет HTTP продвигаться вместе с расширяющимися возможностями Сети.
Хотя HTTP/2 добавляет некоторую сложность, встраивая HTTP сообщения во фреймы для улучшения производительности, базовая структура сообщений осталась с HTTP/1.0. Сессионный поток остаётся простым, позволяя исследовать и отлаживать с простым монитором HTTP-сообщений.
Last modified:
HTTP запрос: заголовки HTTP запроса, методы HTTP запроса, строка HTTP запроса, ресурсы HTTP запроса, примеры запросов
Привет, читатель блога ZametkiNaPolyah. ru! Продолжим знакомиться с протоколом HTTP в рубрике серверы и протоколы и ее разделе HTTP протокол. В этой записи ты узнаешь всё что можно про запросы HTTP протокола. Для начала мы с тобой разберем структуру HTTP запроса, затем мы посмотрим, что собой представляет строка HTTP запроса, потом мы поговорим с тобой о методах HTTP запроса и ты узнаешь, собственно, что такое метод. Потом мы плавно перейдем к идентификаторам ресурса в HTTP запросе (Request-URI, если не совсем понятно), после чего мы с тобой разберем поля заголовков HTTP запроса и в конце этой записи мы с тобой разберем пару примеров HTTP запросов, которые, для закрепления прочитанного, ты можешь написать самостоятельно, как делает твой браузер, через который ты зашел на этот сайт.
HTTP запрос: заголовки HTTP запроса, методы HTTP запроса, строка HTTP запроса, ресурсы HTTP запроса, примеры запросов
Структура HTTP запроса
Содержание статьи:
- Структура HTTP запроса
- Строка HTTP запроса
- HTTP метод запроса
- URI HTTP запроса (Request-URI).
Запрашиваемый URI
- Поля заголовка HTTP запроса
- Примеры HTTP запросов
Если вы хотите узнать всё про протокол HTTP, обратитесь к навигации по рубрике HTTP протокол. HTTP запрос – это HTTP сообщение, которое клиент посылает HTTP серверу. Обычно HTTP запрос содержит:
- строку запроса, в которой указывается версия HTTP протокола и HTTP метод запроса;
- ноль или несколько заголовков, разделенных между собой символом конца строки, в которых передаются другие HTTP праметры для успешного HTTP соединения;
- пустую строку, чтобы отделить служебную информацию от тела сообщения;
- необязательное тело сообщения.
Вот так выглядит общий синтаксис (общая структура HTTP запроса):
Request = Request-Line ; *( general-header ; | request-header ; | entity-header ) ; CRLF [ message-body ] ;
1 2 3 4 5 6 7 8 9 10 11 |
Request = Request-Line ;
*( general-header ;
| request-header ;
| entity-header ) ;
CRLF
[ message-body ] ; |
В первой строке HTTP сообщения обычно содержится HTTP метод, который нужно применить к ресурсу, который запрашивает клиент, идентификатор ресурса (читай URI в HTTP) и версию HTTP протокола. Далее мы рассмотрим каждую часть HTTP запроса в отдельности и приведем пример HTTP запроса.
Строка HTTP запроса
Строка HTTP запроса начинается с маркера/метки метода, после которой следует URI запрашиваемого ресурса (если не понятно, читай про параметры HTTP протокола), версия HTTP протокола и символ CRLF, который означает конец строки HTTP запроса. Синтаксис строки HTTP запроса:
Request-Line = Method SP Request-URI SP HTTP-Version CRLF
Request-Line = Method SP Request-URI SP HTTP-Version CRLF |
Предлагаю рассмотреть в отдельности каждую часть строки HTTP запроса в отдельности.
HTTP метод запроса
Метод HTTP запроса указывает серверу, как нужно обращаться к запрашиваемому ресурсу, который указан в URI. Метод HTTP запроса чувствителен к регистру и его имя следует указывать только в верхнем регистре. Давайте перечислим все метода HTTP запроса, я сведу их в одну таблицу:
Номер | HTTP метод запроса и его описание |
1 | GET Метод HTTP запроса GET используется для получения информации с сервера по указанному URI. HTTP запросы, использующие метод GET должны получать только данные и не должны оказывать никакого влияния на эти данные. |
2 | HEAD Принцип работы метода HEAD в HTTP запросе аналогичен методу GET, но метод HEAD не передает тело сообщения (HTTP объект). |
3 | POST HTTP запрос POST используется для отправки данных на HTTP сервер, например, когда вы заполняете HTML форму на сайте. |
4 | PUT HTTP запросы с методом PUT сохраняются под запрашиваемым URI. То есть метод PUT используется для замены контента.![]() |
5 | DELETE Метод DELETE при HTTP запросе позволяет запросить сервер удалить данные ресурса, указанного в URI. |
6 | CONNECT HTTP запрос с методом CONNECT позволяет установить туннель к серверу, который указан в URI. |
7 | OPTIONS HTTP запрос с методом OPTION позволяет получить параметры для связи с ресурсом. |
8 | TRACE При HTTP запросе с методом TRACE можно отследить то, что происходит с вашими запросами. |
Список методов, которые можно применить к ресурсу, может быть указан в поле заголовка Allow. HTTP сервер всегда должен возвращать код состояния ответа, чтобы сообщить клиенту: допустим метод или нет.
URI HTTP запроса (Request-URI). Запрашиваемый URI
URI HTTP запроса (Request-URI) или запрашиваемый URI для нас в большинстве случаев это обычный URL, который дает однозначное понимание HTTP серверу к какому ресурсу мы хотим обратиться:
Request-URI = «*» | absoluteURI | abs_path
Request-URI = «*» | absoluteURI | abs_path |
У URI, когда мы делаем HTTP запрос, есть три опции, которые зависят от характера запроса. Звездочка в предыдущем примере означает, что мы хотим обратиться не к какому-то ресурсу, а непосредственно к HTTP серверу. Такой способ допустим только в том случае, когда используемый метод HTTP запроса не обязательно обращается к ресурсу, например:
OPTIONS * HTTP/1.1
OPTIONS * HTTP/1.1 |
absoluteURI URI необходим при HTTP запросе в том случае, когда HTTP запрос производится при помощи прокси-сервера. Прокси-сервер может передать этот запрос HTTP серверу, а может дать ответ из своего кэша, пример absoluteURI в HTTP запросе:
GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1
GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1 |
Обращу ваше внимание на то, что в версии HTTP протокола 1.1 клиенты должны использовать absoluteURI только для обращений к прокси-серверам.
Рассмотрим третий вид URI в HTTP запросе, наиболее общую и часто встречаемую форму Request-URI, данную форму Request-URI используют для идентификации ресурса на конечном HTTP сервере, при этом абсолютный путь URI передается в HTTP запросе, как Request-URI, а вот сетевое расположение ресурса передается в поле Host HTTP заголовка. Пример:
GET /pub/WWW/TheProject.html HTTP/1.1 Host: www.w3.org
GET /pub/WWW/TheProject.html HTTP/1.1
Host: www.w3.org |
Обратите внимание, что абсолютный путь не может быть пустым; если оригинальный URI пуст, то он должен запрашиваться как «/» (корневой каталог сервера). Первоначальный сервер должен декодировать Request-URI (кодирование в HTTP), чтобы правильно интерпретировать запрос. Серверам следует отвечать на недопустимые Request-URI соответствующим кодом состояния.
В запросах, которые передаются далее, прокси-сервера никогда не должны перезаписывать часть «abs_path» запрашиваемого URI (Request-URI), за исключением случая, отмеченного выше, когда пустой abs_path заменяется на «*», независимо от внутренней реализации прокси-сервера.
Первоначальные HTTP/1.1 сервера должны учитывать, что точный ресурс, идентифицированный интернет-запросом определяется как Request-URI, так и полем заголовка Host. Первоначальный сервер, который различает ресурсы, основанные на запрошенном хосте (иногда называемые виртуальными хостами или vanity hostnames) должен использовать следующие правила для определения запрошенного в HTTP/1.1 запросе ресурса:
- Если Request-URI — это absoluteURI, то хост — это часть Request-URI. Любое значение поля заголовка Host в запросе ДОЛЖНО игнорироваться (напомню про требования HTTP).
- Если Request-URI — не absoluteURI, а запрос содержит поле заголовка Host, то хост определяется значением поля заголовка Host.
- Если хоста, определенного правилами 1 или 2 не существует на сервере, код состояния ответа должен быть 400 (Испорченный Запрос, Bad Request).
Получатели HTTP/1.0 запроса, в котором недостает поля заголовка Host, могут пытаться использовать эвристику (например, исследовать путь в URI на предмет уникальности на каком-либо из хостов) чтобы определить какой точно ресурс запрашивается.
Поля заголовка HTTP запроса
Поля заголовка HTTP запроса дают возможность клиенту передавать дополнительную, уточняющую и служебную информацию о HTTP запросе и о самом себе любимом. Поля заголовка HTTP запроса это что-то вроде модификаторов HTTP запроса. Если вы изучали какой-нибудь язык программирования, то заголовки HTTP запроса можно сравнить с параметрами, которые мы передаем в функцию для ее вызова:
request-header = Accept | Accept-Charset | Accept-Encoding | Accept-Language | Authorization | From | Host | If-Modified-Since | If-Match | If-None-Match | If-Range | If-Unmodified-Since | Max-Forwards | Proxy-Authorization | Range | Referer | User-Agent
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 |
request-header = Accept
| Accept-Charset
| Accept-Encoding
| Accept-Language
| Authorization
| From
| Host
| If-Modified-Since
| If-Match
| If-None-Match
| If-Range
| If-Unmodified-Since
| Max-Forwards
| Proxy-Authorization
| Range
| Referer
| User-Agent |
Никто не запрещает вам ввести свои собственные поля заголовков HTTP запроса, если вы решите написать свой собственный клиент или HTTP сервер.
Примеры HTTP запросов
Давайте теперь разберем несколько примеров HTTP запросов. Пример HTTP запроса для получения простой HTML страницы: представим, что на сайте example.org лежит HTML документ, который называется hello.htm, http запрос для него будет выглядеть примерно следующим образом:
GET /hello.htm HTTP/1.1 User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT) Host: www.example.com Accept-Language: ru-ru Accept-Encoding: gzip, deflate Connection: Keep-Alive
1 2 3 4 5 6 7 8 9 10 11 |
GET /hello.htm HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.example.com
Accept-Language: ru-ru
Accept-Encoding: gzip, deflate
Connection: Keep-Alive |
Этим запросом мы не посылаем никаких данных на сервер, потому что мы хотим получить простую HTML страницу с сервера. Давайте теперь посмотрим пример HTTP запроса, который отправляет данные HTML формы на сервер с помощью тела HTTP сообщения:
POST /cgi-bin/process.cgi HTTP/1.1 User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT) Host: www.example.com Content-Type: application/x-www-form-urlencoded Content-Length: length Accept-Language: ru-ru Accept-Encoding: gzip, deflate Connection: Keep-Alive licenseID=string&content=string&/paramsXML=string
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
POST /cgi-bin/process.cgi HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: length
Accept-Language: ru-ru
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
licenseID=string&content=string&/paramsXML=string |
В стартовой строке указан URL /cgi-bin/process. cgi – он будет использован для обработки данных, которые мы передадим серверу в запросе, на такой запрос мы даже получим от сервера ответ. Content-Type сообщает серверу о том, что данные, которые мы хотим передать серверу – это простая HTML форма.
HTTP. Методы, статус-коды, заголовки, редиректы, SSL
Миша Радионов
Опубликовано: 06 мая 2021
Вернуться в блог
Содержание
- Видео
- HTTP
- Структура HTTP-запросов и ответов
- URL запроса
- Методы HTTP-запросов
- Статус-коды ответа
- Заголовки HTTP
- HTTP-редиректы
- SSL шифрование
- Версии HTTP
- HTTP/2
- HTTP/3
Что отличает настоящего айтишника?
Настоящий знает, как работает Интернет. Рассказываем для всех простым языком, как работает HTTP.
Видео
HTTP
Структура HTTP-запросов и ответов
В HTTP и запрос, и ответ имеют похожую структуру:
- URL
- Метод
- Версия HTTP
- Заголовки
- Статус-код (обязательно только для HTTP-ответов)
- Тело (необязательно)
Пример HTTP-запроса:
POST /cgi-bin/process.cgi HTTP/1.1 User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT) Host: www.tutorialspoint.com Content-Type: application/x-www-form-urlencoded Content-Length: length Accept-Language: en-us Accept-Encoding: gzip, deflate Connection: Keep-Alive licenseID=string&content=string&/paramsXML=string
, где
POST
— метод,/cgi-bin/process.cgi
— URL,HTTP/1.1
— версия протокола HTTP,User-Agent
,Host
и другие — заголовкиlicenseID=string&content=string&/paramsXML=string
— тело запроса.
Пример HTTP-ответа:
HTTP/1.1 200 OK Date: Mon, 27 Jul 2009 12:28:53 GMT Server: Apache/2.2.14 (Win32) Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT Content-Length: 88 Content-Type: text/html Connection: Closed <html> <body> <h2>Hello, World!</h2> </body> </html>
В данном ответе отсутствует URL и метод, зато появился статус-код 200
, означающий «успех».
URL запроса
Структура URL-адреса
http://blog.example.com:80/catalog/category/knifes?key1=value1&amp;key2=value2#anchor
где
- http:// — протокол
- blog — поддомен (субдомен, домен третьего уровня)
- example — домен (домен второго уровня)
- com — доменная зона (домен первого уровня)
- 80 — порт. Для http — 80, для https — 443
- /catalog/category/knifes — ЧПУ-адрес (человеко-понятный URL)
- key1=value1&key2=value2 — GET параметры запроса
- anchor — якорь
Абсолютные и относительные URL
Абсолютные адреса в проекте — зло. Используйте относительные.
Абсолютный URL
https://developer.mozilla.org/ru/docs/Learn
Абсолютный URL, скрыт протокол
//developer.mozilla.org/ru/docs/Learn
Относительный URL (неправильно) 🚫
ru/docs/Learn
если мы на странице https://domain. ru/ru/about, то преобразуется в https://domain.ru/ru/aboutru/docs/Learn
Относительный URL (правильно) ✅
/ru/docs/Learn
если мы на странице https://domain.ru/ru/about, то преобразуется в https://domain.ru/ru/docs/Learn
Якоря (анкоры)
⚓️Якоря придуманы в HTML, чтобы давать ссылки не просто на HTML-страницу, а на определенное место на странице. Позже якоря стали активно использоваться для передачи параметров в JS.
URL с якорем
https://domain.ru/url#someAnchor
HTML-элемент, на который ведет якорь
<h3 name="someAnchor">Заголовок с якорем</h3>
Методы HTTP-запросов
Если при повторении одного и того же запроса на сервере ничего не меняется, запрос считается идемпотентным. Если повторение одинакового запроса несколько раз изменяет состояние сервера, то он не идемпотентен и, вообще говоря, менее безопасен.
Метод | POST-параметры | Идемпотентность | Предназначение |
---|---|---|---|
GET | нет | да | получает информацию о ресурсе |
POST | да | нет | создает ресурс |
PUT | да | да | заменяет ресурс целиком |
PATCH | да | да | редактирует ресурс |
DELETE | нет | да | удаляет ресурс |
HEAD | нет | да | не получает body, только отправляет и получает HTTP-заголовки |
PUT заменяет существующую сущность. Те элементы сущности, которые не представлены в запросе, будут очищены или заменены на null.
GET и POST параметры
В контексте методов HTTP-запросов стоит упомянуть GET и POST параметры, так как вы будете постоянно с ними встречаться и так проще понять, как используются методы.
GET-параметры передаются в URL запроса. Пример URL с GET-параметрами я приводил выше. Любой из перечисленных ниже методов может иметь или не иметь GET-параметры, это совершенно нормально.
POST-параметры — это любые параметры, передаваемые в теле (body) запроса. POST-параметры не следует использовать для некоторых методов, например, для GET, DELETE и HEAD.
Статус-коды ответа
По группам
- 100 — 199 Информационные
- 200 — 299 Успешные
- 300 — 399 Редиректы
- 400 — 499 Клиентские ошибки
- 500 — 599 Серверные ошибки
Популярные коды ответа
- Для редиректов SEO-шники рекомендуют 301 редиректы.
- 401 не авторизован (юзер не представился)
- 403 запрещено (юзер не уполномочен)
- 404 ресурс не найден
- 418 я чайник
- 419 кука протухла (обычно ошибка проверки CSRF)
- 502 Bad Gateway.
Программа веб-сервер (Nginx) получила неправильный ответ от бэкенда (PHP). Скорее всего, что-то сломалось или неправильно настроено на сервере
- 504 Gateway Timeout. Программа веб-сервер устала ждать ответа от бэкенда и отменила запрос к нему. Скорее всего, на бэкенде происходит что-то очень долгое, какое-то большое вычисление. Ну и все равно это не нормально, такого быть не должно.
- 503 Maintenance Mode. На сервере ведутся технические работы.
Коды ответа, как и заголовки, можно посмотреть в браузере на вкладке Network или получить командой curl -I domain.ru
. В отличие от заголовков, коды ответа бывают только в ответе и не используются в запросе.
Заголовки HTTP
Заголовки — часть HTTP-запроса и/или HTTP-ответа, они не видимы пользователю. Представляют собой пары ключ: значение. Заголовки можно посмотреть в браузере на вкладке Network или получить командой curl -I domain.ru
(так можно получить только заголовки ответа сервера).
Заголовки запроса
- Host — ВАЖНО. Домен, по которому мы переходим
- Cookie — куки, отдаваемые браузером серверу
- User-Agent — браузер, которым делаем запрос
- Accept-Language и Accept-Encoding — принимаемые браузером язык и кодировка
- Referer — предыдущая страница
- Authorization — реквизиты для базовой авторизации (логин, пароль)
Заголовки ответа
- Cache-Control — сервер говорит браузеру, как кэшировать данные
- Content-Type — тип и подтип содержимого, а также кодировка и приложение для открытия содержимого. Примеры:
- Content-Type: text/html; charset=UTF-8 — Тип текст, подтип HTML. Кодировка UTF-8
- Content-Type: image/gif — Тип картинка, подтип GIF
- Content-Type: application/pdf — Тип «открываемый внешним приложением», подтип PDF
- Content-Disposition — говорит браузеру, скачивать или открывать документ как веб-страницу
- Location — заголовок для редиректа
- Set-Cookie — сервер передает браузеру куку
- WWW-Authenticate — выводит окно с базовой аутентификацией
- Content-Encoding — сервер говорит браузеру, сжата ли страница и в каком виде
- Server и X-Powered-By — технологии, на которых работает сайт
HTTP-редиректы
Редиректы — способ перенаправить браузер на другой URL. Это похоже на то, как если бы вы пришли в магазин и там увидели надпись «мы переехали, вот наш новый адрес». После этого вы идете в магазин по новому адресу. Важно понимать, что редирект со стороны сайта лишь просит ваш браузер перейти на другой адрес, а не подсовывает вам другую страницу. Другими словами, технически редирект происходит на стороне клиента, а не сервера.
www и http://
Проверка редиректов очень важна для проверки настроек префиксов домена типа www
и http
/https
.
То есть у каждого домена обычно есть 4 варианта написания:
- http://domain.ru
- http://www.domain.ru
- https://domain.ru (обычно основной вариант)
- https://www.domain.ru
И 3 из этих 4 вариантов обязательно должны ссылаться на один из них, то есть на главный. Главный вариант определяет заказчик, но обычно это https://domain.ru
Инструменты
Редиректы можно проверить браузером через вкладку Network
Разработчикам будет удобнее воспользоваться утилитой
curl -I -L https://domain.ru
Как сбросить кэш редиректов браузера
На Windows нажать ctrl+H, затем «очистить историю», оставить включенной (отжатой) только галочку напротив «Изображения и другие файлы, сохраненные в кэше». Затем нажать «удалить данные».
Принцип — передача только зашифрованных данных.
Типы SSL-сертификатов
- Платные (Comodo, Thawte, reg.ru)
- Срок — 1 год или более
- Стоимость — от 1500 руб/год
- Let’s Encrypt (обычно мы используем именно LE)
- Срок — 3 месяца
- Стоимость — бесплатно
- Нюанс: Wild Card сертификаты для поддоменов (*.flagstudio.ru). Доступны в LE только при DNS-аутентификации, то есть добавлении TXT-записи, которую нужно обновлять каждые 3 месяца. Для обновления используется API, которое есть не у всех DNS-провайдеров.
Диагностика SSL
Если на сайте проблемы с SSL, то причина — в одном из двух:
- Что-то не так с сертификатом (кончился, выдан не на этот домен или самоподписанный)
- Страница запрашивает что-то по HTTP
На скриншоте видно, как посмотреть подробности о сертификате и наличие ошибок в странице. Конкретно на этом скриншоте показана вторая проблема, так называемая «mixed-content error», то есть часть контента прилетает по HTTP.
Для диагности SSL на вашем сайте вы также можете использовать онлайн-сервис https://www.ssllabs.com/ssltest/ .
Учтите, данные о сертификате, как и HTTP-редиректы, сильно кэшируются браузером. Сбрасываются так же, как кэш редиректов (смотрите выше).
Версии HTTP
HTTP/2
Суть — мультиплексирование запросов по TCP.
Преимущества перед HTTP/1.1
- Скорость. HTTP/2 — бинарный протокол, а HTTP/1.1 — текстовый
- Скорость. Мультиплексирование множества запросов в одном соединении TCP
- Скорость. Сжатие HTTP-заголовков
- Server Push. Принудительная отправка данных сервером в браузер
- Приоритеты запросов
Минусы
- Из-за «head-of-line blocking» на медленном интернете HTTP/1.1 работает быстрее
- Для работы HTTP/2 нужен SSL
Распространение: По данным W3Techs на 1 ноября 2020 года, 49% из 10 млн самых популярных интернет-сайтов поддерживают протокол HTTP/2.
Подробная статья с понятными картинками — https://habr.com/ru/company/nix/blog/304518/
HTTP/3
Суть — мультиплексирование по UDP.
Преимущества перед HTTP/2:
- Решена проблема «head-of-line blocking»
- Шифрование и транспорт объединены, пакеты шифруются независимо
- Протокол реализуется на уровне приложений, а не ОС. Поэтому быстро внедряется
Минусы:
- Протокол реализуется на уровне приложений, а не ОС. Поэтому HTTP/3 использует больше CPU
Результаты: По данным Google, страницы загружаются примерно на 5% быстрее, а в потоковом видео на 30% меньше подвисаний по сравнению с TCP.
Распространение: По данным W3Techs на 1 сентября 2020 года, 7% из 10 млн самых популярных интернет-сайтов поддерживают протокол HTTP/3.
Если у вас появились какие-то вопросы, вы можете задать их в комментариях, а мы на них ответим 🙂
Последние записи блога
Please enable JavaScript to view the comments
powered by Disqus.
Что такое протокол HTTPS и принципы его работы
В статье мы расскажем, что означает HTTPS в адресе сайта (расшифровка HTTPS), как работает этот протокол и зачем вообще переходить на безопасное соединение.
Что такое защищенное соединение HTTPS
HTTPS (от англ. HyperText Transfer Protocol Secure) – это безопасный протокол передачи данных, который поддерживает шифрование посредством криптографических протоколов SSL и TLS, и является расширенной версией протокола HTTP. Чтобы лучше понять, что же значит HTTPS, разберемся со всем по порядку.
Миллионы интернет-пользователей постоянно обмениваются информацией. Это могут быть как дружеские беседы, весёлые картинки, рабочие переписки, так и банковские и паспортные данные, номера договоров и другая конфиденциальная информация. Работа всей всемирной паутины основана на протоколе HTTP. Благодаря нему пользователи могут передавать данные.
Сначала HTTP (HyperText Transfer Protocol) использовался только как протокол передачи гипертекста (текста с перекрёстными ссылками). Однако позже стало понятно, что он отлично подходит для передачи данных между пользователями. Протокол был доработан для новых задач и стал использоваться повсеместно.
Несмотря на свою функциональность у HTTP есть один очень важный недостаток ― незащищённость. Данные между пользователями передаются в открытом виде, злоумышленник может вмешаться в передачу данных, перехватить их или изменить. Чтобы защитить данные пользователей, был создан протокол HTTPS.
HTTPS работает благодаря SSL/TLS-сертификату. SSL/TLS-сертификат ― это цифровая подпись сайта. С её помощью подтверждается его подлинность. Перед тем как установить защищённое соединение, браузер запрашивает этот документ и обращается к центру сертификации, чтобы подтвердить легальность документа. Если он действителен, то браузер считает этот сайт безопасным и начинает обмен данными. Вот откуда взялась и что означает S в HTTPS.
Чем отличается SSL от TLS
Для защиты интернет-соединения в 90-х годах компания Netscape создала SSL-сертификат. У первых версий этого сертификата было много недостатков. За несколько лет вышло три версии SSL. Огромный скачок в его усовершенствовании произошел в 1999 году при совместной работе с компанией Consensus Development. Кроме серьёзных доработок, сертификат получил новое название — TLS (что значит — защита транспортного уровня). Несмотря на новое название, пользователи всё равно применяли привычное понятие SSL. Разработчики встали на сторону пользователей и не стали акцентировать внимание на наименовании, поэтому часто можно увидеть двойное название этого сертификата (SSL/TLS), или просто SSL. Однако в официальной документации всё равно используется аббревиатура TLS.
Система HTTPS похожа на провод, который состоит из двух слоёв: медная сердцевина и оболочка. Медная сердцевина ― основная часть провода, по которой идёт ток. Оболочка защищает контакты от внешних воздействий. Так, медная сердцевина ― это HTTP-протокол, а защитная оболочка ― это SSL-сертификат. Такое сотрудничество создаёт безопасное HTTPS-соединение.
Данные вашего сайта под защитой
Установите SSL-сертификат, и ваш сайт будет работать по безопасному соединению HTTPS
Заказать SSL
Ключи шифрования
Кроме подтверждения подлинности сайта, SSL-сертификат шифрует данные. После того как браузер убедился в подлинности сайта, начинается обмен шифрами. Шифрование HTTPS происходит при помощи симметричного и асимметричного ключа. Вот что это значит:
- Асимметричный ключ — каждая сторона имеет два ключа: публичный и частный. Публичный ключ доступен любому. Частный известен только владельцу. Если браузер хочет отправить сообщение, то он находит публичный ключ сервера, шифрует сообщение и отправляет на сервер. Далее сервер расшифровывает полученное сообщение с помощью своего частного ключа. Чтобы ответить пользователю, сервер делает те же самые действия: поиск публичного ключа собеседника, шифрование, отправка.
- Симметричный ключ — у обеих сторон есть один ключ, с помощью которого они передают данные.
Между двумя сторонами уже должен быть установлен первичный контакт, чтобы браузер и сервер знали, на каком языке общаться.
Чтобы установить HTTPS-соединение, браузеру и серверу надо договориться о симметричном ключе. Для этого сначала браузер и сервер обмениваются асимметрично зашифрованными сообщениями, где указывают секретный ключ и далее общаются при помощи симметричного шифрования.
Итак, какова функция протокола HTTPS?
- Шифрование. Информация передаётся в зашифрованном виде. Благодаря этому злоумышленники не могут украсть информацию, которой обмениваются посетители сайта, а также отследить их действия на других страницах.
- Аутентификация. Посетители уверены, что переходят на официальный сайт компании, а не на дубликат, сделанный злоумышленником.
- Сохранение данных. Протокол фиксирует все изменения данных. Если злоумышленник всё-таки пытался взломать защиту, об этом можно узнать из сохранённых данных.
Также стоит упомянуть, какой порт используется протоколом HTTPS по умолчанию. HTTPS использует для подключения 443 порт — его не нужно дополнительно настраивать
Схема работы HTTPS
Итак, протокол HTTPS предназначен для безопасного соединения. Чтобы понять, как устанавливается это соединение и как работает HTTPS, рассмотрим механизм пошагово.
Для примера возьмём ситуацию: пользователь хочет перейти на сайт REG.RU, который работает по безопасному протоколу HTTPS.
- Браузер пользователя просит предоставить SSL-сертификат.
- Сайт на HTTPS отправляет сертификат.
- Браузер проверяет подлинность сертификата в центре сертификации.
- Браузер и сайт договариваются о симметричном ключе при помощи асимметричного шифрования.
- Браузер и сайт передают зашифрованную информацию. Как работает HTTPS протокол
Зачем устанавливать HTTPS
Как мы говорили ранее, главная задача HTTPS — обеспечение безопасности передачи данных. Однако существует ещё несколько причин перейти на защищённое соединение:
- Отметка о небезопасности сайта.
На данный момент Google и Яндекс хоть и позволяют пользователям открывать сайты по HTTP, но считают их небезопасными и предупреждают об этом в адресной строке браузера. Это может быть надпись «Не защищено» или красный восклицательный знак. Обозначение может отличаться в зависимости от браузера: Незащищённое соединение в Google Chrome
Незащищённое соединение в Яндекс.Браузере
Визуальное обозначение привлекает внимание пользователей и заставляет отказаться от посещения сайта, поэтому есть риск потерять потенциальных клиентов.
- Доверие. Сайты, которые заботятся о данных пользователей, вызывают доверие со стороны клиентов. Это добавляет лояльности аудитории.
- SEO-оптимизация. Поисковые системы с недоверием относятся к сайтам, работающим по HTTP-протоколу. Даже при грамотной SEO-оптимизации можно не достичь желаемых показателей.
Сайты не обязаны работать исключительно по HTTPS-протоколу. Однако защита данных ― это важный элемент современной интернет-коммуникации. Когда сайт работает по небезопасному соединению, в браузере может отображаться ошибка «Подключение не защищено». Если вы пользователь, и встретили такое сообщение на просторах интернета, лучше покиньте небезопасный ресурс. Как исправить ошибку «Ваше подключение не защищено», если вы владелец сайта? Не стоит пренебрегать безопасностью клиентов, которые доверяют организациям свои личные данные. Закажите SSL-сертификат и переведите сайт на безопасное соединение HTTPS. Если вы уже выполняли эти настройки ранее, но на сайте всё равно сообщение об ошибке, следуйте инструкции.
Защитите данные с помощью SSL
Защитите данные на вашем сайте от мошенников. Установите SSL-сертификат, чтобы сайт работал по HTTPS-протоколу.
Заказать SSL
Помогла ли вам статья?
Да
40 раз уже помогла
Правительство России
Правительство России Варианты поиска по сайтуЗакрыть
Следующая новость
Предыдущая новость
- Маленький размер шрифта
- Нормальный размер шрифта
- Большой размер шрифта
- Включить/выключить отображение изображений Вкл Выкл
Правительство России
- Демография
- Здоровье
- Образование
- Культура
- Общество
- Государство
- Занятость и труд
- Технологическое развитие
- Экономика.
Регулирование
- Финансы
- Социальные услуги
- Экология
- Жильё и города
- Транспорт и связь
- Энергетика
- Промышленность
- Сельское хозяйство
- Региональное развитие
- Дальний Восток
- Россия и мир
- Безопасность
- Право и юстиция
Работа Правительства
- Общие вопросы реализации национальных проектов
- Национальный проект «Здравоохранение»
- Национальный проект «Образование»
- Национальный проект «Демография»
- Национальный проект «Культура»
- Национальный проект «Безопасные качественные дороги»
- Национальный проект «Жильё и городская среда»
- Национальный проект «Экология»
- Национальный проект «Наука и университеты»
- Национальный проект «Малое и среднее предпринимательство и поддержка индивидуальной предпринимательской инициативы»
- Национальный проект «Производительность труда»
- Национальный проект «Международная кооперация и экспорт»
- Национальная программа «Цифровая экономика Российской Федерации»
- Национальный проект «Туризм и индустрия гостеприимства»
- Комплексный план модернизации и расширения магистральной инфраструктуры
Внимание! Вы используете устаревшую версию браузера. Для корректной работы сайта установите новую версию браузера.
- Chrome
- Firefox
- Internet Explorer
- Opera
- Safari
Отправить письмо ∙ Обращения граждан
Написать письмоПоля, отмеченные *, обязательны для заполнения
Информация о персональных данных авторов обращений, направленных в электронном виде, хранится и обрабатывается с соблюдением требований российского законодательства о персональных данных.
В электронной анкете в Вашем обращении укажите:
кому Вы его направляете или куда Вы его направляете
Президенту Российской Федерации в Администрацию Президента Российской Федерации должностному лицу Администрации Президента Российской Федерации
Выберите из списка
Руководителю Администрации Президента Вайно Антону ЭдуардовичуПервому заместителю Руководителя Администрации Президента Громову Алексею АлексеевичуПервому заместителю Руководителя Администрации Президента Кириенко Сергею ВладиленовичуЗаместителю Руководителя Администрации Президента Козаку Дмитрию НиколаевичуЗаместителю Руководителя Администрации Президента Магомедову Магомедсаламу МагомедалиевичуЗаместителю Руководителя Администрации Президента Островенко Владимиру ЕвгеньевичуЗаместителю Руководителя Администрации Президента – пресс-секретарю Президента Пескову Дмитрию СергеевичуРуководителю протокола Президента Китаеву Владиславу НиколаевичуПомощнику Президента – начальнику Государственно-правового управления Президента Брычёвой Ларисе ИгоревнеПомощнику Президента — начальнику Референтуры Президента Калимулину Дмитрию РафаэльевичуПомощнику Президента Левитину Игорю ЕвгеньевичуПомощнику Президента Мединскому Владимиру РостиславовичуПомощнику Президента Миронову Дмитрию ЮрьевичуПомощнику Президента Орешкину Максиму СтаниславовичуПомощнику Президента Ушакову Юрию ВикторовичуПомощнику Президента Фурсенко Андрею АлександровичуПомощнику Президента – начальнику Контрольного управления Президента Шалькову Дмитрию ВладиславовичуСоветнику Президента Кобякову Антону АнатольевичуСоветнику Президента Левицкой Александре ЮрьевнеСоветнику Президента Толстому Владимиру ИльичуСоветнику Президента – председателю Совета по развитию гражданского общества и правам человека Фадееву Валерию АлександровичуСоветнику Президента, специальному представителю Президента по вопросам климата Эдельгериеву Руслану Сайд-ХусайновичуСпециальному представителю Президента по вопросам природоохранной деятельности, экологии и транспорта Иванову Сергею БорисовичуПолномочному представителю Президента в Конституционном Суде Коновалову Александру ВладимировичуПолномочному представителю Президента в Государственной Думе Минху Гарри ВладимировичуПолномочному представителю Президента в Совете Федерации Муравьёву Артуру АлексеевичуПолномочному представителю Президента в Северо-Западном федеральном округе Гуцану Александру ВладимировичуПолномочному представителю Президента в Приволжском федеральном округе Комарову Игорю АнатольевичуПолномочному представителю Президента в Сибирском федеральном округе Серышеву Анатолию АнатольевичуЗаместителю Председателя Правительства – полномочному представителю Президента в Дальневосточном федеральном округе Трутневу Юрию ПетровичуПолномочному представителю Президента в Южном федеральном округе Устинову Владимиру ВасильевичуПолномочному представителю Президента в Уральском федеральном округе Якушеву Владимиру ВладимировичуПолномочному представителю Президента в Северо-Кавказском федеральном округе Чайке Юрию ЯковлевичуПолномочному представителю Президента в Центральном федеральном округе Щёголеву Игорю ОлеговичуНачальнику Управления Президента по внешней политике Неверову Игорю СвятославовичуНачальнику Управления Президента по внутренней политике Ярину Андрею ВениаминовичуНачальнику Управления Президента по вопросам государственной службы и кадров Травникову Максиму АлександровичуНачальнику Управления Президента по государственным наградам Осипову Владимиру БорисовичуНачальнику Управления Президента по обеспечению конституционных прав граждан Локаткиной Татьяне АлександровнеНачальнику Управления информационного и документационного обеспечения Президента Фёдорову Антону ЮрьевичуНачальнику Управления Президента по работе с обращениями граждан и организаций Михайловскому Михаилу ГеннадьевичуНачальнику Управления пресс-службы и информации Президента Цыбулину Андрею МихайловичуНачальнику Управления протокола Президента Куликовой Анне АлександровнеНачальнику Управления Президента по общественным связям и коммуникациям Смирнову Александру ЮрьевичуНачальнику Экспертного управления Президента Симоненко Владимиру АлександровичуНачальнику Управления Президента по обеспечению деятельности Государственного совета Российской Федерации Харичеву Александру ДмитриевичуНачальнику Управления Президента по научно-образовательной политике Биленкиной Инне ПетровнеНачальнику Управления Президента по развитию информационно-коммуникационных технологий и инфраструктуры связи Матвеевой Татьяне ВладимировнеНачальнику Управления Президента по общественным проектам Новикову Сергею ГеннадьевичуНачальнику Управления Президента по вопросам противодействия коррупции Чоботову Андрею Сергеевичу
В электронной анкете в Вашем обращении укажите в именительном падеже Ваши:
Фамилию *
Имя *
Отчество (при наличии) *
Отчество отсутствует
Наименование организации (юридического лица)
В электронной анкете в Вашем обращении укажите:
адрес электронной почты, по которому должны быть направлены ответ, уведомление о переадресации Вашего обращения (необходимо указывать адрес электронной почты, который принадлежит только Вам, для обеспечения неразглашения сведений, содержащихся в Вашем обращении, а также сведений, касающихся Вашей частной жизни, без Вашего согласия) *
Кабинет с таким адресом электронной почты уже зарегистрирован. Чтобы иметь возможность отслеживать статус отправляемого сообщения, пожалуйста, войдите в личный кабинет, используя пароль
Пароль
Повторите адрес электронной почты для автоматической проверки правильности его заполнения
Номер телефона
Напишите текст обращения
В соответствии с частью 1 статьи 7 Федерального закона от 2 мая 2006 года № 59-ФЗ «О порядке рассмотрения обращений граждан Российской Федерации» гражданин в своём обращении в обязательном порядке излагает суть предложения, заявления или жалобы.
Обращаем Ваше внимание, что в целях объективного и всестороннего рассмотрения Вашего обращения в установленные сроки необходимо в тексте обращения указывать адрес описанного Вами места действия, факта или события.
В случае, если текст Вашего обращения не позволяет определить суть предложения, заявления или жалобы, ответ на обращение не дается и оно не подлежит направлению на рассмотрение в государственный орган, орган местного самоуправления или должностному лицу, в соответствии с их компетенцией, о чем Вам будет сообщено в течение семи дней со дня регистрации обращения.
Обращаем Ваше внимание, что при написании текста обращения в форме электронного документа в поле ввода текста обращения в форме электронного документа для изложения сути предложения, заявления или жалобы отсутствует ограничение по вводимому количеству символов.
В поле ввода текста обращения в форме электронного документа в Вашем обращении:
изложите суть предложения, заявления или жалобы *
В случае необходимости в подтверждение своих доводов гражданин вправе приложить к обращению необходимые документы и материалы в электронной форме, воспользовавшись функцией «Прикрепить файл».
Обращаем внимание, что прикрепляемые в предложенном на сайте формате документы и материалы служат лишь подтверждением доводов автора обращения, изложенных в тексте обращения.
Приложить необходимые документы и материалы в электронной форме можно в любой последовательности двумя самостоятельными вложениями файла без архивирования (файл вложения) по одному из двух разных типов допустимых форматов:
текстового (графического) формата: txt, doc, docx, rtf, xls, xlsx, pps, ppt, odt, ods, odp, pub, pdf, jpg, jpeg, bmp, png, tif, gif, pcx;
аудио- (видео-) формата: mp3, wma, avi, mp4, mkv, wmv, mov, flv.
Иные форматы не обрабатываются в информационных системах Администрации Президента Российской Федерации.
При подключении оборудования пользователя к сети «Интернет» по выделенным каналам связи с использованием технологий ADSL, 3G, 4G, WiFi и иных технологий, обеспечивающих аналогичные скорости передачи данных в сети «Интернет», передача и обработка файла(ов) с суммарным размером:
— до 5 Мб осуществляется, как правило, без задержки во времени;
— от 5 Мб до 10 Мб может осуществляться с задержкой во времени;
— свыше 10 Мб может быть не осуществлена.
Для приложения к обращению необходимых документов и материалов в электронной форме нажмите кнопку «Прикрепить файл(ы)».
Прикрепить файл(ы)
Прикрепить файл(ы)
Обращаем Ваше внимание, что подтверждением прикрепления файла(ов) вложения является появление строки с наименованием(ями) выбранного(ых) Вами файла(ов).
В случае успешной отправки с гарантией доставки письма в электронной форме появляется информационное сообщение, содержащее дату и номер отправления ID.

«Большое спасибо!
Отправленное дд.мм.гггг Вами письмо в электронной форме за номером ID=ХХХХХХ будет доставлено и с момента поступления в Администрацию Президента Российской Федерации зарегистрировано в течение трех дней.».
Если всё верно, нажмите «Отправить письмо» ещё раз, в противном случае нажмите «Вернуться» для редактирования формы.
Адресат
Вы указали :
Фамилия, имя, отчество
Адрес электронной почты
Страна
Регион
Почтовый индекс
Населённый пункт
Обратный адрес
Телефон
Социальное положение
Льготный состав
Тематика обращения
Прикреплённый файлПрикреплённые файлы
Второй вопрос
Тематика обращения
Прикреплённый файл
Вернуться
В чем разница между веб-страницей, веб-сайтом, веб-сервером и поисковой системой? — Изучите веб-разработку
В этой статье мы опишем различные концепции, связанные с Интернетом: веб-страницы, веб-сайты, веб-серверы и поисковые системы. Эти термины часто путают новички в Интернете или используют их неправильно. Давайте узнаем, что они означают!
Предпосылки: | Ты должен знать как работает интернет. |
---|---|
Цель: | Уметь описать различия между веб-страницей, веб-сайтом, веб-сайтом. сервер и поисковая система. |
Как и в любой области знаний, в Интернете много жаргона. Не волнуйся. Мы не будем перегружать вас всем этим (у нас есть глоссарий, если вам интересно). Тем не менее, есть несколько основных терминов, которые вам нужно понять с самого начала, так как вы будете постоянно слышать эти выражения по мере чтения. Эти термины легко смешивать, поскольку они относятся к связанным, но разным функциям. Иногда вы увидите, что эти термины неправильно используются в новостях и других источниках, так что их путаница понятна.
Мы рассмотрим эти термины и технологии более подробно по мере дальнейшего изучения, но эти краткие определения будут для вас отличным началом:
- веб-страница
Документ, который может отображаться в веб-браузере, таком как Firefox, Google Chrome, Opera, Microsoft Internet Explorer или Edge, или Apple Safari.
Их также часто называют просто «страницами».
- сайт
Набор веб-страниц, которые сгруппированы и обычно связаны друг с другом различными способами. Часто называется «веб-сайтом» или «сайтом».
- веб-сервер
Компьютер, на котором размещен веб-сайт в Интернете.
- поисковая система
Веб-служба, помогающая находить другие веб-страницы, такие как Google, Bing, Yahoo или DuckDuckGo. Доступ к поисковым системам обычно осуществляется через веб-браузер (например, вы можете выполнять поиск в поисковых системах непосредственно в адресной строке Firefox, Chrome и т. д.) или через веб-страницу (например, bing.com или duckduckgo.com).
Возьмем простую аналогию — публичная библиотека. Вот что вы обычно делаете при посещении библиотеки:
- Найдите индекс поиска и найдите название книги, которую вы хотите.
- Запишите каталожный номер книги.
- Перейдите в конкретный раздел с книгой, найдите нужный каталожный номер и получите книгу.
Сравним библиотеку с веб-сервером:
- Библиотека похожа на веб-сервер. Он имеет несколько разделов, что похоже на веб-сервер, на котором размещено несколько веб-сайтов.
- Различные разделы (наука, математика, история и т. д.) в библиотеке похожи на веб-сайты. Каждый раздел похож на уникальный сайт (два раздела не содержат одни и те же книги).
- Книги в каждом разделе похожи на веб-страницы. На одном сайте может быть несколько страниц, например, в разделе «Наука» (сайт) будут книги по теплу, звуку, термодинамике, статике и т. д. (страницы). Каждая веб-страница может быть найдена в уникальном месте (URL).
- Поисковый индекс похож на поисковую систему. Каждая книга имеет свое уникальное место в библиотеке (две книги не могут храниться в одном месте), которое определяется каталожным номером.
Активное обучение пока недоступно. Пожалуйста, подумайте над тем, чтобы внести свой вклад.
Итак, давайте углубимся в то, как связаны эти четыре термина и почему их иногда путают друг с другом.
Веб-страница
Веб-страница — это простой документ, отображаемый браузером. Такие документы пишутся на языке HTML (более подробно мы рассмотрим его в других статьях). Веб-страница может включать множество различных типов ресурсов, таких как:
- информация о стиле — управление внешним видом страницы
- скрипты — которые добавляют интерактивности странице
- медиа — изображения, звуки и видео.
Примечание: Браузеры также могут отображать другие документы, такие как PDF-файлы или изображения, но термин веб-страница конкретно относится к HTML-документам. В противном случае мы используем только термин документ .
Все веб-страницы, доступные в Интернете, доступны по уникальному адресу. Чтобы получить доступ к странице, просто введите ее адрес в адресной строке браузера:
Веб-сайт
Веб-сайт представляет собой набор связанных веб-страниц (плюс связанные с ними ресурсы), которые имеют общее уникальное доменное имя. Каждая веб-страница данного веб-сайта содержит явные ссылки — в большинстве случаев в виде фрагментов текста, на которые можно щелкнуть, — которые позволяют пользователю переходить с одной страницы веб-сайта на другую.
Чтобы получить доступ к веб-сайту, введите его доменное имя в адресной строке браузера, и браузер отобразит главную веб-страницу веб-сайта, или домашняя страница (обычно называемая «домашней»):
Идеи веб-страницы и веб-сайта особенно легко спутать с веб-сайтом , который содержит только одну веб-страницу . Такой веб-сайт иногда называют одностраничным веб-сайтом.
Веб-сервер
Веб-сервер — это компьютер, на котором размещен один или несколько веб-сайтов . «Хостинг» означает, что все веб-страниц и их вспомогательные файлы доступны на этом компьютере. 9Веб-сервер 0075 отправит любую веб-страницу с веб-сайта , который он размещает, в браузер любого пользователя по запросу пользователя.
Не путайте веб-сайты и веб-серверы . Например, если вы слышите, как кто-то говорит: «Мой веб-сайт не отвечает», на самом деле это означает, что веб-сервер не отвечает, и поэтому веб-сайт недоступен. Что еще более важно, поскольку на веб-сервере может размещаться несколько веб-сайтов, термин веб-сервер никогда не используется для обозначения веб-сайта, так как это может вызвать большую путаницу. В нашем предыдущем примере, если мы сказали «Мой веб-сервер не отвечает», это означает, что несколько веб-сайтов на этом веб-сервере недоступны.
Поисковая система
Поисковые системы часто являются источником путаницы в Интернете. Поисковая система — это особый тип веб-сайта, который помогает пользователям находить веб-страницы с других веб-сайтов.
Их много: Google, Bing, Yandex, DuckDuckGo и многие другие. Некоторые из них являются общими, некоторые специализированы по определенным темам. Используйте то, что вы предпочитаете.
Многие новички в Интернете путают поисковые системы и браузеры. Давайте проясним: браузер — это программа, которая извлекает и отображает веб-страницы; поисковая система — это веб-сайт, который помогает людям находить веб-страницы с других веб-сайтов. Путаница возникает из-за того, что при первом запуске браузера браузер отображает домашнюю страницу поисковой системы. Это имеет смысл, потому что, очевидно, первое, что вы хотите сделать с браузером, — это найти веб-страницу для отображения. Не путайте инфраструктуру (например, браузер) со службой (например, поисковой системой). Различие поможет вам немного, но даже некоторые профессионалы говорят расплывчато, так что не беспокойтесь об этом.
Вот пример Firefox, показывающий окно поиска Google в качестве стартовой страницы по умолчанию:
- Копните глубже: что такое веб-сервер
- Посмотрите, как веб-страницы связаны с веб-сайтом: понимание ссылок в Интернете
Последнее изменение: , участниками MDN
Что такое веб-страница — Javatpoint
следующий → ← предыдущая Веб-страница — это отдельный гипертекстовый документ, доступный во всемирной паутине (WWW). Он состоит из элементов HTML и отображается в браузере пользователя, таком как Mozilla, Firefox, Chrome и т. д. Его также называют « Страница». В этой теме мы собираемся обсудить различные детали веб-страницы, включая следующие темы:
Что такое веб-страница? Веб-страница — это документ, написанный в формате HTML, который можно просмотреть в любом веб-браузере. Он содержится на веб-сервере, доступ к которому можно получить, введя URL-адрес этой веб-страницы, и после загрузки он появляется в веб-браузере пользователя. Веб-страница может содержать текст, ссылки на другие страницы, графика, видео и т. д. . Более того, он в основном используется для предоставления информации пользователю в виде текста, изображений и т. д. Веб-страница является частью веб-сайта; это означает, что веб-сайт содержит разные веб-страницы. Например, javaTpoint.com — это веб-сайт, а страница, на которую вы в данный момент обращаетесь, — это веб-страница. Это можно понять как пример книги. Итак, веб-сайт подобен полной книге, а веб-страница — странице этой книги. WWW или Интернет содержат миллионы веб-страниц, и ежедневно их количество увеличивается. Тим Бернерс-Ли разработал первую веб-страницу. Давайте разберемся с некоторыми основными терминами, которые используются с веб-страницей:
Примечание. Для практики вы можете создавать веб-страницы самостоятельно без использования веб-сервера, и ваш браузер будет отображать эти страницы только на вашем компьютере.
Примечание. Веб-браузер также может отображать другие документы, такие как PDF-документ или изображения, но только HTML-документ называется веб-страницей.![]() Характеристики веб-страницыНиже приведены некоторые характеристики веб-страницы:
Разница между веб-страницей и веб-сайтом Поскольку и веб-сайты, и веб-страницы связаны друг с другом, некоторые пользователи могут использовать их взаимозаменяемо, но они сильно отличаются друг от друга.
Примечание. Термины «Веб-страница» и «Веб-страница» одинаковы, и оба они технически правильны. Однако большинство руководств по стилю предлагают использовать веб-страницу вместо веб-страницы.Как работает веб-страница? Простая веб-страница создается с использованием языка разметки HTML. Он создан с использованием HTML, поэтому содержит различные теги разметки, которые определяют, как данные должны быть отформатированы на экране. Веб-страница находится на веб-сервере. Чтобы загрузить эту веб-страницу, клиент отправляет запрос на сервер, и обычно браузер называется клиентом, который может запрашивать страницу в Интернете. Веб-браузер запрашивает страницу в Интернете. Как только сервер отвечает на него, браузер интерпретирует теги разметки и отображает их на экране пользователя в правильном формате. Браузер отправляет запрос страницы или файла через HTTP-запрос. HTTP — это протокол передачи гипертекста , сетевой протокол, который позволяет передавать гипермедиа-документы через Интернет между браузером и сервером. Как только запрос достигает сервера, HTTP-сервер принимает запрос, находит запрошенную страницу и отправляет ее обратно в браузер через HTTP-ответ . Элементы веб-страницыОсновным элементом веб-страницы является текстовый файл, составленный из HTML. Кроме того, веб-страница может иметь следующие элементы:
Хотя каждая веб-страница отличается от другой веб-страницы, некоторые компоненты являются общими почти для всех страниц. Некоторые из этих компонентов приведены ниже; вы также можете связать эти элементы по данному изображению:
Также может быть некоторая дополнительная информация и инструменты, такие как кнопка для печати страницы, которая также может быть полезна для пользователей. Типы веб-страницСуществует два основных типа веб-страниц в зависимости от функциональности:
Статическая веб-страница Статические веб-страницы — это те веб-страницы, которые не могут быть изменены или изменены клиентом. Они также известны как стационарные или плоские веб-страницы. Они отображаются в браузере клиента в том же формате и в том же виде, в каком они сохраняются на веб-сервере. Пользователи могут только загружать страницу и читать информацию, но не могут вносить какие-либо изменения на странице. Статическая веб-страница обычно состоит только из HTML и CSS. Динамическая веб-страницаКак следует из названия, динамические веб-страницы являются динамическими, что означает отображение различной информации в разное время. Динамическая веб-страница показывает разное содержимое при каждом просмотре. Существует два типа динамических веб-страниц:
Примечание. Языки сценариев — это языки программирования, которые позволяют нам писать программы в виде сценариев, которые интерпретируются, а не компилируются.Помимо этих двух веб-страниц, есть несколько примеров общих веб-страниц, которые можно найти на большинстве веб-сайтов, а именно:
Как создать простую веб-страницу?Создать простую веб-страницу очень просто; любой, у кого есть базовые знания компьютеров и HTML, может создать его. Но прежде чем создавать веб-страницу, вы должны знать о следующих пунктах:
![]() Чтобы создать веб-страницу, выполните следующие действия:
<голова> первая веб-страницаЭто моя первая веб-страница! В приведенном выше коде используются следующие теги:
Примечание. Важно заканчивать каждый тег в html и помещать все теги либо в верхний, либо в нижний регистр. Однако рекомендуется использовать нижний регистр.
Вы также можете добавить больше тегов для различных элементов, таких как добавление изображений, фоновых изображений, границ, таблиц, таблиц и т. д., используя HTML. Вы можете узнать все это отсюда. Примечание. Эта веб-страница является локальной только для вашего компьютера, и только вы можете видеть ее в своем браузере. Чтобы просмотреть это в Интернете, вам нужно сначала опубликовать его.![]() После создания страницы вы также можете внести изменения в свой файл через редактор. Просто внесите изменения, снова сохраните файл и перезагрузите страницу; эти изменения появятся на экране. Следующая темаСварка ← предыдущая следующий → |
Примеры VirtualHost — HTTP-сервер Apache версии 2.4
HTTP-сервер Apache версии 2.4
Доступные языки: en | фр | я | ко | tr
В этом документе делается попытка ответить на часто задаваемые вопросы о настройка виртуальных хостов. Эти сценарии включают несколько веб-сайты, работающие на одном сервере, через виртуальные хосты на основе имени или IP.
- Запуск нескольких веб-сайтов на основе имен сайты на одном IP-адресе.
- Узлы на основе имени более чем на одном Айпи адрес.
- Подача одного и того же контента на различные IP-адреса (например, внутренний и внешний адрес).
- Запуск разных сайтов на разных
порты.
- Виртуальный хостинг на базе IP
- Смешанный виртуальный порт и IP-адрес хосты
- Комбинация на основе имени и IP-адреса виртуальные хосты
- Использование
Virtual_host
и mod_proxy вместе - Использование
_по умолчанию_
виртуальные хосты - Миграция виртуального хоста на основе имени на vhost 9 на основе IP0056
- Использование
ServerPath
директива
См. также
- Комментарии
На вашем сервере несколько имен хостов, которые разрешаются в один адрес,
и вы хотите по-другому ответить на www.example.com
и www.example.org
.
Примечание
Создание виртуального
конфигурации хоста на вашем сервере Apache не волшебным образом
привести к созданию записей DNS для этих имен хостов. Ты должны иметь имена в DNS, разрешающие ваш IP
адрес, иначе никто другой не сможет увидеть ваш веб-сайт. Ты
может поместить записи в ваш файл
hosts
для локального
тестирование, но это будет работать только с машины с теми содержит
записей.
# Убедитесь, что Apache прослушивает порт 80 Слушай 80 <Виртуальный хост *:80> DocumentRoot "/www/example1" Имя сервера www.example.com # Другие директивы здесь <Виртуальный хост *:80> DocumentRoot "/www/example2" Имя сервера www.example.org # Другие директивы здесь
Звездочки соответствуют всем адресам, поэтому главный сервер не обслуживает
Запросы. В связи с тем, что виртуальный хост с ServerName www.example.com
— первый
в конфигурационном файле он имеет наивысший приоритет и его можно увидеть
как по умолчанию или первичный сервер . Это означает
что в случае получения запроса, не соответствующего одному из указанных ServerName
директив, он будет обслуживаться первым <Виртуальный хост>
.
Приведенная выше конфигурация — это то, что вы захотите использовать почти все ситуации виртуального хостинга на основе имени. Единственное, что это конфигурация не будет работать, по сути, это когда вы подаете различный контент на основе разных IP-адресов или портов.
Примечание
Вы можете заменить *
на определенный IP-адрес
в системе. Такие виртуальные хосты будут использоваться только для
HTTP-запросы, полученные при подключении к указанному IP-адресу
адрес.
Однако дополнительно полезно использовать *
в системах, где IP-адрес непредсказуем — для
например, если у вас есть динамический IP-адрес с вашим интернет-провайдером, и
вы используете какое-то разнообразие динамических DNS-решений. С *
соответствует любому IP-адресу, эта конфигурация
будет работать без изменений всякий раз, когда ваш IP-адрес
изменения.
Примечание
Любой из обсуждаемых здесь методов можно распространить на любой количество IP-адресов.
Сервер имеет два IP-адреса. На одном ( 172.20.30.40
) мы
будет обслуживать «основной» сервер, server.example.com
и на
другой ( 172.20.30.50
), мы будем обслуживать два или более виртуальных хоста.
Прослушать 80 # Это "основной" сервер, работающий по адресу 172.20.30.40. имя_сервера server.example.com DocumentRoot "/www/mainserver" <Виртуальный хост 172.20.30.50> DocumentRoot "/www/example1" Имя сервера www.example.com # Другие директивы здесь... <Виртуальный хост 172.20.30.50> DocumentRoot "/www/example2" Имя сервера www.example.org # Другие директивы здесь...
Любой запрос на адрес, отличный от 172.20.30.50
, будет
обслуживается с основного сервера. Запрос на номер 172.20.30.50
с
неизвестное имя хоста или заголовок Host:
будет обслуживаться с www.
. example.com
Сервер имеет два IP-адреса ( 192.168.1.1
и 172.20.30.40
). Машина стоит между
внутренняя (интранет) сеть и внешняя (интернет) сеть. Снаружи
сети, имя server.example.com
разрешается в
внешний адрес ( 172.20.30.40
), но внутри
сети, то же имя разрешается во внутренний адрес
( 192.168.1.1
).
Сервер может отвечать на внутренние и внешние запросы
с тем же содержимым, только с одним разделом
.
<Виртуальный хост 192.168.1.1 172.20.30.40> DocumentRoot "/www/server1" имя_сервера server.example.com ServerAlias сервер
Теперь запросы из обеих сетей будут обслуживаться из одного <Виртуальный хост>
.
Примечание:
На внутренней
сети, можно просто использовать имя server
вместо
чем полное имя хоста server.
. example.com
Также обратите внимание, что в приведенном выше примере вы можете заменить список
IP-адресов с *
, что приведет к тому, что сервер
отвечают одинаково на все адреса.
У вас есть несколько доменов, подключенных к одному и тому же IP, и вы также хотите обслуживать несколько портов. В приведенном ниже примере показано, что сопоставление имен происходит после наилучшего совпадения IP-адреса и комбинации портов определен.
Прослушать 80 Слушай 8080 <Виртуальный хост 172.20.30.40:80> Имя сервера www.example.com DocumentRoot "/www/домен-80" <Виртуальный хост 172.20.30.40:8080> Имя сервера www.example.com DocumentRoot "/www/домен-8080" <Виртуальный хост 172.20.30.40:80> Имя сервера www.example.org DocumentRoot "/www/otherdomain-80" <Виртуальный хост 172.20.30.40:8080> Имя сервера www.example.org DocumentRoot "/www/otherdomain-8080"
Сервер имеет два IP-адреса ( 172.
и 20.30.40
172.20.30.50
), которые разрешаются в имена www.example.com
и www.example.org
соответственно.
Прослушать 80 <Виртуальный хост 172.20.30.40> DocumentRoot "/www/example1" Имя сервера www.example.com <Виртуальный хост 172.20.30.50> DocumentRoot "/www/example2" Имя сервера www.example.org
Запросы на любой адрес, не указанный ни в одном из
директивы (например, localhost
, например) пойдет на основной сервер, если
есть один.
Сервер имеет два IP-адреса ( 172.20.30.40
и 172.20.30.50
), которые разрешаются в имена www.example.com
и www.example.org
соответственно. В каждом случае мы хотим запускать хосты на портах 80 и
8080.
Прослушивание 172.20.30.40:80 Прослушать 172.20.30.40:8080 Слушай 172.20.30.50:80 Прослушать 172.20.30.50:8080 <Виртуальный хост 172.20.30.40:80> DocumentRoot "/www/example1-80" Имя сервера www.example.com <Виртуальный хост 172.20.30.40:8080> DocumentRoot "/www/example1-8080" Имя сервера www.example.com <Виртуальный хост 172.20.30.50:80> DocumentRoot "/www/example2-80" Имя сервера www.example.org <Виртуальный хост 172.20.30.50:8080> DocumentRoot "/www/example2-8080" Имя сервера www.example.org
Любой адрес, упомянутый в аргументе виртуального хоста, который никогда не появляется на другом виртуальном хосте, является виртуальным хостом строго на основе IP.
Прослушать 80 <Виртуальный хост 172.20.30.40> DocumentRoot "/www/example1" Имя сервера www.example.com <Виртуальный хост 172.20.30.40> DocumentRoot "/www/example2" Имя сервера www.example.org <Виртуальный хост 172.20.30.40> DocumentRoot "/www/example3" Имя сервера www.example.net # на базе IP <Виртуальный хост 172.20.30.50> DocumentRoot "/www/example4" Имя сервера www.example.edu <Виртуальный хост 172.20.30.60> DocumentRoot "/www/example5" Имя сервера www.example.gov
В следующем примере внешний компьютер позволяет проксировать
виртуального хоста на сервер, работающий на другой машине. в
пример, на машине настроен одноименный виртуальный хост
по телефону 192.168.111.2
. ProxyPreserveHost
Директива On
используется, чтобы желаемое имя хоста было
пропущено, в случае, если мы проксируем несколько имен хостов на
одиночная машина.
<Виртуальный хост *:*> ProxyPreserveHost включен ПроксиПасс "/" "http://192.168.111,2/" ProxyPassReverse "/" "http://192.168.111.2/" имя_сервера имя_хоста.example.com
_default_
виртуальные хосты
для всех портов Перехват каждого запроса на любой неуказанный IP-адрес и
порт, т. е. , комбинация адреса/порта, которая не используется для
любой другой виртуальный хост.
<Виртуальный хост _по умолчанию_:*> DocumentRoot "/www/по умолчанию"
Использование такого виртуального хоста по умолчанию с подстановочным портом эффективно предотвращает любой запрос, идущий на главный сервер.
Виртуальный хост по умолчанию никогда не обслуживает запрос, отправленный
адрес/порт, который используется для виртуальных хостов на основе имени. Если запрос
содержит неизвестный или отсутствует заголовок Host:
, он всегда
обслуживается с основного виртуального хоста на основе имени (виртуального хоста для этого
адрес/порт, указанный первым в файле конфигурации).
Вы можете использовать AliasMatch
или RewriteRule
для перезаписи любого
запрос на единую информационную страницу (или скрипт).
_по умолчанию_
виртуальные хосты
для разных портов То же, что и настройка 1, но сервер прослушивает несколько портов, и мы хотим
использовать второй виртуальный хост _default_
для порта 80.
DocumentRoot "/www/default80" # ... <Виртуальный хост _default_:*> DocumentRoot "/www/по умолчанию" # ...
Виртуальный хост по умолчанию для порта 80 (который должен стоять перед любым vhost по умолчанию с портом подстановочного знака) перехватывает все отправленные запросы на неопределенный IP-адрес. Главный сервер никогда не используется для обслуживания запрос.
_по умолчанию_
виртуальные хосты
для одного портаМы хотим иметь vhost по умолчанию для порта 80, но не по умолчанию vhosts.
<Виртуальный хост _по умолчанию_:80> DocumentRoot "/www/по умолчанию" ...
Запрос на неуказанный адрес через порт 80 обслуживается из виртуальный хост по умолчанию. Любой другой запрос к неуказанному адресу и порту обслуживается с основного сервера.
Любое использование *
в объявлении виртуального хоста будет иметь
более высокий приоритет, чем _по умолчанию_
.
Виртуальный хост на основе имени с именем хоста www.example.org
(из нашего примера на основе имени, настройка 2) должен получить собственный IP-адрес
адрес. Во избежание проблем с DNS-серверами или прокси-серверами, кэшировавшими
старый IP-адрес для виртуального хоста на основе имени, который мы хотим предоставить как
вариантов на этапе миграции.
Решение простое, потому что мы можем просто добавить новый IP-адрес
( 172.20.30.50
) на виртуальный хост
директива.
Прослушать 80 Имя сервера www.example.com DocumentRoot "/www/example1" <Виртуальный хост 172.20.30.40 172.20.30.50> DocumentRoot "/www/example2" Имя сервера www.example.org # ... <Виртуальный хост 172.20.30.40> DocumentRoot "/www/example3" Имя сервера www.example.net Псевдоним сервера *.example.net # ...
Доступ к виртуальному хосту теперь можно получить через новый адрес (как
vhost на основе IP) и через старый адрес (как на основе имени
вхост).
У нас есть сервер с двумя виртуальными хостами на основе имен. Чтобы соответствовать
правильный виртуальный хост клиент должен отправить правильный хост :
заголовок. Старые клиенты HTTP/1.0 не отправляют такой заголовок, а у Apache
понятия не имею, к какому виртуальному хосту пытался подключиться клиент (и обслуживает запрос
с основного виртуального хоста). Чтобы обеспечить как можно большую обратную совместимость,
возможно, мы создадим основной виртуальный хост, который возвращает одну страницу
содержащие ссылки с префиксом URL на виртуальные
хосты. 9(/sub2/.*)» «/www/subdomain$1»
# …
Из-за ServerPath
директива запроса к URL http://www.sub1.domain.tld/sub1/
это всегда обслуживается с sub1-vhost.
Запрос к URL http://www.sub1.domain.tld/
только
обслуживается с sub1-vhost, если клиент отправил правильный
Хост : заголовок
. Если заголовок
Host:
не отправлен,
клиент получает информационную страницу от основного хоста.
Обратите внимание, что есть одна странность: запрос на http://www.sub2.domain.tld/sub1/
также обслуживается из
sub1-vhost, если клиент не отправил заголовок Host:
.
Директивы RewriteRule
используются для того, чтобы убедиться, что клиент, отправивший правильный Хост: заголовок
может использовать оба варианта URL, т.е. ,
с префиксом URL или без него.
Примечание:
Это не раздел вопросов и ответов. Комментарии, размещенные здесь, должны указывать на предложения по улучшению документации или сервера и могут быть удалены нашими модераторами, если они либо реализованы, либо считаются недействительными/не по теме. Вопросы о том, как управлять HTTP-сервером Apache, следует направлять либо на наш IRC-канал #httpd, на Libera.chat, либо в наши списки рассылки.
Примеры веб-сайтов
Предоставлено Мэри Савиной, Карлтонский колледж
http://sciencecases.lib.buffalo.edu/cs/ (Этот сайт может быть отключен. )
Домашняя страница Национального центра судебных дел Изучение преподавания в науке. Я нашел коллекцию тематических исследований и ресурсы в разделе «преподавание тематических исследований» наиболее полезными.
Собрано руководителями семинаров
Введение в тему «Погода и климат» (дополнительная информация)
Эта страница курса — еще один хороший пример того, как профессор уделяет время тому, чтобы сделать веб-сайт информативным и подробным.
Физическая геология
Онлайн-версия вводного курса с ясным дизайном и понятными пунктами.
Ледники и оледенение
Один из примеров того, как публиковать заметки из класса в удобочитаемой форме для печати.
Заметки и наглядные пособия по физической геологии
Этот сайт класса предоставляет в Интернете большое количество информации о классе.
Создайте свою собственную солнечную систему (подробнее)
Страница астрономии/планетологии. Сложный и увлекательный.
Атлас океанов Явы (подробнее)
Данные вертикального профиля океана и средство просмотра. Пример того, как разместить нужную информацию и инструменты в одном месте.
Энергетический баланс (подробнее)
Интерактивная анимация, демонстрирующая приток и отток воды как метафора потребления энергии. Хороший пример того, как позволить ученику поиграть с возможными ситуациями.
Ураганы: онлайн-справочник по метеорологии (подробнее)
Часть большой системы онлайн-справочников с отличной анимацией и подробными пояснениями.
Структура и поведение воды (LSBU)
Понятная навигация и легкодоступные разделы делают эту энциклопедическую страницу удобной для пользователя.
Глобальные климатические анимации
Эти климатические анимации помогают учащимся понять, что означает глобальная температура и как она себя ведет.
Понимание землетрясений
Предназначен для широкой публики, с некоторым акцентом на исторические отчеты. Включает простую анимацию для демонстрации движения плиты.
Кристаллография 101: Вводный курс
Обширный онлайн-курс с отличной навигацией. Этот сайт предназначен для тех, кто знаком с химией.
Введение в тектонику плит (дополнительная информация)
Краткое изложение основной темы с указанием основных моментов и описанием основных достижений, которые привели к существующей в настоящее время теории.
Путешествия с геологией
Виртуальная экскурсия в национальный парк Гранд-Титон. Еще один хороший пример упрощенной, но понятной нотации с отличными фотографиями.
Сайты, используемые на курсах дистанционного обучения геологии в Университете штата Канзас Предоставлено Тиби Марин
http://www.gsfc.nasa.gov
Сайт, посвященный изучению Динамической Земли, от тектоники плит до наук об атмосфере и планетах.
https://hubblesite. org/
Сайт, посвященный космическому телескопу Хаббл и исследованиям, проводимым НАСА. Хороший сайт по астрономии.
http://modis.gsfc.nasa.gov/
Это сайт спутниковой системы наблюдения за Землей Terra/MODIS.
http://terra.nasa.gov/ (Этот сайт может быть отключен. )
«Терра», что на латыни означает «земля», — это название флагманского спутника Системы наблюдения за Землей (EOS) НАСА. Миссия «Терра» стартовала 18 декабря 19 года.99, и начал собирать научные данные 24 февраля 2000 года. Пять датчиков на борту Терры предназначены для того, чтобы ученые могли всесторонне исследовать климатическую систему нашего мира — наблюдать и измерять изменения в ландшафтах Земли, в ее океанах и внутри нижняя атмосфера. Одна из основных целей состоит в том, чтобы определить, как жизнь на Земле влияет на изменения в климатической системе и зависит от них, уделяя особое внимание лучшему пониманию глобального углеродного цикла.
http://landsat.usgs.gov//gallery.php
Сайт изображений со всего мира. Интерактивная карта, на которой вы найдете изображения, сделанные спутниками Landsat. Полезно при поиске изменений с течением времени.
http://eospso.gsfc.nasa.gov/ (дополнительная информация)
Он состоит из серии спутников, научного компонента и системы данных, поддерживающей скоординированную серию полярно-орбитальных спутников с малым наклонением в течение длительного времени. -срочные глобальные наблюдения за земной поверхностью, биосферой, твердой Землей, атмосферой и океанами. EOS позволит лучше понять Землю как интегрированную систему. Научный офис проекта EOS (EOSPSO) стремится предоставлять информацию и ресурсы о программе как ученым, занимающимся программами, так и широкой общественности.
http://www.nasa.gov/multimedia/imagegallery/
Коллекция снимков НАСА
https://svs.gsfc.nasa.gov/2674 (дополнительная информация)
Визуализация данных дистанционного зондирования
http:/ /www.nesdis.noaa.gov/imagery_data.html
Земля из космоса Спутник GOES
https://solarsystem. nasa.gov/ (дополнительная информация)
Исследование Солнечной системы
http://core2.gsfc.nasa. gov/dtam/index.html ( Этот сайт может быть отключен. )
Цифровая карта тектонической активности
http://www.volcanoes.com/
Сайт, посвященный вулканам и вулканам по всему миру. Хороший источник информации о вулканической деятельности и вулканической информации.
http://www.nasa.gov/centers/johnson/gallery/index.html
Космический центр Джонсона, коллекция цифровых изображений, хороший источник информации.
http://www.ucmp.berkeley.edu/geology/tectonics.html (Этот сайт может быть отключен. )
Анимация тектоники плит. Хорошо подходит для обучения динамике плит и прогнозированию движения континентов в будущем.
http://hubble.nasa.gov/
Проект Хаббла
http://hubblesite.org/newscenter/archive/2002/08/
Охотник за галактиками — хороший сайт для детей и взрослых.
http://amazing-space.stsci.edu/ (дополнительная информация)
Amazing Space — замечательный сайт для преподавателей и широкой публики.
http://www-bprc.mps.ohio-state.edu/rsl/radarsat/radarsat.html
Антарктический картографический проект, отличный сайт для исследований в области картирования ледяного щита Антарктиды.
http://disc.gsfc.nasa.gov/geomorphology/ (подробнее)
Геоморфология из космоса, хороший ресурс для геологов и геоморфологов.
http://eo1.usgs.gov/dataproducts/archtask.asp
Горы Загрос. Study
http://www.noaa.gov/ (дополнительная информация)
Сайт о явлениях, связанных с погодой
http://www.monografias.com/Paleontologia/index.shtml
Сайт на испанском языке для поиска исследований в различных областях, связанных с геологией и другими областями.
http://earthobservatory.nasa.gov/Images/
Место, где Земля и ее процессы видны со спутников.
http://www.doubledeckerpress.com/
Сайт, посвященный материалам, связанным с вулканами (книги и другие вспомогательные материалы) доктора Декера.
http://www.angelfire.com/extreme/volcano/
Лучший сайт для изучения гранулярных потоков, гранулярных процессов, гидродинамики, суперкомпьютерного моделирования и гранулометрического анализа в вулканологии, геофизике и физике.
http://www.pmel.noaa.gov/vents/nemo/
Обсерватория Нового тысячелетия.
http://www.cocori.com/photo/imaren/index.htm
Коста-Рика Вулкан Ареналь
http://www.olywa.net/radu/valerie/StHelens.html
Многоликая гора Сент-Хеленс
http://www.jpl.nasa.gov/radar/ sircxsar/ (Этот сайт может быть отключен.)
Космические радиолокационные изображения Земли
http://earthquake.usgs.gov/data/crust/
Страница опасности землетрясений Геологической службы США
https://science.nasa.gov/science -news/science-at-nasa/2002/22mar_ice
Science@NASA — сайт, посвященный информации об исследованиях НАСА
http://www.rocksandminerals.com/finder/TOCh2.HTM
Камни и минералы от А до Я — отличный сайт для обучения минералам и горным породам
http://sohowww.nascom.nasa.gov/
SOHO Exploring the Sun
https://solarscience.msfc.nasa.gov/SunspotCycle.shtml
Sunspots and the Solar Cycle сайт, спонсируемый Science@NASA
http://csep10. phys.utk.edu/astr162/lect/
Лекторий по астрономии, звездам и галактикам
http://www.jpl.nasa.gov (подробнее)
Сайт, посвященный исследованию космоса
http://image.gsfc.nasa.gov/poetry/magneto.html
Сайт, посвященный изучению магнитосферы Земли
https://earthdata.nasa.gov/discipline /atmosphere (дополнительная информация)
Ресурсы данных по химии атмосферы
http://www.tsgc.utexas.edu/everything/moon/calculator.html
Калькулятор веса на Луне — Сколько вы весите на Луне?
http://www.equisetites.de/palbot/teach/stratiteach.html
Учебные материалы по стратиграфии и исторической геологии
http://www.enchantedlearning.com/subjects/dinosaurs/dinofossils/Fossilhow.html
Сайт, посвященный изучению динозавров.
http://encke.jpl.nasa.gov/ (Этот сайт может быть отключен. )
Домашняя страница наблюдений за кометами
http://saturn.jpl.nasa.gov/home/index.cfm
Домашняя страница Cassini
https://space. jpl.nasa.gov/
The Solar System Simulator
http://www.ngdc.noaa.gov/mgg/fliers/97mgg03.html
Глобальная топография морского дна, хороший источник информации для геологи.
http://mineral.galleries.com/ (подробнее)
Сайт, посвященный детальному изучению минералов.
http://www.soest.hawaii.edu/GG/hcv.html
Гавайский центр вулканологии
Искусство написания сценариев HTTP-запросов с использованием Curl
curl / Docs / Tool / HTTP-сценарии
Фон
Этот документ предполагает, что вы знакомы с HTML и общими сетевыми технологиями.
Увеличение количества приложений, перемещаемых в Интернет, привело к тому, что «Сценарии HTTP» стали более востребованными и востребованными. Иметь возможность автоматически извлекать информацию из Интернета, подделывать пользователей, публиковать или загружать данные на веб-серверы — все это важные задачи сегодня.
Curl — это инструмент командной строки для выполнения всех видов манипуляций с URL-адресами и их передачи, но в этом конкретном документе основное внимание будет уделено тому, как использовать его при выполнении HTTP-запросов для развлечения и получения прибыли. Я предполагаю, что вы знаете, как вызвать
curl --help
или curl --manual
, чтобы получить основную информацию об этом.
Программа Curl не предназначена для того, чтобы делать все за вас. Он делает запросы, получает данные, отправляет данные и извлекает информацию. Вероятно, вам нужно склеить все вместе, используя какой-то скриптовый язык или повторяющиеся ручные вызовы.
Протокол HTTP
HTTP — это протокол, используемый для получения данных с веб-серверов. Это простой протокол, основанный на TCP/IP. Протокол также позволяет отправлять информацию на сервер от клиента, используя несколько различных методов, как будет показано здесь.
HTTP представляет собой простые текстовые строки ASCII, отправляемые клиентом на сервер для запроса определенного действия, а затем сервер отвечает несколькими текстовыми строками, прежде чем фактическое запрошенное содержимое будет отправлено клиенту.
Клиент curl отправляет HTTP-запрос. Запрос содержит метод (например, GET, POST, HEAD и т. д.), ряд заголовков запроса и иногда тело запроса. HTTP-сервер отвечает строкой состояния (указывающей, все ли прошло хорошо), заголовками ответа и чаще всего также телом ответа. Часть «тело» — это запрошенные вами простые данные, такие как фактический HTML или изображение и т. д. команд, которые curl отправляет на сервер, а также несколько других информационных текстов.
--verbose
— самая полезная опция, когда дело доходит до отладки или даже понимания взаимодействия curl<->сервера.
Иногда даже --verbose
недостаточно. Затем --trace
и --trace-ascii
предлагают еще больше подробностей, поскольку они показывают все, что curl отправляет и получает. Используйте его так:
curl --trace-ascii debugdump.txt http://www.example.com/
См. тайминг
Много раз вы можете задаться вопросом, что именно занимает все время, или вы просто хотите знать количество миллисекунд между двумя точками в передаче. Для тех и других подобных ситуаций
--trace-time
— это то, что вам нужно. Он будет добавлять время к каждой строке вывода трассировки:
curl --trace-ascii d.txt --trace-time http://example.com/
См. ответ
По умолчанию curl отправляет ответ на стандартный вывод. Вам нужно перенаправить его куда-нибудь, чтобы избежать этого, чаще всего это делается с помощью -o
или -O
.
Spec
Формат унифицированного указателя ресурсов определяет адрес определенного ресурса в Интернете. Вы знаете это, вы видели такие URL-адреса, как https://curl.se или https://example.com, миллион раз. RFC 3986 — каноническая спецификация. И да, официальное имя не URL, а URI.
Хост
Имя хоста обычно преобразуется с помощью DNS или вашего файла /etc/hosts в IP-адрес, и это то, с чем curl будет взаимодействовать. В качестве альтернативы вы указываете IP-адрес непосредственно в URL-адресе вместо имени.
Для разработки и других тестовых ситуаций вы можете указать другой IP-адрес для имени хоста, чем тот, который использовался бы в противном случае, с помощью curl --resolve
вариант:
curl --resolve www.example.org:80:127.0.0.1 http://www.example.org/
Номер порта
Каждый поддерживаемый curl протокол работает с номером порта по умолчанию, будь то TCP или, в некоторых случаях, UDP. Обычно вам не нужно принимать это во внимание, но иногда вы запускаете тестовые серверы на других портах или подобных. Затем вы можете указать номер порта в URL-адресе с двоеточием и номером сразу после имени хоста. Например, при выполнении HTTP на порт 1234:
завиток http://www.example.org:1234/
Номер порта, который вы указываете в URL-адресе, — это номер, который сервер использует для предоставления своих услуг. Иногда вы можете использовать прокси-сервер, и тогда вам может потребоваться указать номер порта этого прокси-сервера отдельно от того, какой curl должен подключиться к серверу. Например, при использовании HTTP-прокси на порту 4321:
curl --proxy http://proxy.example.org:4321 http://remote.example.org/
Имя пользователя и пароль
Для некоторых служб требуется HTTP-аутентификация, после чего вам необходимо указать имя и пароль, которые затем передаются на удаленный сайт различными способами в зависимости от используемого протокола аутентификации.
Вы можете либо вставить пользователя и пароль в URL-адрес, либо указать их отдельно:
curl http://user:password@example.org/
или
curl -u пользователь: пароль http://example.org/
Обратите внимание, что этот тип HTTP-аутентификации не является тем, что обычно делается и запрашивается ориентированными на пользователя веб-сайтами в наши дни. Вместо этого они, как правило, используют формы и файлы cookie.
Часть пути
Часть пути просто отправляется на сервер, чтобы запросить отправку обратно соответствующего ответа. Путь — это то, что находится справа от косой черты, следующей за именем хоста и, возможно, номером порта.
GET
Самый простой и наиболее распространенный запрос/операция, выполняемая с использованием HTTP, — это ПОЛУЧИТЬ URL-адрес. Сам URL-адрес может относиться к веб-странице, изображению или файлу. Клиент отправляет запрос GET на сервер и получает запрошенный документ. Если ввести в командной строке
curl https://curl.se
вы получаете веб-страницу, возвращенную в окно терминала. Весь HTML-документ, который содержит этот URL-адрес.
Все ответы HTTP содержат набор заголовков ответов, которые обычно скрыты, используйте curl --включите параметр
( -i
), чтобы отобразить их, а также остальную часть документа.
HEAD
Вы можете запросить у удаленного сервера ТОЛЬКО заголовки, используя параметр --head
( -I
), который заставит curl выдать запрос HEAD. В некоторых особых случаях серверы отвергают метод HEAD, в то время как другие все еще работают, что вызывает особое раздражение.
Метод HEAD определен и сделан таким образом, что сервер возвращает заголовки точно так же, как и для GET, но без тела. Это означает, что вы можете увидеть Content-Length:
в заголовках ответа, но в ответе HEAD не должно быть фактического тела.
Одна командная строка curl может включать один или несколько URL-адресов. Наиболее распространенным случаем, вероятно, является использование одного, но вы можете указать любое количество URL-адресов. Да любой. Без ограничений. Затем вы будете получать запросы, повторяющиеся снова и снова для всех заданных URL-адресов.
Пример, отправьте два запроса GET:
curl http://url1.example.com http://url2.example.com
Если вы используете --data
для POST на URL-адрес, использование нескольких URL-адресов означает, что вы отправляете один и тот же POST на все указанные URL-адреса.
Пример, отправьте два сообщения POST:
curl --data name=curl http://url1.example.com http://url2.example.com
Иногда вам нужно работать с несколькими URL-адресами в одной командной строке и использовать разные методы HTTP для каждого. Для этого вам понравится опция --next
. По сути, это разделитель, который отделяет несколько вариантов от следующего. Все URL до --next
получит тот же метод и объединит все данные POST в один.
Когда curl достигает --next
в командной строке, он как бы сбрасывает метод и данные POST и разрешает новый набор.
Возможно, это лучше всего показать на нескольких примерах. Чтобы отправить сначала HEAD, а затем GET:
curl -I http://example.com --next http://example.com
Чтобы сначала отправить POST, а затем GET:
curl -d score=10 http://example.com/post.cgi --next http://example.com/results.html
Объяснение форм
Формы — это общий способ, которым веб-сайт может представить HTML-страницу с полями, в которые пользователь может ввести данные, а затем нажать кнопку «ОК» или «Отправить», чтобы эти данные были отправлены на сервер. . Затем сервер обычно использует отправленные данные, чтобы решить, как действовать. Например, использование введенных слов для поиска в базе данных или добавление информации в систему отслеживания ошибок, отображение введенного адреса на карте или использование информации в качестве подсказки для входа в систему, подтверждающей, что пользователю разрешено видеть, о чем идет речь. увидеть.
Конечно, на стороне сервера должна быть какая-то программа для приема отправляемых вами данных. Вы не можете просто изобрести что-то из воздуха.
GET
GET-форма использует метод GET, как указано в HTML, например:
В вашем любимом браузере эта форма появится с текстовым полем для заполнения и кнопкой «ОК». Если вы заполните ‘1905’ и нажмите кнопку OK, после чего ваш браузер создаст новый URL-адрес для вас. URL-адрес получит junk.cgi?birthyear=1905&press=OK
, добавленный к части пути предыдущего URL-адреса.
Если исходная форма была видна на странице www.example.com/when/birth.html
, вторая страница, которую вы получите, станет www.example.com/when/junk.cgi?birthyear=1905&press= ОК
.
Так работает большинство поисковых систем.
Чтобы заставить curl сделать сообщение формы GET для вас, просто введите ожидаемый созданный URL:
curl "http://www.example.com/when/junk.cgi?birthyear=1905&press=OK"
POST
Метод GET отображает все имена полей ввода в поле URL вашего браузера. Как правило, это хорошо, когда вы хотите добавить эту страницу в закладки с вашими данными, но это явный недостаток, если вы ввели секретную информацию в одно из полей или если имеется большое количество полей, создающих длинный и нечитаемый URL.
Затем протокол HTTP предлагает метод POST. Таким образом, клиент отправляет данные отдельно от URL-адреса, и поэтому вы не увидите их в поле URL-адреса.
Форма будет похожа на предыдущую:
А чтобы использовать curl для публикации этой формы с теми же данными, что и раньше, мы могли бы сделать это так:
curl --data "birthyear=1905&press=%20OK%20" http://www .example.com/when/junk.cgi
Этот тип POST будет использовать Content-Type application/x-www-form-urlencoded
и является наиболее широко используемым типом POST.
Данные, которые вы отправляете на сервер, ДОЛЖНЫ уже быть правильно закодированы, curl не сделает этого за вас. Например, если вы хотите, чтобы данные содержали пробел, вам нужно заменить этот пробел на %20
и т. д. Невыполнение этого требования, скорее всего, приведет к тому, что ваши данные будут получены неправильно и испорчены.
Последние версии curl могут на самом деле кодировать данные POST для вас, например:
curl --data-urlencode "name=I am Daniel" http://www.example.com
Если вы повторите --data
несколько раз в командной строке, curl объединит все заданные фрагменты данных и поместит символы и
между каждым сегментом данных.
Загрузка файла POST
Еще в конце 1995 года был определен дополнительный способ отправки данных через HTTP. Это задокументировано в RFC 1867, поэтому этот метод иногда называют RFC1867-posting.
Этот метод в основном предназначен для лучшей поддержки загрузки файлов. Форма, позволяющая пользователю загрузить файл, может быть написана в HTML следующим образом:
Это ясно показывает, что Content-Type, который должен быть отправлен, имеет значение multipart/form-data
.
Чтобы опубликовать сообщение в подобной форме с помощью curl, введите команду, например:
curl --form upload=@localfilename --form press=OK [URL]
Скрытые поля
Распространенным способом передачи информации о состоянии между страницами для приложений на основе HTML является добавление скрытых полей в формы. Скрытые поля уже заполнены, они не отображаются пользователю и передаются так же, как и все остальные поля.
Аналогичный пример формы с одним видимым полем, одним скрытым полем и одной кнопкой отправки может выглядеть так:
Чтобы отправить это с помощью curl, вам не придется думать о том, скрыты поля или нет. Для завивки они все одинаковые:
curl --data "год рождения=1905&press=OK&person=daniel" [URL]
Выясните, как выглядит POST
Когда вы собираетесь заполнить форму и отправить ее на сервер с помощью curl вместо браузера, вы, конечно же, заинтересованы в том, чтобы отправить POST точно так же, как это делает ваш браузер.
Простой способ увидеть это — сохранить HTML-страницу с формой на локальном диске, изменить «метод» на GET и нажать кнопку отправки (вы также можете изменить URL-адрес действия, если хотите к).
Затем вы ясно увидите, что данные добавляются к URL-адресу, разделенному символом ?
-письмо, как и положено GET-формам.
PUT
Возможно, лучший способ загрузить данные на HTTP-сервер — использовать PUT. Опять же, для этого, конечно, требуется, чтобы кто-то поместил на сервер программу или скрипт, который знает, как получать HTTP-поток PUT.
Поместите файл на HTTP-сервер с помощью curl:
curl --upload-file uploadfile http://www.example.com/receive.cgi
Базовая аутентификация
HTTP-аутентификация — это возможность сообщить серверу ваше имя пользователя и пароль, чтобы он мог проверить, разрешено ли вам выполнять выполняемый вами запрос. Обычная аутентификация, используемая в HTTP (это тип, который curl использует по умолчанию), основана на открытом тексте , что означает, что он отправляет имя пользователя и пароль, слегка запутанные, но все еще полностью читаемые любым, кто прослушивает сеть между вами и удаленным сервер.
Чтобы указать curl использовать пользователя и пароль для аутентификации:
curl --имя пользователя:пароль http://www.example.com
Другая аутентификация
Для сайта может потребоваться другой метод аутентификации (проверьте заголовки, возвращаемые сервером), а затем --ntlm
, --digest
, --negotiate
или даже --anyauth
могут быть варианты, которые подходят вам.
Аутентификация прокси-сервера
Иногда доступ к HTTP возможен только при использовании прокси-сервера HTTP. Это, кажется, особенно распространено в различных компаниях. Прокси-серверу HTTP может потребоваться собственный пользователь и пароль, чтобы позволить клиенту получить доступ к Интернету. Чтобы указать те, у которых есть curl, запустите что-то вроде:
curl --proxy-user proxyuser:proxypassword curl.se
Если ваш прокси-сервер требует аутентификации с использованием метода NTLM, используйте --proxy-ntlm
, если требуется дайджест, используйте --proxy-digest
.
Если вы используете любую из этих опций пользователя и пароля, но пропускаете часть пароля, curl запросит пароль в интерактивном режиме.
Сокрытие учетных данных
Учтите, что при запуске программы ее параметры можно будет увидеть в списке запущенных процессов системы. Таким образом, другие пользователи смогут просматривать ваши пароли, если вы передадите их как простые параметры командной строки. Есть способы обойти это.
Стоит отметить, что, несмотря на то, как работает HTTP-аутентификация, многие веб-сайты не будут использовать эту концепцию, когда они предоставляют логины и т. д. Дополнительные сведения об этом см. в главе Веб-вход ниже.
Referer
HTTP-запрос может включать поле «referer» (да, оно написано с ошибкой), которое можно использовать, чтобы определить, с какого URL-адреса клиент перешел к этому конкретному ресурсу. Некоторые программы/скрипты проверяют поле реферера запросов, чтобы убедиться, что они не приходят с внешнего сайта или неизвестной страницы. Хотя это глупый способ проверить что-то, что так легко подделать, многие скрипты все еще делают это. Используя curl, вы можете поместить все, что хотите, в поле referer и, таким образом, легче обмануть сервер, заставив его обслужить ваш запрос.
Используйте curl для установки поля реферера с помощью:
curl --referer http://www.example.com http://www.example.com
User Agent
Подобно полю referer, все HTTP-запросы могут устанавливать поле User-Agent. Он указывает, какой пользовательский агент (клиент) используется. Многие приложения используют эту информацию, чтобы решить, как отображать страницы. Глупые веб-программисты пытаются создавать разные страницы для пользователей разных браузеров, чтобы они выглядели как можно лучше для их конкретных браузеров. Обычно они также используют различные виды JavaScript и т. д.
Иногда вы увидите, что получение страницы с помощью curl не возвращает ту же страницу, которую вы видите при получении страницы с помощью вашего браузера. Тогда вы знаете, что пришло время установить поле User Agent, чтобы обмануть сервер, заставив его думать, что вы один из этих браузеров.
Чтобы curl выглядел как Internet Explorer 5 на компьютере с Windows 2000:
curl --user-agent "Mozilla/4.0 (совместимый; MSIE 5.01; Windows NT 5.0)" [URL]
Или почему бы не выглядеть так, как будто вы используете Netscape 4.73 на старой машине с Linux:
curl --user-agent "Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)" [URL]
Перенаправления
Когда ресурс запрашивается с сервера, ответ от сервера может включать подсказку о том, куда браузеру следует перейти, чтобы найти эту страницу, или новую страницу, содержащую вновь сгенерированный вывод. Заголовок, сообщающий браузеру о перенаправлении, имеет вид Location:
.
Curl не отслеживает заголовки Location:
по умолчанию, но просто отображает такие страницы так же, как отображает все ответы HTTP. Однако у него есть опция, которая заставит его попытаться следовать Расположение:
указателей.
Чтобы указать curl следовать по местоположению:
curl --location http://www.example.com
Если вы используете curl для POST на сайт, который немедленно перенаправляет вас на другую страницу, вы можете безопасно использовать --location
( -L
) и --data
/ --form
вместе. Curl будет использовать POST только в первом запросе, а затем вернется к GET в следующих операциях.
Другие перенаправления
Браузеры обычно поддерживают по крайней мере два других способа перенаправления, которых не поддерживает curl: во-первых, html может содержать мета-тег обновления, который просит браузер загрузить определенный URL-адрес через заданное количество секунд, или он может использовать JavaScript для этого.
Основы работы с файлами cookie
Веб-браузеры осуществляют «управление состоянием на стороне клиента» с помощью файлов cookie. Файлы cookie — это просто имена с соответствующим содержимым. Файлы cookie отправляются клиенту сервером. Сервер сообщает клиенту, для какого пути и имени хоста он хочет, чтобы файл cookie был отправлен обратно, а также отправляет дату истечения срока действия и еще несколько свойств.
Когда клиент связывается с сервером с именем и путем, ранее указанными в полученном файле cookie, клиент отправляет файлы cookie и их содержимое обратно на сервер, если, конечно, срок их действия не истек.
Многие приложения и серверы используют этот метод для соединения серии запросов в один логический сеанс. Чтобы иметь возможность использовать curl в таких случаях, мы должны иметь возможность записывать и отправлять файлы cookie так, как их ожидает веб-приложение. Так же, как браузеры работают с ними.
Параметры cookie
Самый простой способ отправить несколько файлов cookie на сервер при получении страницы с curl — добавить их в командную строку, например:
curl --cookie "name=Daniel" http://www. пример.com
Файлы cookie отправляются как обычные заголовки HTTP. Это практично, поскольку позволяет curl записывать файлы cookie, просто записывая заголовки. Запишите файлы cookie с помощью curl, используя параметр --dump-header
( -D
), например:
curl --dump-header headers_and_cookies http://www.example.com
(Обратите внимание, что описанная ниже опция --cookie-jar
является лучшим способом хранения файлов cookie.)
Curl имеет встроенный полнофункциональный механизм анализа файлов cookie, который можно использовать, если вы хотите повторно подключиться к сервера и использовать файлы cookie, которые были сохранены из предыдущего подключения (или созданы вручную, чтобы обмануть сервер, заставив его поверить, что у вас было предыдущее подключение). Чтобы использовать ранее сохраненные файлы cookie, вы запускаете curl, например:
curl --cookie store_cookies_in_file http://www.example.com
«Cookie Engine» Curl включается при использовании параметра --cookie
. Если вы хотите, чтобы curl понимал только полученные файлы cookie, используйте --cookie
с несуществующим файлом. Например, если вы хотите, чтобы curl понимал файлы cookie со страницы и следовал по местоположению (и, таким образом, возможно, отправлял полученные файлы cookie), вы можете вызвать его следующим образом:
curl --cookie nada --location http://www. пример.com
Curl может читать и записывать файлы cookie, которые используют тот же формат файлов, который когда-то использовали Netscape и Mozilla. Это удобный способ обмена файлами cookie между сценариями или вызовами. Параметр --cookie
( -b
) автоматически определяет, является ли данный файл таким файлом cookie, и анализирует его, а с помощью параметра --cookie-jar
( -c
) вы сделаете curl записать новый файл cookie в конце операции:
curl --cookie cookies.txt --cookie-jar newcookies.txt http://www.example.com
HTTPS защищен HTTP
Существует несколько способов безопасной передачи HTTP. На сегодняшний день наиболее распространенным протоколом для этого является то, что обычно известно как HTTPS, HTTP через SSL. SSL шифрует все данные, отправляемые и получаемые по сети, что затрудняет шпионаж конфиденциальной информации для злоумышленников.
SSL (или TLS, как называется текущая версия стандарта) предлагает набор расширенных функций для безопасной передачи по протоколу HTTP.
Curl поддерживает зашифрованные выборки, если он создан для использования библиотеки TLS, и его можно настроить для использования одной из довольно большого набора библиотек — curl -V
покажет, для какого из них был создан ваш curl (если есть!). Чтобы получить страницу с HTTPS-сервера, просто запустите curl, например:
curl https://secure.example.com
Сертификаты
В мире HTTPS вы используете сертификаты для подтверждения того, что вы являетесь тем, за кого себя выдаете, в дополнение к обычным паролям. Curl поддерживает клиентские сертификаты. Все сертификаты заблокированы парольной фразой, которую необходимо ввести, прежде чем curl сможет использовать сертификат. Парольную фразу можно указать в командной строке или, если нет, ввести интерактивно, когда curl запрашивает ее. Используйте сертификат с завитком на HTTPS-сервере, например:
curl --cert mycert.pem https://secure.example.com
curl также пытается проверить, является ли сервер тем, за кого себя выдает, путем сверки сертификата сервера с локально хранимым пакетом сертификатов ЦС. Неудачная проверка приведет к тому, что curl откажет в соединении. Затем вы должны использовать --insecure
( -k
), если вы хотите указать curl игнорировать тот факт, что сервер не может быть проверен.
Подробнее о проверке сертификата сервера и пакетах сертификатов ca можно прочитать в SSLCERTS
документ.
Иногда вы можете получить собственное хранилище сертификатов ЦС, и тогда вы можете указать curl использовать его для проверки сертификата сервера:
curl --cacert ca-bundle.pem https://example.com/
Делая необычные вещи, вам может понадобиться добавить или изменить элементы одного запроса curl.
Например, вы можете изменить метод POST на PROPFIND
и отправить данные как Content-Type: text/xml
(вместо стандартного Content-Type
) следующим образом:
curl --data "" --header "Content-Type: text/xml" --request PROPFIND example.com
Вы можете удалить заголовок по умолчанию, предоставив его без содержания. Например, вы можете испортить запрос, отрезав заголовок Host:
:
curl --header "Host:" http://www.example.com
Таким же образом можно добавить заголовки. Вашему серверу может понадобиться заголовок Destination:
, и вы можете добавить его:
curl --header "Destination: http://nowhere" http://example.com
Подробнее об измененных методах
Следует отметить, что curl самостоятельно выбирает, какие методы использовать, в зависимости от запрашиваемого действия.
-d
будет выполнять POST, -I
будет выполнять HEAD и так далее. Если вы используете опцию --request
/ -X
, вы можете изменить выбор ключевого слова метода, но вы не измените поведение curl. Это означает, что если вы, например, используете -d «данные» для выполнения POST, вы можете изменить метод на PROPFIND
с -X
и curl все равно будет думать, что отправляет POST . Вы можете изменить обычный метод GET на метод POST, просто добавив -X POST
в командную строку, например:
curl -X POST http://example.org/
… но curl по-прежнему будет думать и действовать так, как если бы он отправил GET, поэтому он не будет отправлять тело запроса и т. д.
Некоторые приемы входа в систему Итак, вот краткое изложение того, как работает подавляющее большинство всех форм входа и как войти в них с помощью curl.
Можно также отметить, что для того, чтобы сделать это должным образом в автоматическом режиме, вам, безусловно, потребуется создавать сценарии и выполнять несколько вызовов curl и т. д.
Во-первых, серверы в основном используют файлы cookie для отслеживания состояния входа клиента в систему. , поэтому вам нужно будет перехватывать файлы cookie, которые вы получаете в ответах. Кроме того, многие сайты также устанавливают специальный файл cookie на странице входа (чтобы убедиться, что вы попали туда через их страницу входа), поэтому вы должны иметь привычку сначала получать страницу формы входа для захвата установленных там файлов cookie.
Некоторые веб-системы входа в систему содержат различное количество JavaScript, и иногда они используют такой код для установки или изменения содержимого файлов cookie. Возможно, они делают это, чтобы предотвратить запрограммированный вход в систему, как это руководство описывает, как… В любом случае, если чтения кода недостаточно, чтобы позволить вам повторить поведение вручную, захват HTTP-запросов, выполняемых вашими браузерами, и анализ отправленных файлов cookie обычно рабочий метод, чтобы решить, как сократить потребность в JavaScript.
Фактически