Начало работы с HTTP

Это введение в HTTP для изучения основ разработки веб-приложений. Он написан для учащихся и способствует объяснению понятий простым языком. Чтобы узнать больше, изучите ссылки в конце статьи.

Так что же такое HTTP?

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

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

HTTP определяет способ форматирования запросов и ответов в Интернете.

Хм? Немного медленнее

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

Код веб-сайта отправляет запрос на веб-сервер с подробностями поиска.

Веб-сервер отправляет ответ с подробной информацией о результатах поиска.

HTTP обеспечивает общий формат для запроса и ответа. Это язык общения в Интернете.

Что такое HTTP-запрос?

Вот пример HTTP-запроса.

GET /customers HTTP/1.1
Host: api.example.com
Accept-Language: en,de
If-None-Match: "374a9c20-2871-13b845a946c7e"

Каждая строка отдельная. Пустых строк нет.

Первая строка HTTP-запроса называется строкой запроса. Заголовки являются необязательными и начинаются со второй строки запроса.

Строка запроса и Host заголовок, если он предоставлен, описывает запрашиваемый ресурс.

GET /customers HTTP/1.1
Host: api.example.com

Это просьба к получить /customers из api.example.com с использованием HTTP/1.1. В браузере мы набрали бы http://api.example.com/customers.

Почему хост указан в заголовке, а не в строке запроса? Хороший вопрос. На самом деле нет необходимости включать хост. Получение запроса на нужный сервер обеспечивается IP-адресом на следующем уровне. Интернет слой. Этот уровень обрабатывает только запрос. Нои это важно, один сервер может выступать в роли нескольких хостови в эти дни, обычно делает. В что В этом случае в запросе необходимо указать, к какому хосту он обращается. Вот что Host: заголовок предназначен для.

Итак Host: заголовок является необязательным. И порядок заголовков не важен.

Строка запроса описывает запрашиваемый ресурс и версию протокола. Важным заголовком запроса является Host заголовок, который указывает хост для запрошенного ресурса.

Помните, я говорил, что не может быть пустых строк? Ну, это потому, что пустая строка особенная.

Первая пустая строка указывает на конец заголовков запроса и начало тела запроса.

Тело запроса используется для предоставления данных. Мы вернемся к этому позже.

Accept-Language: en,de

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

If-None-Match: "374a9c20-2871-13b845a946c7e"

If-None-Match заголовок используется для управления кешем и указывает, что содержимое ресурса должно быть возвращено только в том случае, если оно не имеет предоставленного тега. Это здорово, и используется для экономии полосы пропускания и ускорения работы, загружая ресурс только в том случае, если тег изменился с прошлого раза.

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

Итак, это HTTP-запрос. Есть еще на что посмотреть, и мы рассмотрим некоторые из них позже в этой статье. Сейчас мы отвлечемся от запросов и посмотрим, как форматируется ответ.

Что такое HTTP-ответ?

Вот пример HTTP-ответа.

HTTP/1.1 200 OK
ETag: "51142bc1-7449-479b075b2891b"
Content-Language: de
Content-Type: application/json

[{"customer_id":"a4fc6791",...},...]

Структура аналогична запросу.

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

Давайте посмотрим поближе.

HTTP/1.1 200 OK

Это ответ с использованием HTTP/1.1 протокол. код состояния ответа 200и статус является OK.

А 200 response используется, когда сервер может ответить запрошенным ресурсом, и нет никаких особых условий, о которых нужно информировать клиента. Запрос был OKпредоставляется ожидаемый ответ.

Строка состояния показывает состояние ответа и версию протокола.

Заголовки содержат дополнительную информацию.

ETag: "51142bc1-7449-479b075b2891b"

ETag заголовок предоставляет тег для ответа, который можно кэшировать и использовать с If-None-Match заголовок позже. Он отличается от тега, указанного в примере запроса, поэтому мы получили 200 OK отклик.

Content-Language: de

Content-Language заголовок указывает, что содержание находится на немецком языке. Это был второй из двух вариантов, запрошенных в Accept-Language заголовок, поэтому английский, вероятно, был недоступен.

Content-Type: application/json

Content-Type заголовок указывает тип содержимого, предоставленного в ответе. В данном случае это JSON.

Тело ответа может быть любым. HTML, CSS, JavaScript, закодированное изображение или JSON из API. В тело могут быть включены любые данные, а заголовки используются для указания типа.

Давайте на минутку взглянем на синтаксис, который мы видели.

