在URL中需要#但在Qt app中的PC上不起作用

时间:2016-03-14 13:52:20

标签: qt nginx falconframework

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

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

然后使用setUrl

加载页面

在Mac上运行正常,但在Windows上没有加载页面,我甚至看不到请求到达服务器。我发现了这个:

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

在它运行的Mac上,我没有看到服务器获取的请求中的#。但如果我删除代码中的#,我会得到404.

所以我的问题是:

  1. 在这种情况下,#是什么意思?
  2. 为什么需要识别此网址?
  3. 为什么它适用于Mac而不适用于Windows?这是链接中的错误吗?
  4. 网络服务器是nginx,框架是falcon。

    我对此有更多信息。

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

    POST /workitem/67876029556368716590/report
    

    请求已成功提供。

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

    GET /workitem/67876029556368716590
    

    然后返回404。

    另一个更新:

    我已经发现#是一个Angular JS路由器:

    AngularJS routing without the hash '#'

    所以现在我唯一的问题是,是否存在阻止它在Windows中运行的Qt错误。

2 个答案:

答案 0 :(得分:1)

'#'是一个不安全的角色,应该编码。

  

所有不安全的字符必须始终在URL中编码。对于      例如,角色"#"必须在URL中编码,即使在      通常不处理片段或锚点的系统      标识符,以便将URL复制到另一个系统中      确实使用它们,没有必要更改URL编码。   http://www.ietf.org/rfc/rfc1738.txt

答案 1 :(得分:1)

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