HTTP-запрос методом GET.

Одним из способов, как можно отправить запрос по протоколу HTTP к серверу, является запрос методом GET. Этот метод является самым распространенным и запросы к серверу чаще всего происходят с его использованием.
Самый простой способ, как можно создать запрос методом GET- это набрать URL-адрес в адресную строку браузера.

Если у вас есть желание погрузиться в тему серверного программирования глубже, все мои уроки здесь.
Браузер передаст серверу примерно следующую информацию:
Запрос состоит из двух частей:
1. строка запроса (Request Line)
2. заголовки (Message Headers)
Обратите внимание, что GET запрос не имеет тела сообщения. Но, это не означает, что с его помощью мы не можем передать серверу никакую информацию. Это можно делать с помощью специальных GET параметров.
Чтобы добавить GET параметры к запросу, нужно в конце URL-адреса поставить знак «?» и после него начинать задавать их по следующему правилу:
К примеру, если мы хотим передать серверу два значения, имя пользователя и его возраст, то это можно сделать следующей строкой:
Когда выполнен данный запрос, данные попадают в так называемую переменную окружения QUERY_STRING, из которой их можно получить на сервере с помощью серверного языка веб-программирования.
Вот пример, как это можно сделать на языке PHP.
Конструкция $_GET["имя_параметра"] позволяет выводить значение переданного параметра.
Где в get запросе передать входные параметры
В прошлых темах были рассмотрены простейшие запросы к файлу json, который содержал некоторые данные. Однако нередко возникает необходимость обращаться с более сложными запросами к удаленному ресурсу, передавая ему некоторые параметры. Вначале рассмотрим, как передать параметры в get-запросе.
Определение приложения на сервере
Рассмотрим простейшую задачу. Допустим, на стороне сервера действует некоторый обработчик или скрипт, который принимает в качестве параметра два числа и вычисляет их сумму.
В качестве стороны сервера мы могли бы взять разные технологии: PHP, ASP.NET и т.д. В данном случае для тестирования определим небольшое приложение на Node.js, так как данная технология представляет наиболее простейший способ для создания простейшего тестового приложения, да и сам Node.js установлен у всех разработчиков Angular. Приложение будет интуитивно понятным, более же подробно с данной технологией можно ознакомиться в руководстве по Node.js
Определим для приложения Node.js новый каталог где-нибудь на жестком диске. Далее в этом каталоге определим файл package.json :
Наше приложение будет использовать фреймворк Express для обработки запросов. Установим пакеты командой npm install .
Далее определим в папке приложения файл app.js — главный файл приложения, который будет содержать следующий код:
Данное приложение будет принимать запросы по адресу «/sum» ( app.get(«/sum»). ). Из строки запроса получаем два параметра num1 и num2 (названия параметров произвольное). Далее конвертируем значения параметров в числа и вычисляем суммму. И возвращаем сумму в виде объекта json
Поскольку приложение Angular будет разворачиваться на одном домене, а приложение Node.js на другом, то нам необходимо будет настроить CORS — кроссдоменные запросы. Для этого с помощью метода response.header устанавливаются соответствующие заголовки.
В командой строке/консоли перейдем к папке приложения node.js и запустим скрипт с помощью команды node app.js
Мы можем простестировать приложение в браузере, обратившись к нему с запросом http://localhost:3000/sum?num1=5&num2=9 :

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

HttpParams
Также для определения параметров в запросе можно использовать класс HttpParams . В частности, изменим сервис HttpService следующим образом:
С помощью метода set() объекта HttpParams устанавливаются параметры, и затем этот объект передается в запрос. В итоге результат будет тот же, что и в примере выше.
How to make an HTTP get request with parameters
Is it possible to pass parameters with an HTTP get request? If so, how should I then do it? I have found an HTTP post requst (link). In that example the string postData is sent to a webserver. I would like to do the same using get instead. Google found this example on HTTP get here. However no parameters are sent to the web server.
6 Answers 6
My preferred way is this. It handles the escaping and parsing for you.
First WebClient is easier to use; GET arguments are specified on the query-string — the only trick is to remember to escape any values:
![]()
In a GET request, you pass parameters as part of the query string.
The WebRequest object seems like too much work for me. I prefer to use the WebClient control.
To use this function you just need to create two NameValueCollections holding your parameters and request headers.
Consider the following function:
Add your querystring parameters (if required) as a NameValueCollection like so.
Руководство по Node.js, часть 8: протоколы HTTP и WebSocket
Node.js — это серверная платформа. Основная задача сервера — как можно быстрее и эффективнее обрабатывать запросы, поступающие от клиентов, в частности — от браузеров. Восьмая часть перевода руководства по Node.js, которую мы публикуем сегодня, посвящена протоколам HTTP и WebSocket.

