我的自定义域名与 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
或使用 Postman 等工具发出 HTTP GET 请求时,我看到的只是 GitHub Pages 404 错误。
为什么我不能直接通过 IP 地址访问我的 GitHub 用户页面?我认为浏览器在发出 HTTP 请求之前会用 DNS 查找的 IP 地址响应替换 URL 的主机名部分。
答案1
是的,网络浏览器会进行 DNS 查找并使用该 IP 地址进行连接。它们还会获取原始主机名并将其作为 Host http 标头的一部分发送。这允许网络服务器从同一 IP 地址为多个网站提供服务。
curl http://185.31.16.133/
对阵
curl --header "Host: jzelenkov.github.io" http://185.31.16.133/
答案2
我认为您的网站不是唯一一个在该 IP 上的网站,即使 github 上的每个项目都有一个唯一的 IP。该服务器上可能配置了数百个 github 用户的网站。
并且它们可能使用虚拟主机结构进行配置。在这种情况下,Apache 服务器有许多条目,格式如下:
<VirtualHost *:80>
DocumentRoot "/blablabla"
ServerName example.gihub.io
<Directory "/blablabla">
....
</Directory>
</VirtualHost>
你使用的 IP 只是托管你网站的服务器的 IP。许多网站共享同一个 IP。
这就是您无法直接访问页面的原因。他们可能为所有未使用有效虚拟主机的请求设置了 404 错误。这就是您收到 404 未找到错误的原因。
对于使用 ip 直接访问页面,请参考 andol 答案,使用 curl --header 等。