shell - "netcat -e" 执行脚本后重置连接
问题描述
我在这里发现了一个类似的问题,但没有答案。
我编写了这个名为 answer.sh 的脚本:
#!/bin/sh
echo "HTTP/1.1 200 OK
Hello World"
如果我跑
./answer.sh | nc -c -l -p 8797
然后浏览到 localhost:8797 我得到一个只有“Hello World”文本的网页(这正是我想要的)。
但如果我跑
nc -l -p 8797 -e ./answer.sh
浏览器说连接中断。所以我尝试
nc localhost 8797
看看会发生什么,我明白了:
HTTP/1.1 200 OK
Hello World
read(net): Connection reset by peer
我想了解正在发生的事情以及(技术上)工作方式与其他方式之间的区别。
提前致谢。
解决方案
看起来这个问题的答案很慢。我无法进行测试nc -e
,所以这不是一个完整的答案,但也许它会帮助开始对话......
Content-Length:
我建议在 HTTP 响应中使用标头,例如
#!/bin/sh
echo "HTTP/1.1 200 OK
Content-Length: 11
Hello World"
当用于...
./answer.sh | nc -l -p 8797
...我发现它允许普通浏览器完成请求。没有它,浏览器不知道何时停止读取响应,并将等待服务器端关闭连接。
但是,当从nc localhost 8797
客户端连接时,显然这没有什么区别。 nc
对 HTTP 标头不感兴趣,只会继续阅读,直到服务器端断开连接。
推荐阅读
- javascript - 函数内的参数值变化
- angular - 无法从 nginx 中配置的 Angular 应用程序访问 localhost
- python - AttributeError:“str”对象没有属性“datetime”:Python
- ruby-on-rails - 在 ApplicationController 中添加 Logstasher 自定义字段
- push-notification - 离子 4 推送通知
- python - 同一数据帧上的多个总和
- c# - 如何有条件地添加 Blazor 组件的模板?
- r - 使用 cor_plot 呈现相关矩阵
- android - 如何在kotlin中使用协程每秒调用一个函数
- c# - 该属性受该属性影响的访问类