Google Chrome 多功能框仅允许谷歌搜索

Google Chrome 多功能框仅允许谷歌搜索

对于 URL 栏中给定的输入:

0.0.0.0:4567/login/re-welcome/

或者

http://0.0.0.0:4567/login/re-welcome/

Google omnibox 只突出显示一个选项,即 google 搜索,并且不允许我访问我指定的 URL。我提供了适当的屏幕截图,显示了我的输入只有一个选择,按下回车键后会直接重定向到 google 搜索。

这种情况以前从未发生过,即使清除浏览器历史记录后它仍然会执行此操作。

我使用的是 Mac OSX 10.10.2 和 Chrome 版本 40.0.2214.111(64 位)

有办法解决这个问题吗?令人困惑的是,它从来没有这样做过...所以我想知道我是否忽略了什么。

中间人服务器

多功能框行为的屏幕截图

答案1

您不应该这样使用 0.0.0.0。即使它有效。原因:您肯定会遇到麻烦。

使用 0.0.0.0 进行 HTTP 通信违反了标准,该标准正式将 0.0.0.0 归类为“不可用”地址。IPv4 中的“不可用地址”一词是指任何网络或子网的第一个地址和最后一个地址。0.0.0.0 是其所属的每个 IPv4 子网的第一个地址。

至少在 RFC 894、RFC 919、RFC 1122 和 RFC 3021 中讨论了将第一个地址视为特殊地址(使用各种方式指定符号)。它被宣布为“不可用”的基本原因是它被视为广播地址。从那时起,更常见的 IPv4 标准是最后一个地址是广播地址,但第一个地址仍然被广泛认为是“不可用的”。对不起,@harrymc,我必须不同意评论根据行话。即使该地址在技术上可以使用,因此符合英文单词“usable”的定义,但在网络世界中,有一些技术术语,即“可用地址”和“不可用地址”。根据这个行业标准行话,0.0.0.0 被归类为“不可用”。

也许没有技术原因导致第一个地址不可用。这不是由于某个组中可以容纳多少个数字的限制而强制限制的结果。然而,这是一个公认的标准。无论对错,这都是现实。人们被训练避免使用这个地址。因此,许多软件可能会检查以确保没有违反此标准规则。

如果你花足够的时间在网络建设上取得进步,你会发现很多现代网络都是围绕亲和力的概念设计的。因此,共识很重要。

如果您想尝试违反此规则,欢迎您尝试。有很多“开源”软件可供您根据自己的喜好进行调整。但是,如果您故意违反通用标准(或在了解到您无意中违反了通用标准后拒绝适应),那么最终遇到某些麻烦也不足为奇。例如:如果主流网络浏览软件的作者不将“不可用”地址视为正常地址。

除了不可用之外,0.0.0.0 还用零填充,这使其在概念上与 IPv6 中正式的“未指定”地址“::”非常相似。因此,将 0.0.0.0 视为 IPv4 中的“未指定”地址似乎相当合理,并且与 netstat 命令(尤其是使用“netstat -na”)的操作方式一致(在 Unix 和 Microsoft Windows 中)。

从这个意义上讲,DHCP 使用 0.0.0.0 非常有意义;在分配地址之前,计算机使用的是“未指定”地址。实际上,我怀疑计算机正在做的是依靠帧的 MAC 地址(第 2 层:以太网/Wi-Fi)而不是 IPv4 地址(第 3 层),以便正确的计算机获得正确的地址。

有些人可能认为 0.0.0.0 指的是“任何”地址的概念,这在很大程度上可能是因为“netsat -na”似乎就是这样的。如果您对 0.0.0.0 的含义有所了解,那么请注意,还有其他一些相当普遍的想法。尝试不同的方法可能会出现冲突和其他此类麻烦。

说到 netstat,您可能会发现“netstat -nr”显示了“127.0.0.0/8”或“127.0.0.1/8”(IPv4 子网掩码 255.255.255.0)的路由表条目,以及您已分配给网卡的其他网络地址,但没有显示“0.0.0.0/32”(IPv4 子网掩码 255.255.255.255)。但是,您可能会看到“0.0.0.0/0”(IPv4 子网掩码 0.0.0.0)设置为将流量发送到您的 IPv4 默认网关。这是标准的子网划分和路由工作。如果您尚未接受过此类技术的培训,最好不要试图对 0.0.0.0 应该如何工作提出一套新的个人期望。

最后,谈谈 Google Omnibox:我不知道它是如何工作的。但是,任何依赖 0.0.0.0 的使用都是非常不标准的,我在此预测软件开发人员(在本例中为 Google)可能会随时进行更改。如果他们确实随时进行更改,他们可能只会惹恼统计上微不足道的人数。因此,最好的办法是不要依赖软件当前处理 0.0.0.0 地址的任何特殊方式。Google 之所以搜索文本,可能是因为 Google 将输入(您在地址栏中输入的内容)视为无效文本——Google 无法将其识别为有效地址。这正是我期望许多网络浏览器所做的。

