有关http请求的一个问题?

如题详述: 对于服务器,应该既可以用域名访问,也可以用IP地址访问。但为什么会是下面结果?

慕课网的http请求
图片描述

Request URL请求URL地址,Remote Address应该是该网站的IP地址。但是为什么域名可以访问,而IP地址却不能访问呢?
图片描述

阅读 5.5k
5 个回答

可以用IP地址访问,在请求头里加上Host: www.imooc.com 就行。
如果用IP访问,不指定Host字段,会请求到默认域名。

你截图访问的是默认服务器,默认服务器设置了禁止访问。 比如在nginx配置里将root设置为/dev/null,或者直接return 403

需要理解,一个IP上可以有多个域名。每个域名有自己的设置。

有些网站服务器通过检测Host字段防止客户端直接使用IP进行访问,
有一些网站虽然未限制用IP地址来访问,但在使用IP地址访问网站时,却将IP地址又重定位到相应的域名上。

简单点来说,假设一个 IP 对应一台具体的服务器,这台服务器上有可能运行着 N 个网站,如果直接使用 IP 访问的话,怎么知道你想要访问的究竟是这台服务器上的哪个网站呢?

一般来说,很多服务器上都会有一个默认网站,所以域名没有得到匹配的请求都会定向到这个默认网站上面去。所以你使用 IP 地址来访问一般打开的是这个默认网站。如果没有配置默认网站则是无法访问的。

访问的时候加上域名信息而不是 IP,服务器就可以根据域名去查找你具体是要访问哪一个网站。

通过 Remote Address 访问报错 403-nginx, 可以看出 imoocnginx 做的代理服务器,Remote Address的地址只是 nginx 服务器的地址,而 Request URL 则是由 nginx 来帮你去请求访问的。

现在回过头来这些问题,发现的确是理解了些,可是又会有另一个问题,如果不理解些根本原理,这样一点点来看,势必最后还是啥都不会。前期只有理解了些原理性的东西,再回过来看这些小点,才可能会很容易的明白理解的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进