Lua套接字客户端:发送函数

我正在努力理解 Lua 中的 sockets。我在 client:send(data[, 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"?我已经查看了其他网站,但没有一个能够提供足够的信息……

点赞
用户1190388
用户1190388

所有内容都在 HTTP 1.0 协议规范 中详细解释。

特别阅读规范中的 请求部分

Request-Line 以方法标记开头,后跟 Request-URI 和协议版本,最后以 CRLF 结尾。 这些元素由 SP 字符分隔。最终 CRLF 序列中不允许使用 CRLF

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

支持以下 方法

  • GET
  • POST
  • HEAD

SP 是分隔符。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)

2014-10-10 04:27:55