我确实理解您可能对“它以前有效;为什么会失效?”感到的痛苦。这是可以理解的。可能是以前的做事方式失效了。每当您做非标准的事情时,您都会面临这种风险。正如我之前提到的,由于任何通用标准都没有明确预期任何有效行为,因此“自定义”(“非标准”)行为随时都可能失效。要避免这种情况,最好的办法是使用具有明确定义行为的标准技术。

如果你想要一个易于输入的网络地址,你可以使用http://10.1.1.1或私有 DNS 名称(例如http://llll(又名http://LLLL))。有一些论点认为私有 DNS 根不可取,但它可能比试图依赖http://0.0.0.0.或者你可以使用http://l(用于本地 Web 服务器),并使用 hosts 文件,您可能会发现这比设置自定义 DNS 的工作量要少,至少对于快速短期小规模解决方案而言。这些解决方案可能比继续撞墙以试图强迫世界接受更好的效果http://0.0.0.0按照您想要的方式。

如果你想要一个解决方案,让网页浏览器能够正常工作,请遵循以下建议heavyd 的评论尝试http://127.0.0.1或您的 NIC 使用的 IP 地址。您可以尝试http://本地主机(但其他机器在尝试连接到 Web 服务器时,应使用除http://127.0.0.1或者http://本地主机或者http://[::]

如果您坚持使用 0.0.0.0,那么您可能会遇到以下问题:

  • 今天可能有效,也可能无效
  • 人们会因为试图帮助你而感到沮丧,因为你违反了许多其他人接受的标准
  • 即使你今天确实让一切正常运转,但如果你做了一些事情,比如更新某个软件,它在未来可能会出问题。更新可能会决定开始将 0.0.0.0 视为非正常地址。

如果您愿意解决任何问题,包括修改源代码,那么这里没有人会试图阻止您。只是不要指望其他人会帮忙,因为他们可能会认为整个努力都是在浪费时间(相比之下,更好的选择是遵循标准)。从长远来看,还有其他方法比试图将某种行为强加到 0.0.0.0 地址上需要的努力更少。

答案2

来自维基百科关于0.0.0.0

在 Internet 协议版本 4 中,地址 0.0.0.0 是不可路由的元地址,用于指定无效、未知或不适用的目标。为无效的数据赋予特殊含义是带内信令的一种应用。

用途包括:

  • 主机在尚未分配地址时声称属于自己的地址。例如,在使用 DHCP 时发送初始 DHCPDISCOVER 数据包时。
  • 当通过 DHCP 请求地址失败时,主机分配给自己的地址(前提是主机的 IP 堆栈支持此功能)。在现代操作系统中,此用法已被 APIPA 机制取代。
  • 指定“任何 IPv4 主机”的一种方法。在指定默认路由时使用此方法。
  • 明确指定目标不可用的方法
  • 一种指定“任何 IPv4 地址”的方法。在配置服务器时(即绑定侦听套接字时)使用此方法。TCP 程序员将其称为 INADDR_ANY。(bind(2) 绑定到地址,而不是接口。)

在 RFC 1122 中,符号“{0,0}”用于表示 0.0.0.0/x(x 为 0 至 32 之间的任意值)。
引用:

{ 0, 0 } 此网络上的主机。不得发送,除非作为主机获知其自身 IP 地址的初始化过程的一部分作为源地址。

因此,地址 0.0.0.0 是可用的,但不建议这样做,因为它会干扰网络中其他网络设备搜索其自身 IP 地址的正常运行。正如 RFC 1122 所述,可以将其用作源地址,但绝不能将其用作目标地址。

在您的例子中,您使用地址 0.0.0.0 来替代 localhost 或 127.0.0.1。这在今天可能有效,但可能会因您使用的某些软件产品的未来更新而失效。

Chrome 就是一个很好的例子,它最近的更新指出 0.0.0.0 是非法地址,应该搜索而不是使用,与指定 时出现的错误相同http://1.2.3

Chromium 中描述了此错误问题 428046:无法访问 0.0.0.0,其中最后一条评论来自 2015 年 1 月 29 日[电子邮件保护]说:

为了避免收到邮件,我将关闭关于此错误的评论。我已经同意我们需要修复,所以没有必要再争论说服我修复 :)

因此,您只需等待修复程序进入 Chrome 版本即可。在此期间,您可以:

  • 改用 localhost 或 127.0.0.1
  • hosts 文件,甚至可以短于 0.0.0.0
  • 使用其他浏览器

答案3

虽然你应该注意另外两个答案,说明为什么使用 0.0.0.0 是馊主意您仍然可以使用 Chrome 中的开发者控制台访问它。

打开控制台并输入

window.location.href="http://0.0.0.0:4567/login/re-welcome/"

Chrome 应该会导航到正确的地址。

或者 (@TOOGAM) 您可以将此 javascript 直接输入到地址栏中:

javascript:window.location.href="http://0.0.0.0:4567/login/re-welcome/"

相关内容