Клиент сокета Lua: функция отправки

Я пытаюсь понять сокеты в lua. Я немного застрял в клиенте: отправить (данные [, i [, j]]) как http://w3.impa.br/~diego/software/luasocket/tcp.html#send предоставляет, но я не совсем понимаю, что он на самом деле делает, и это руководство не объясняет много. Например, чтобы отправить запрос файла, мы используем c:send("GET " .. file .. " HTTP/1.0\r\n\r\n"). Почему мы должны использовать «GET» в начале и «HTTP/1.0\r\n\r\n» в конце? Я искал другие сайты, но ни один из них не показался мне достаточно информативным...


person Community    schedule 10.10.2014    source источник


Ответы (1)


Все это объясняется в спецификациях протокола HTTP 1.0.

Внимательно прочтите раздел запросов характеристики:

Request-Line начинается с маркера метода, за которым следует Request-URI и версия протокола, и заканчивается CRLF. Элементы разделены SP символами. Никакие CR или LF не допускаются, за исключением последней последовательности CRLF.

Request-Line   = Method SP Request-URI SP HTTP-Version CRLF

Поддерживаются следующие методы:

  • ПОЛУЧИТЬ
  • ПОЧТА
  • ГОЛОВА

СП - разделитель. CRLF — это CR (возврат каретки), за которым следуют символы LF (перевод строки). Константы перечислены здесь .

Итак, в запросе, сформированном следующим образом:

GET some/path/to/file.lua HTTP/1.0\r\n\r\n

У вас есть:

  • Метод = GET
  • URI = some/path/to/file.lua
  • Версия HTTP = HTTP/1.0
  • CR = \r
  • LF = \n

Символы \r и \n соответственно представляют CR и LF в нескольких языках программирования. На самом деле это те же символы, что и: string.char(13) и string.char(10) соответственно.

person hjpotter92    schedule 10.10.2014