1

我有一个继承并必须支持的 Qt 应用程序。有一段代码可以生成如下所示的 URL:

http://foo.bar.com:8000/#/workitem/71327434512586907410/report

然后页面加载setUrl

在 Mac 上这工作正常,但在 Windows 上没有加载页面,我什至看不到请求到达服务器。我找到了这个:

https://bugreports.qt.io/browse/QTWEBKIT-56

在它工作的 Mac 上,我在服务器获取的请求中看不到 # 。但是如果我删除代码中的 #,我会得到 404。

所以我的问题是这样的:

  1. # 在这种情况下是什么意思?
  2. 为什么需要识别此 URL?
  3. 为什么它可以在 Mac 上运行而不是在 Windows 上运行?是链接中的那个错误吗?

webserver是nginx,框架是falcon。

我对此有更多信息。

当 URL 包含我在 nginx 日志中看到的 # 时:

POST /workitem/67876029556368716590/report

请求已成功处理。

但是当 URL 没有 # 我在日志中看到这个:

GET /workitem/67876029556368716590

这将返回 404。

另一个更新:

我发现 # 是 Angular JS 路由的东西:

AngularJS路由没有哈希'#'

所以现在我唯一的问题是,是否有一个 Qt 错误阻止它在 Windows 中工作。

4

2 回答 2

1

原来这是一个大红鲱鱼。我能够修改系统,这样我就不需要 URL 中的 # 了,但它仍然无法正常工作。原来问题是代码试图使用 SSL 下载 jquery,并且它在没有安装 SSL 库的系统上不起作用。我更改了代码以从我的服务器而不是互联网下载 jquery,并且一切正常。

于 2016-03-18T00:33:24.587 回答
1

'#' 是一个不安全的字符,应该进行编码。

所有不安全的字符必须始终在 URL 中进行编码。例如,即使在通常不处理片段或锚标识符的系统中,字符“#”也必须在 URL 中进行编码,因此如果将 URL 复制到确实使用它们的另一个系统中,则无需更改网址编码。 http://www.ietf.org/rfc/rfc1738.txt

于 2016-03-14T14:07:01.143 回答