У меня очень простой веб-сервер netcat, настроенный для отображения /etc/motd
файл для некоторых компьютеров, который отлично работает в Firefox, но периодически дает сбой в Chrome. Я подозреваю, что это проблема с HTTP-заголовком / кешированием, но я не уверен, что мне нужно сделать, чтобы Chrome работал.
Мой сценарий:
#!/bin/bash
while true
do {
echo -e "HTTP/1.1 200 OK\r\nContent-Length: $(cat -s /etc/motd | wc -c)\r\nContent-Type: text/plain\r\n\r\n"
cat -s /etc/motd;
} | nc -l 2020
done
Что обслуживает:
HTTP/1.1 200 OK
Content-Length: 252
Content-Type: text/plain
.../etc/motd file contents....
Firefox, кажется, справляется с этим нормально, как иногда делает Chrome, но в других случаях он возвращает:
Эта страница недоступна
Попытка подключения Google Chrome к machine.example.com была отклонена. Возможно, веб-сайт не работает или ваша сеть настроена неправильно.
Я не видел какой-либо конкретной закономерности, приводящей к сбою соединения, но моя текущая теория заключается в том, что Chrome ожидает увидеть какой-то дополнительный заголовок, или, возможно, соединение внезапно закрывается, что, как предполагает Chrome, означает, что компьютер не работает и не на самом деле попробуйте еще раз.
netcat
не был разработан для масштабируемости, просто инструмент отладки. Если соединение закрыто, то nc
перестает слушать. Поскольку у вас есть бесконечный цикл, который начинается nc
опять же, вы часто можете открыть страницу. Имейте в виду, что большинство браузеров изначально запрашивают ресурс (например, /
) но также /favicon.ico
. Это тот случай, когда эта конструкция может не работать должным образом из-за короткого периода, когда nc
не запускается.
Если вам нужен простой веб-сервер, вы можете использовать Python. Например, для обслуживания текущего каталога:
python -m SimpleHTTPServer 2020
Если вы используете Python 3, вам нужно запустить:
python -m http.server 2020
Документация для BaseHTTPServer, вам нужно только добавить обработчик запроса.