Как происходит запрос сервера?

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

if (client.connect(server, port))
  {

 client.print("GET /abc.txt");
 client.println(" HTTP/1.1");
 client.println("Host: www.yourdomain.com");
 client.println("User-Agent: Arduino");
 client.println("Accept: text/html");
 client.println("Connection: close");
 client.println();
 client.stop();

 }

Кроме того, необходимы ли нижеприведенные строки ? Если да, то в какой ситуации это было бы полезно ?

`client.println("User-Agent: Arduino");
 client.println("Accept: text/html");`

Как происходит это общение? Этот вопрос только для понимания цели?

, 👍0

Обсуждение

Сделайте себе одолжение: прочтите какой-нибудь учебник по протоколу HTTP. Вы можете начать с http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol, @jfpoilpret

Как этот код связан с Arduino?, @Chetan Bhargava


1 ответ


0

Эти функции печати() и println() просто отправляют текст с клиента на сервер, используя соединение TCP/IP (которое было настроено с помощью connect()). Однако важно то, что эти строки текста соответствуют спецификации HTTP для заголовков запросов.

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

Когда сервер получает эти заголовки, это не более чем куча текста. В этом нет ничего особенного. Он должен предположить или определить, что он соответствует спецификации HTTP, и проанализировать их соответствующим образом, чтобы понять детали запроса. Например, в самой первой строке указывается запрашиваемый ресурс (файл), т. е. "/abc.txt".

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

Заголовок "Принять" может использоваться клиентом для указания формата информации, которую он ожидает. Предполагая, что сервер соблюдает это, это может быть полезно, чтобы убедиться, что вы случайно не загружаете формат, с которым не можете справиться. Например, Arduino мог бы с радостью обработать немного обычного текста или HTML, но, вероятно, не смог бы сделать ничего полезного с изображением JPG.

Для получения дополнительной информации о спецификации HTTP: http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol

,