所以我对一个通过cloudflare托管的网站进行了DNS查找。
我把IP地址粘贴到我的地址栏,得到一个页面说:
Error 1003 Ray ID: 729ca4f4aff82e38•2022-07-12 20:49:14 UTC不允许直接IP访问
如果我的浏览器正在做同样的事情,即使用url获取ip,然后发送HTTPS请求到相同的ip,但是当我手动执行时,我得到这个错误- cloudflare如何检测到它是一个直接的ip访问尝试?
cloudflare如何检测到它的直接IP访问尝试?
只是基于你(你的浏览器)发送的!
考虑到主机名可以是IP地址,URL的形式为http://hostname/path
。
当你把它放到浏览器中时,浏览器会拆分这些部分并执行HTTP查询。
HTTP协议将HTTP消息定义为标头加可选正文。其中一个头名为host
,其值与URL中的值完全相同。
表示不同,在http://www.example.com/
和http://192.0.2.42/
之间(如果www.example.com正在解析该IP地址):
- 在TCP/IP级别没有任何变化:在这两种情况下,通过操作系统,浏览器连接到IP地址
192.0.2.42
(因为www.example.com
从第一个URL将被解析到它的IP地址) - 当它开始HTTP交换时,客户端发送的消息将在第一种情况下具有
host: www.example.com
头或在第二种情况下具有host: 192.0.2.42
头 - web服务器显然看到客户端发送的所有标头,包括这个
host
,因此可以做任何它想做的事情,最重要的是选择哪个网站被请求,如果多个网站解析到相同的IP地址(如果你理解上面的文本,你现在看到为什么host
标头是必要的)。如果url是https://
而不仅仅是http://
,则有一个微妙的原因,因为在TCP/IP连接和HTTP应用协议之间还有另一层,即TLS,并且等效的host
标头也在TLS级别发送,通过所谓的SNI扩展,因此服务器也可以决定它需要发送回客户端哪个服务器证书,甚至在HTTP交换的第一个字节完成之前。