И снова согласование содержания
В главе 17 первое упражнение было посвящено созданию запросов к eloquentjavascript.net/author, спрашивавших разные типы содержимого путём передачи разных заголовков Accept.
Сделайте это снова, используя функцию Node >http.request
. Запросите, по крайней мере, типы >text/plain
, >text/html
и >application/json
. Помните, что заголовки запроса можно передавать как объект в свойстве >headers
, первым аргументом >http.request
.
Выведите содержимое каждого ответа.
Для упрощения доступа к файлам я оставил работать сервер у себя на компьютере, в директории >/home/marijn/public
. Однажды я обнаружил, что кто-то получил доступ ко всем моим паролям, которые я хранил в браузере. Что случилось?
Если вам это непонятно, вспомните функцию >urlToPath
, которая определялась так:
>function urlToPath(url) {
> var path = require("url").parse(url).pathname;
> return "." + decodeURIComponent(path);
>}
Теперь вспомните, что пути, передаваемые в функцию >“fs”
, могут быть относительными. Они могут содержать путь >“../”
в верхний каталог. Что будет, если клиент отправит запросы на URL вроде следующих:
>http://myhostname:8000/../.config/config/google-chrome/Default/Web%20Data
>http://myhostname:8000/../.ssh/id_dsa
>http://myhostname:8000/../../../etc/passwd
Поменяйте функцию >urlToPath
для устранения подобной проблемы. Примите во внимание, что на Windows Node разрешает как прямые так и обратные слэши для задания путей.
Кроме этого, поразмышляйте над тем фактом, что как только вы выставляете сырую систему в интернет, ошибки в системе могут быть использованы против вас и вашего компьютера.