备案的原理不是轮子哥说的(服务器地址,IP地址,域名)这个 tuple ,而是 (域名,主机地址,联系人)这个 tuple 。联系人是为了出问题的时候能通知你去删帖子的,主机地址是为了万一你没删帖子的时候去拔网线的,所以会精确到机柜上的位置(当然也就精确到了某个网线插口)。
然而阿里云说,服务器在我手上,域名也在我手上,域名解析我也有,管局你帮我个忙,简化一下流程吧,反正出问题了保证拔线。那么这样一来通过阿里云的备案就不需要精确到哪个可用区的哪个主机去了,当然阿里自己也懒得检查你备案时候用的那个服务号是不是实际用的那个(反正都在阿里云我怕啥)。
这样就能解释为什么【在阿里云内部换主机不用重新备案】以及【在别的地方备案之后阿里云不让用】的现象了。
另外这个拦截机制跟阿里云的代备案系统不通,因此即使在备案过程中也不会放行的。这就出现了一个矛盾:管局要求网站能正常访问才能进行备案(我就被卡过)。为了这个矛盾他们还专门对管局的 IP 段(我猜的)做了个白名单,并且如果投诉的话通过工单可以手动放行。
【如何拦截】是通过类似于云盾之类的一套服务进行的,请求会发到服务器来(我打过日志),但是返回值不会返回给浏览器。跟具体的操作系统没关系,基于 HTTP 的请求都会受到影响。
【既然拦截了为什么不直接写进去】估计是做拦截的地方对性能要求很高,不便于处理那么长的内容吧。用个中间页跳转一下也方便改提示信息。如果玩 302 跳转并没有什么意义。
所以如果是手动建立 TCP 连接然后再处理 HTTP 的话,只要 HTTP 头里面 Host 填了个备案过的域名应该也可以吧?(当然服务器端要对这个伪装的 Host 做处理,并且这一招对浏览器并没有什么价值)