我使用netcat通过bash运行一个小型开发web服务器,它只能处理一次连接。
启动netcat的命令如下(使用-k
参数使其可以处理多个连接):
nc -kl 3000
一个Bash脚本会处理通过netcat接收到的浏览器请求,并构建响应,然后通过同一netcat实例将响应发送回浏览器。
一切都按预期进行,但有时浏览器无法获取其请求的文件。我怀疑:如果在响应完全发送之前关闭连接,则响应剩余部分将作为响应发送到下一个请求(当然不属于该请求)。
证明
- 终端1(服务器):
nc -kl 3000
- 终端2(模拟浏览器):
nc localhost 3000
- 在终端1中输入
hello\n
。 - 终端2打印出
hello\n
。 - 在终端2中按Ctrl+C以结束连接。
- 在终端1中输入
world\n
。 - 再次在终端2中运行
nc localhost 3000
(新连接)。 - 尽管
world\n
实际上是在不存在连接时发送的,即作为第一个连接的第二个响应行,但终端2立即显示了world\n
。
所需行为:如果没有连接存在,则忽略传递给netcat的所有字节。
使用netcat是否可能实现?(我更喜欢像netcat这样的工具,因为它预装在所有计算机上。)
python -m SimpleHTTPServer <port>
(在 Python 3.x 中变成了http.server
),这相当容易进行自定义。 - zmoncat
,如果它不起作用,我将使用Python的简单HTTP服务器。 - ideaboxer