Что происходит при выполнении HTTP-запросов?
Поговорим о том, как браузеры выполняют запросы к серверам с использованием протокола HTTP/1.1.
Если вы когда-нибудь проходили собеседование в IT-сфере, то вас могли спросить о том, что происходит, когда вы вводите нечто в адресную строку браузера и нажимаете Enter. Пожалуй, это один из самых популярных вопросов, который встречается на подобных собеседованиях. Тот, кто задаёт подобные вопросы, хочет узнать, можете ли вы объяснить некоторые довольно-таки простые концепции и выяснить, понимаете ли вы принципы работы интернета.
Этот вопрос затрагивает множество технологий, понимать общие принципы которых — значит понимать, как устроена одна из самых сложных систем из когда-либо построенных человечеством, которая охватывает весь мир.
▍Протокол HTTP
Современные браузеры способны отличать настоящие URL-адреса, вводимые в их адресную строку, от поисковых запросов, для обработки которых обычно используется заданная по умолчанию поисковая система. Мы будем говорить именно об URL-адресах. Если вы введёте в строку браузера адрес сайта, вроде flaviocopes.com , браузер преобразует этот адрес к виду http://flaviocopes.com , исходя из предположения о том, что для обмена данными с указанным ресурсом будет использоваться протокол HTTP. Обратите внимание на то, что в Windows то, о чём мы будем тут говорить, может выглядеть немного иначе, чем в macOS и Linux.
▍Фаза DNS-поиска
Итак, браузер, начиная работу по загрузке данных с запрошенного пользователям адреса, выполняет операцию DNS-поиска (DNS Lookup) для того, чтобы выяснить IP-адрес соответствующего сервера. Символьные имена ресурсов, вводимые в адресную строку, удобны для людей, но устройство интернета подразумевает возможность обмена данными между компьютерами с использованием IP-адресов, которые представляют собой наборы чисел наподобие 222.324.3.1 (для протокола IPv4).
Сначала, выясняя IP-адрес сервера, браузер заглядывает в локальный DNS-кэш для того, чтобы узнать, не выполнялась ли недавно подобная процедура. В браузере Chrome, например, есть удобный способ посмотреть DNS-кэш, введя в адресной строке следующий адрес: chrome://net-internals/#dns .
Если в кэше ничего найти не удаётся, браузер использует системный вызов POSIX gethostbyname для того, чтобы узнать IP-адрес сервера.
▍Функция gethostbyname
Функция gethostbyname сначала проверяет файл hosts , который, в macOS или Linux, можно найти по адресу /etc/hosts , для того, чтобы узнать, можно ли, выясняя адрес сервера, обойтись локальными сведениями.
Если локальными средствами разрешить запрос на выяснение IP-адреса сервера не удаётся, система выполняет запрос к DNS-серверу. Адреса таких серверов хранятся в настройках системы.
Вот пара популярных DNS-серверов:
- 8.8.8.8: DNS-сервер Google.
- 1.1.1.1: DNS-сервер CloudFlare.
TCP и UDP — это два базовых протокола, применяемых в компьютерных сетях. Они расположены на одном концептуальном уровне, но TCP — это протокол, ориентированный на соединениях, а для обмена UDP-сообщениями, обработка которых создаёт небольшую дополнительную нагрузку на системы, процедура установления соединения не требуется. О том, как именно происходит обмен данными по UDP, мы говорить не будем.
IP-адрес, соответствующий интересующему нас доменному имени, может иметься в кэше DNS-сервера. Если это не так — он обратиться к корневому DNS-серверу. Система корневых DNS-серверов состоит из 13 серверов, от которых зависит работа всего интернета.
Надо отметить, что корневому DNS-серверу неизвестны соответствия между всеми существующими в мире доменными именами и IP-адресами. Но подобным серверам известны адреса DNS-серверов верхнего уровня для таких доменов, как .com, .it, .pizza, и так далее.
Получив запрос, корневой DNS-сервер перенаправляет его к DNS-серверу домена верхнего уровня, к так называемому TLD-серверу (от Top-Level Domain).
Предположим, браузер ищет IP-адрес для сервера flaviocopes.com . Обратившись к корневому DNS-серверу, браузер получит у него адрес TLD-сервера для зоны .com. Теперь этот адрес будет сохранён в кэше, в результате, если будет нужно узнать IP-адрес ещё какого-нибудь URL из зоны .com, к корневому DNS-серверу не придётся обращаться снова.
У TLD-серверов есть IP-адреса серверов имён (Name Server, NS), средствами которых и можно узнать IP-адрес по имеющемуся у нас URL. Откуда NS-сервера берут эти сведения? Дело в том, что если вы покупаете домен, доменный регистратор отправляет данные о нём серверам имён. Похожая процедура выполняется и, например, при смене хостинга.
Сервера, о которых идёт речь, обычно принадлежат хостинг-провайдерам. Как правило, для защиты от сбоев, создаются по несколько таких серверов. Например, у них могут быть такие адреса:
- ns1.dreamhost.com
- ns2.dreamhost.com
- ns3.dreamhost.com
Теперь, после того, как нам удалось выяснить IP-адрес, стоящий за введённым в адресную строку браузера URL, мы переходим к следующему шагу нашей работы.
▍Установление TCP-соединения
Узнав IP-адрес сервера, клиент может инициировать процедуру TCP-подключения к нему. В процессе установления TCP-соединения клиент и сервер передают друг другу некоторые служебные данные, после чего они смогут обмениваться информацией. Это означает, что, после установления соединения, клиент сможет отправить серверу запрос.
▍Отправка запроса
Запрос представляет собой структурированный в соответствии с правилами используемого протокола фрагмент текста. Он состоит из трёх частей:
- Строка запроса.
- Заголовок запроса.
- Тело запроса.
Строка запроса
Строка запроса представляет собой одну текстовую строку, в которой содержатся следующие сведения:
- Метод HTTP.
- Адрес ресурса.
- Версия протокола.
Заголовок запроса
Заголовок запроса представлен набором пар вида поле: значение . Существуют 2 обязательных поля заголовка, одно из которых — Host , а второе — Connection . Остальные поля необязательны.
Заголовок может выглядеть так:
Поле Host указывает на доменное имя, которое интересует браузер. Поле Connection , установленное в значение close , означает, что соединение между клиентом и сервером не нужно держать открытым.
Среди других часто используемых заголовков запросов можно отметить следующие:
- Origin
- Accept
- Accept-Encoding
- Cookie
- Cache-Control
- Dnt
Заголовок запроса завершается пустой строкой.
Тело запроса
Тело запроса необязательно, в GET-запросах оно не используется. Тело запроса используется в POST-запросах, а также в других запросах. Оно может содержать, например, данные в формате JSON.
Так как сейчас речь идёт о GET-запросе, тело запроса будет пустым, с ним мы работать не будем.
▍Ответ
После того, как сервер получает отправленный клиентом запрос, он его обрабатывает и отправляем клиенту ответ.
Ответ начинается с кода состояния и с соответствующего сообщения. Если запрос выполнен успешно, то начало ответа будет выглядеть так:
Если что-то пошло не так, тут могут быть и другие коды. Например, следующие:
- 404 Not Found
- 403 Forbidden
- 301 Moved Permanently
- 500 Internal Server Error
- 304 Not Modified
- 401 Unauthorized
Разбор HTML-кода
После того, как браузер получает ответ сервера, в теле которого содержится HTML-код, он начинает его разбирать, повторяя вышеописанный процесс для каждого ресурса, который нужен для формирования страницы. К таким ресурсам относятся, например, следующие:
- CSS-файлы.
- Изображения.
- Значок веб-страницы (favicon).
- JavaScript-файлы.
О создании простого сервера средствами Node.js
Теперь, после того, как мы разобрали процесс взаимодействия браузера и сервера, вы можете по-новому взглянуть на раздел Первое Node.js-приложение из первой части этой серии материалов, в котором мы описывали код простого сервера.
Выполнение HTTP-запросов средствами Node.js
Для выполнения HTTP-запросов средствами Node.js используется соответствующий модуль. В приведённых ниже примерах применяется модуль https. Дело в том, что в современных условиях всегда, когда это возможно, нужно применять именно протокол HTTPS.
▍Выполнение GET-запросов
Вот пример выполнения GET-запроса средствами Node.js:
▍Выполнение POST-запроса
Вот как выполнить POST-запрос из Node.js:
▍Выполнение PUT-запросов и DELETE-запросов
Выполнение таких запросов выглядит так же, как и выполнение POST-запросов. Главное отличие, помимо смыслового наполнения таких операций, заключается в значении свойства method объекта options .
▍Выполнение HTTP-запросов в Node.js с использованием библиотеки Axios
Axios — это весьма популярная JavaScript-библиотека, работающая и в браузере (сюда входят все современные браузеры и IE, начиная с IE8), и в среде Node.js, которую можно использовать для выполнения HTTP-запросов.
Эта библиотека основана на промисах, она обладает некоторыми преимуществами перед стандартными механизмами, в частности, перед API Fetch. Среди её преимуществ можно отметить следующие:
- Поддержка старых браузеров (для использования Fetch нужен полифилл).
- Возможность прерывания запросов.
- Поддержка установки тайм-аутов для запросов.
- Встроенная защита от CSRF-атак.
- Поддержка выгрузки данных с предоставлением сведений о ходе этого процесса.
- Поддержка преобразования JSON-данных.
- Работа в Node.js
Установка
Для установки Axios можно воспользоваться npm:
Того же эффекта можно достичь и при работе с yarn:
Подключить библиотеку к странице можно с помощью unpkg.com :
API Axios
Выполнить HTTP-запрос можно, воспользовавшись объектом axios :
Но обычно удобнее пользоваться специальными методами:
- axios.get()
- axios.post()
Axios предлагает отдельные методы и для выполнения других видов HTTP-запросов, которые не так популярны, как GET и POST, но всё-таки используются:
- axios.delete()
- axios.put()
- axios.patch()
- axios.options()
- axios.head()
Запросы GET
Axios удобно использовать с применением современного синтаксиса async/await. В следующем примере кода, рассчитанном на Node.js, библиотека используется для загрузки списка пород собак из API Dog. Здесь применяется метод axios.get() и осуществляется подсчёт пород:
То же самое можно переписать и без использования async/await, применив промисы:
Использование параметров в GET-запросах
GET-запрос может содержать параметры, которые в URL выглядят так:
При использовании Axios запрос подобного рода можно выполнить так:
Того же эффекта можно достичь, настроив свойство params в объекте с параметрами:
Запросы POST
Выполнение POST-запросов очень похоже на выполнение GET-запросов, но тут, вместо метода axios.get() , используется метод axios.post() :
В качестве второго аргумента метод post принимает объект с параметрами запроса:
Использование протокола WebSocket в Node.js
WebSocket представляет собой альтернативу HTTP, его можно применять для организации обмена данными в веб-приложениях. Этот протокол позволяет создавать долгоживущие двунаправленные каналы связи между клиентом и сервером. После установления соединения канал связи остаётся открытым, что даёт в распоряжение приложения очень быстрое соединение, характеризующееся низкими задержками и небольшой дополнительной нагрузкой на систему.
Протокол WebSocket поддерживают все современные браузеры.
▍Отличия от HTTP
HTTP и WebSocket — это очень разные протоколы, в которых используются различные подходы к обмену данными. HTTP основан на модели «запрос — ответ»: сервер отправляет клиенту некие данные после того, как они будут запрошены. В случае с WebSocket всё устроено иначе. А именно:
- Сервер может отправлять сообщения клиенту по своей инициативе, не дожидаясь поступления запроса от клиента.
- Клиент и сервер могут обмениваться данными одновременно.
- При передаче сообщения используется крайне малый объём служебных данных. Это, в частности, ведёт к низким задержкам при передаче данных.
▍Защищённая версия протокола WebSocket
Существует небезопасная версия протокола WebSocket (URI-схема ws:// ), которая напоминает, в плане защищённости, протокол http:// . Использования ws:// следует избегать, отдавая предпочтение защищённой версии протокола — wss:// .
▍Создание WebSocket-соединения
Для создания WebSocket-соединения нужно воспользоваться соответствующим конструктором:
После успешного установления соединения вызывается событие open . Организовать прослушивание этого события можно, назначив функцию обратного вызова свойству onopen объекта connection :
Для обработки ошибок используется обработчик события onerror :
▍Отправка данных на сервер
После открытия WebSocket-соединения с сервером ему можно отправлять данные. Сделать это можно, например в коллбэке onopen :
▍Получение данных с сервера
Для получения с сервера данных, отправленных с использованием протокола WebSocket, можно назначить коллбэк onmessage , который будет вызван при получении события message :
▍Реализация WebSocket-сервера в среде Node.js
Для того чтобы реализовать WebSocket-сервер в среде Node.js, можно воспользоваться популярной библиотекой ws. Мы применим её для разработки сервера, но она подходит и для создания клиентов, и для организации взаимодействия между двумя серверами.
Установим эту библиотеку, предварительно инициализировав проект:
Код WebSocket-сервера, который нам надо написать, довольно-таки компактен:
Здесь мы создаём новый сервер, который прослушивает стандартный для протокола WebSocket порт 8080 и описываем коллбэк, который, когда будет установлено соединение, отправляет клиенту сообщение ho! и выводит в консоль сообщение, полученное от клиента.
Вот рабочий пример WebSocket-сервера, а вот — клиент, который может с ним взаимодействовать.