无法通过IP地址访问我的GitHub页面网站

我的自定义域使用GitHub页面,但我想了解它是如何工作的。

对于这个例子,我没有使用我的自定义域。 我的GitHub页面库不包含CNAME文件。


例如,给定一个没有CNAME文件的GitHub页面库: example.github.io

example.github.io DNS请求parsing为185.31.16.133

运行example.github.ioping命令也会返回相同的IP地址: 185.31.16.133

当我在浏览器中打开网站http://example.github.io时,浏览器会显示实际网站的内容。

当我input一个IP地址185.31.16.133而不是使用像Postman这样的工具发出一个HTTP GET请求时,我所看到的只是一个GitHub Pages 404错误。

为什么我无法直接通过IP地址访问我的GitHub用户页面? 我认为浏览器在发出HTTP请求之前,将URL的主机名部分replace为DNS查找的IP地址响应。

是的,Web浏览器执行DNS查找并使用该IP地址进行连接。 他们还将原始主机名称作为主机http标头的一部分发送。 这允许Web服务器从相同的IP地址提供多个网站。

 curl http://185.31.16.133/ 

 curl --header "Host: jzelenkov.github.io" http://185.31.16.133/ 

我认为你的网站不是那个ip上的唯一网站,甚至因为如果github上的每个项目都有一个独特的ip。 在那个服务器上可能有configuration了百余个github用户的站点。

可能它们是使用虚拟主机结构configuration的。 在这种情况下,Apache服务器有很多条目,格式为:

  <VirtualHost *:80> DocumentRoot "/blablabla" ServerName example.gihub.io <Directory "/blablabla"> .... </Directory> </VirtualHost> 

您使用的IP只是承载您的站点的服务器的IP地址。 这么多网站共享相同的IP。

这就是为什么你不能直接访问你的页面。 可能他们为所有不使用有效虚拟主机的请求设置了404错误。 这就是为什么你收到404找不到错误。

要直接访问使用ip的页面,请参阅andol answer,使用curl -header等。