【问题标题】:Invalid URL that works in staging server but fails in production在登台服务器中有效但在生产中失败的无效 URL
【发布时间】:2012-04-25 02:27:22
【问题描述】:

我花了整整一夜的时间来弄清楚为什么我们的生产服务器有一个在我们的暂存服务器中遗漏的错误。而今天早上,我终于把范围缩小了,把它钉在了这段代码上:

url = [ database.protocol, '//' + database.host, database.port, ].join(':');
url = [ url, database.db ].join('/');

是的。这到底是怎么回事?好吧,在舞台上它显示:

http://:localhost:5984/fo

但在master中显示

http://:10.x.x.x:5984/fo (x is a number)

前者有效,后者无效。这就是我对 URL 的了解让我失望的地方。前者到底如何有效,而后者无效?

编辑:

需要明确的是,我认为这两个 URL 都应该是无效的,这是一个应该在我的登台服务器中捕获的错误。我只想知道为什么前一个 URL (:localhost) 被解释为有效,而后者不是。

【问题讨论】:

  • 我认为问题出在//之前的:,您可以通过简单的字符串连接来解决...
  • 您可能还会遇到防火墙/网络问题(在产品中通常比暂存更重要)一旦您的 URL 正确(即没有额外的 ':' 正如 Fong-Wan Chau 指出的那样) ,我建议你尝试使用命令行工具(甚至是telnet)连接到数据库,看看网络是否会让你通过。
  • 是的,我的问题是为什么冒号 : 与“localhost”一起使用,而不是与 IP 地址一起使用。当然这是一个代码问题,但我只是好奇为什么它与“localhost”一起工作。 :S

标签: javascript url join


【解决方案1】:

localhost 是(几乎总是)127.0.0.1127.0.0.110.x.x.x 非常不同。

如果服务器正在侦听localhost,则只会接收来自服务器本身的连接。因此,即使输入服务器的 IP 也不足以从外部连接到它。

确保服务器正在侦听其网络 IP,而不是环回。

【讨论】:

  • 我认为这里的问题是为什么前缀 :(冒号)与“localhost”(如,URL 有效)一起使用,而不与 IP 地址一起使用。据我所知,两者都应该是无效的,但显然不是。
猜你喜欢
  • 1970-01-01
  • 2012-01-25
  • 2015-04-06
  • 2012-04-19
  • 1970-01-01
  • 2015-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多