суббота, 29 декабря 2018 г.

Apache for Windows и двоеточие: страшная сказка на ночь

Расскажу одну интересную историю, которая приключилась не так давно.

Изучаю написание ботов в Telegram. В Telegram API можно выставить webhook, который будет дергаться при поступлении событий с серверов Telegram. На одной машине стоит Vagrant и под ним все нормально работает. То есть, моя серверная часть успешно получает события от Telegram. На другой - LAMP под Windows. И на ней, соответственно, все то же самое уже не работает. То есть, ровно тот же самый код.

Разбирался пару часов, наверное, пока не нашел, в чем же дело.

Под Vagrant'ом была VirtualBox c Убунтой внутри. На которой веб-сервером был Nginx.
В Windows стоял OpenServer, в котором запускался Apache под то же самое.

Теперь самое интересное. Дока по Telegram API советует скрывать URL веб-хука, используя для этого выданный токен (никому, кроме пользователя API, неизвестный).  То есть, строить URL как-то так:

https://www.example.com/[token]

Сама строка токена где-то в середине содержит символ двоеточия (:).
Так вот. Так как в Windows символ ':' является значимым для файловой системы, любые URLы, его содержащие, в целях безопасности блокируются апачем под Windows. Нашел интересный тред в буржунете, где люди предлагали даже сделать какой-то флаг при запуска апача, чтобы можно было выключить эту функциональность под свою ответственность, но что-то там дело так и не сдвинулось, как я понял. 
Ну а под другие оси Apache таких ограничений не имеет, если я правильно понял.
В общем, весьма интересная ситуация, знание о которой иногда может быть полезным )