【问题标题】:How to tell Faraday to preserve hashbang in site URL?如何告诉法拉第在网站 URL 中保留 hashbang?
【发布时间】:2015-05-24 07:23:33
【问题描述】:

我正在开发一个实现 Faraday 以构建 URL 的库的分支。

site = "https://example.io/#/"
path = "oauth/authorize"
connection = Faraday.new(site)
resource = Faraday::Utils.URI(path)
URL = connection.build_url(resource)

请注意,我的网站 URL 以 hashbang 结尾。但是当执行上面的代码时,法拉第完全去掉了 hashbang:

https://example.io/oauth/authorize

但是我的应用程序需要它来构建这个 URL(带有 hashbang):

https://example.io/#/oauth/authorize

现在在我撕掉法拉第和猴子修补可怕的东西之前.. 我​​可以通过在法拉第上设置一个选项来做到这一点吗?

【问题讨论】:

标签: ruby url faraday faraday-oauth


【解决方案1】:

我认为这里的答案是放弃尝试在 Faraday 中保留 URL 的哈希部分,因为 HTTP 请求会忽略该部分。

URL 的哈希部分(也称为 URI“片段标识符”)永远不会发送到服务器。它只能在客户端中有意义。通常,当 HTTP 客户端是 Web 浏览器时,片段标识符包含要滚动到的元素的名称。或者,可以通过一些 JavaScript 交互来使用 hashbang 技巧。

但是在 Faraday 中使用这样的 URL 是没有意义的,因为哈希部分无论如何都不会被发送到服务器。

【讨论】:

  • 是的,这是正确的答案。法拉第阻止它是有原因的。自己在这个问题上睡了一觉,醒来后我决定从另一边解决问题——重构目标(在本例中是一个 oauth 服务器,出于安全目的而设计用于发送完整的 URL 请求)
【解决方案2】:

在路径变量中使用“#”而不是站点变量,我将得到您需要的输出。

site = "https://example.io/"
path = "#/oauth/authorize"
connection = Faraday.new(site)
resource = Faraday::Utils.URI(path)
URL = connection.build_url(resource)

请尝试上面的代码并告诉我结果。

【讨论】:

  • 我之前没有尝试过这种精确的组合,但是它产生了相同的结果。尽管如此,我倾向于另一个答案——法拉第阻止它是有原因的。
猜你喜欢
  • 2019-07-13
  • 2015-07-27
  • 2014-06-09
  • 2014-11-04
  • 2012-07-22
  • 2019-03-16
  • 1970-01-01
  • 2013-08-30
  • 2011-08-30
相关资源
最近更新 更多