【问题标题】:Writing a Proxy/Caching server using Lua!使用 Lua 编写代理/缓存服务器!
【发布时间】:2011-02-04 08:28:19
【问题描述】:

我还是从 Lua 开始,想用它写一个(相对)简单的代理。

这就是我想要达到的目的:

  1. 监听端口。
  2. 接受连接。
  3. 由于这是一个代理,我期待 HTTP(Get/Post 等)/HTTPS/FTP/来自我的浏览器的任何请求。
  4. 检查请求(只是为了提取主机和端口信息?)
  5. 创建一个新的套接字并连接到请求中指定的主机。
  6. 使用 POST 数据和所有数据在收到请求时转发确切的请求。
  7. 接收响应(header/body/anything else..)并响应初始请求。
  8. 关闭连接?我想 Keep-Alive 不应该受到尊重?

我意识到这不应该是微不足道的,但我在使用 LuaSockets 或 Copas 进行设置时遇到了很多麻烦 --- 我如何接收整个请求?继续接收直到我扫描\r\n\r\n?那我怎么拉帖子数据呢?和身体?还是接受“下载”文件?我读到了“sink”,但诚然不明白其中的大部分含义,所以也许我应该阅读更多内容?

万一这很重要,我正在使用 LuaForWindows 的 Windows 机器上工作,而且对 Lua 还是很陌生。虽然到目前为止很喜欢它,但桌子简直太棒了:)

我发现了 lua-http,但它似乎已合并到 Xavante(我没有找到任何适用于 lua 5.1 和 LuaForWindows 的版本),不确定它是否让我的生活更轻松?

提前感谢我应该查看的任何提示、指针、库/源等 :)

【问题讨论】:

    标签: http sockets proxy lua


    【解决方案1】:

    没有你想象的那么容易。对代理的请求和对服务器的请求是不同的。在rfc2616 中,您可以看到,在查询代理时,客户端包含所请求文档的绝对 URL,而不是通常的相对 URL。

    因此,作为代理,您必须解析传入的请求、修改它们、查询相应的服务器并返回响应。

    解析传入请求非常复杂,因为正文长度取决于各种参数(方法、内容编码等)。

    【讨论】:

    • 您说得对,感谢您指出这一点,老实说我没有考虑过,但我仍然不确定如何进行?打算仔细看看 lua-http-parser,但我真的期待更容易编码“获取请求 + 所有数据 -> 转发它,接收响应 + 数据 -> 转发它”
    【解决方案2】:

    您可以尝试使用lua-http-parser

    【讨论】:

    • 谢谢!这看起来很有趣,并且似乎可以使解析请求/响应变得更加简单。
    猜你喜欢
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 2016-10-17
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多