Мой личный домен работает с GitHub Pages, но я хотел бы понять, как он работает.
В этом примере я вообще не использую свой личный домен. В моем репозитории GitHub Pages нет файла CNAME.
Например. Учитывая репозиторий GitHub Pages без CNAME
файл: example.github.io
DNS-запрос для example.github.io
решает 185.31.16.133
запуск ping
команда для example.github.io
также возвращает тот же IP-адрес: 185.31.16.133
Когда я открываю сайт http://example.github.io
в браузере браузер показывает содержимое фактического веб-сайта.
Когда я набираю IP-адрес 185.31.16.133
вместо этого или выполните HTTP-запрос GET с помощью такого инструмента, как Postman, все, что я вижу, - это ошибка 404 страниц GitHub.
Почему я не могу получить доступ к своей странице пользователя GitHub напрямую по IP-адресу? Я думал, что браузеры заменяют часть URL-адреса, содержащую имя хоста, ответом на IP-адрес при поиске в DNS до выполнения HTTP-запроса.
Да, веб-браузеры выполняют поиск в DNS и используют этот IP-адрес для подключения. Они также берут исходное имя хоста и отправляют его как часть http-заголовка Host. Это позволяет веб-серверу обслуживать несколько веб-сайтов с одного и того же IP-адреса.
curl http://185.31.16.133/
vs.
curl --header "Host: jzelenkov.github.io" http://185.31.16.133/
Я думаю, что ваш сайт не единственный сайт, который находится на этом ip, даже потому, что если каждый проект на github имеет уникальный ip. На этом сервере, вероятно, настроены сотни сайтов пользователей github.
И, вероятно, они настроены с использованием структуры виртуального хоста. В этом случае на сервере apache будет много записей в формате:
<VirtualHost *:80>
DocumentRoot "/blablabla"
ServerName example.gihub.io
<Directory "/blablabla">
....
</Directory>
</VirtualHost>
Используемый IP-адрес - это просто IP-адрес сервера, на котором размещен ваш сайт. Так много сайтов имеют один и тот же IP-адрес.
Вот почему вы не можете напрямую получить доступ к своей странице. И, вероятно, они устанавливают ошибку 404 для всех запросов, которые не используют действительный виртуальный хост. Вот почему вы получаете ошибку 404 not found.
Для прямого доступа к странице с помощью ip см. Ответ andol, используя curl --header и т. Д.