第一步通过域名查找到 IP 地址,然后发送 HTTP 请求~
有一个比较疑惑的地方是:我直接输入域名对应的 IP 地址,会发生什么?
然后测试了一下,发现输入百度对应的 IP 地址,还是正常返回;输入 CSDN 的 IP 地址就只返回了个 OK~~有大神能帮忙解释一下吗?
第一步通过域名查找到 IP 地址,然后发送 HTTP 请求~
有一个比较疑惑的地方是:我直接输入域名对应的 IP 地址,会发生什么?
然后测试了一下,发现输入百度对应的 IP 地址,还是正常返回;输入 CSDN 的 IP 地址就只返回了个 OK~~有大神能帮忙解释一下吗?
首先你要搞明白,通过域名访问和通过ip访问的时候,请求有什么不同。你可以打开chrome的调试工具对比一下。
搞明白这个之后,其实就是服务器针对不同请求做了不一样的处理。例如,如果服务器是你自己写的,那么你应该知道这两种情况大概要怎么写。实际上,这件事通常是由http server来做的,比如apache或者nginx,配置它们的这种行为,请查阅相应的文档。
从表面上看主要的区别是直接输入 IP 地址只是省略了DNS的过程。
其实 HTTP 头里面有这么几点不同,
Cookie
: cookie 是浏览器根据协议+域名+端口区分的,IP 和域名不属于同一个“域名”,所以浏览器发送的 cookie 不同Host
: HTTP头里面的 Host 其实就是你输入的URL的域名部分(不包括端口号)。一般的有些服务器上会根据这个Host返回不同的网页(虚拟主机,不是VPS,是服务器比如nginx apache等配置里面的概念,不过有些VPS也是这么实现的)。就是同一个IP和端口上可以对应很多不同的网站,服务器会根据这个Host返回对应的网站。缓存有关
:浏览器保存缓存是根据整个URL来区分的,所以浏览器也认为这是不同的资源。另外,对于有很多服务器的网站,像百度这样的,一个域名可以对应多个不同的IP,DNS会根据你所在的地址返回一个离你最近(或者说最快)的IP。而网站服务商也可以根据这个做负载均衡。