Синтаксис HTTP-запроса/ответа

И запросы, и ответы следуют одному и тому же базовому синтаксису.

Первая строка состоит из трех частей, разделенных пробелами.

В случае запроса есть метод, путь и версия протокола.

GET /customers HTTP/1.1

Для ответа есть версия протокола, код состояния и сообщение о состоянии.

HTTP/1.1 200 OK

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

Content-Language: de

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

Запрос данных

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

Есть два способа сделать это — строка запроса и тело запроса.

Первая строка запроса, строка запроса, включает путь к запрошенному ресурсу. Данные могут быть предоставлены в пути с помощью строки запроса. Это делается путем добавления вопросительного знака в конец пути, за которым следует name=value пары, разделенные амперсандами &. Без сомнения, вы знаете об этом. Вот пример.

/customers/active?surname=Dunleavy

Об этом просят всех активных клиентов с фамилией «Dunleavy».

Вот как это будет выглядеть в запросе.

GET /customers/active?surname=Dunleavy HTTP/1.1

Тело запроса

URL — это удобный способ предоставления данных с запросом, но он имеет свои ограничения. Существует ограничение в 2000 символов, они должны быть жестко закодированы, плохо читаемы, и не все типы данных могут быть закодированы. Используйте их для простых пар имя/значение, но избегайте их для более сложных данных.

Тело запроса не имеет этих ограничений. Кодирование является гибким без ограничений по размеру.

Не принято использовать строку запроса и тело в одном и том же запросе. Это не обязательно и делается редко. Поместите все в тело запроса, если вы вообще его используете. REST внесет структурированность в ваш подход, но это будет позже.

Способ предоставления данных будет зависеть от типа запроса. Тип запроса называется метод запроса. Давайте посмотрим на общий подход.

Общий подход

Обычный подход к методам HTTP-запроса заключается в использовании только GET а также POST. Ломается вот так.

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

POST используется каждый раз, когда вам нужно отправить изменения или данные для прямой обработки. Данные предоставляются как «данные POST», которые являются телом запроса.

Для начала этот подход будет работать.

Метод POST-запроса

Итак, вот пример POST запрос.

POST /customers/4a849cb1/notes HTTP/1.1
Host: api.example.com
Content-Type: text/plain
Content-Length: 60

Tried to call Mr. Dunleavy, no response, trying again later.

Это просьба к POST к /customers/4a849cb1/notes ресурс. Тело запроса представляет собой новую заметку, которую необходимо добавить клиенту. Заголовки указывают хост, тип данных и их длину.

Коды состояния ответа

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

HTTP определяет ряд различных кодов состояния, которые могут использоваться ответами. Фактически, он предоставляет классы ответов и отдельные коды внутри этих классов. Пять классов — это информационные ответы, успешные ответы, перенаправления, ошибки клиента и ошибки сервера. Они соотносятся с кодами ответов в 100, 200, 300, 400 а также 500 диапазон.

Вы уже видели ошибки в 400 диапазон. 404 Not Found распространен в сети, как и 403 Forbiddenуказывающее на то, что ресурс не найден или доступ к нему запрещен. 400 ошибки указывают на то, что что-то не так с запросом, а не с сервером.

Когда что-то пойдет не так на сервере, появится ошибка в 500 используется диапазон. 500 Internal Server Error является явным признаком того, что вы не продвинетесь дальше в настоящее время.

Ваши веб-приложения должны будут справляться с такими ситуациями. Сервер может испытывать проблемы в любое время. Даже если все работает, сбои в сети или другие проблемы могут привести к сбою запроса. Коды состояния — это то, как ваше приложение может узнать, какая проблема возникла.

Вывод

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

Программа наставничества по основам веб-приложений

Я создаю программу наставничества, чтобы изучить основы разработки веб-приложений. Вы можете работать со мной в качестве наставника, или другие наставники могут использовать его и помогать в улучшении. Все материалы бесплатны и находятся на GitHub. Это даже есть сайт! Я предлагаю бесплатную сессию, чтобы обсудить, как это может работать для вас.

использованная литература

Что такое URL?

HTTP

Методы запроса
/Методы

Коды состояния ответа
/Статус

Заголовок хоста
/Заголовки/Хост

Заголовок Accept-Language
/Заголовки/Accept-Language

Заголовок If-None-Match
/Заголовки/If-None-Match


Copyright Найджел Б. Пек, 2019 г.

Похожие записи

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

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