如何使用JavaScript检查连接是否为本地主机?

148

我希望在我的 javascript 中进行一个检查,以确定页面加载是否在我的本地机器上。

我想这样做的原因是,在开发过程中,我希望确保我的服务器端(C#)验证是否正确工作。因此,我希望能够同时显示客户端和服务器端的错误。

所以,在测试过程中,我在我的 jquery 验证中设置了一个标志,始终允许无效数据通过。这样,我就可以一次性看到客户端和服务器端的错误。

但是现在,当从开发环境切换到生产环境时,我必须手动来回更改。


6
我想提醒任何人,如果使用这些方法之一来“添加”系统功能,尤其是如果该功能可能会暴露您系统中本应安全的信息或数据,则需要特别小心。不过,使用这种技术来“删除”功能是有意义的。例如,如果您想在开发环境中抑制分析跟踪,即使在生产环境中也是如此。只需仔细考虑通过浏览器端的条件或切换所暴露的内容以及它如何可能成为安全漏洞。 - Javid Jamae
13个回答

0

正则表达式虽然速度较慢,但简短而整洁。此外,这里没有人检查IPv6本地主机(::1)。

/localhost|127\.0\.0\.1|::1|\.local|^$/i.test(location.hostname)

它检查常规的localhost,.local域和文件:(空主机名)。

*) 在Chrome中,[].includes(...)的性能最佳(42毫秒),其次是简单循环(for,while)与数组项检查(119毫秒),然后是[].indexOf(...) > -1(289毫秒),最后是正则表达式(566毫秒)。 但这些测量结果在某种程度上是相对的,因为不同的浏览器进行了不同的优化。在FF 52 ESR中,includesindexOf具有类似的结果,正则表达式慢2倍,循环慢6倍。


0

根据上述评论,以下正则表达式帮助我验证URL是否为“localhost”,任何IPv4或IPv6 IP地址。

window.location.hostname.match(/localhost|[0-9]{2,3}\.[0-9]{2,3}\.[0-9]{2,3}\.[0-9]{2,3}|::1|\.local|^$/gi)

0

这里有很多答案都忽略了一些边缘情况。例如,根据 DNS/hosts 等,您可能会出现 something.localhost

因此,这里是一个稍微全面一些的 ES6 答案:

const localHost = ['localhost', '127.0.0.1', '::1', ''].includes(window.location.hostname) || window.location.hostname.endsWith('.localhost')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接