Назад | Перейти на главную страницу

Chrome отклоняет подключения к веб-серверу netcat

У меня очень простой веб-сервер 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, вам нужно только добавить обработчик запроса.