我有一个我继承并且必须支持的Qt应用程序。有一段代码可以生成如下所示的URL:
http://foo.bar.com:8000/#/workitem/71327434512586907410/report
然后使用setUrl
在Mac上运行正常,但在Windows上没有加载页面,我甚至看不到请求到达服务器。我发现了这个:
https://bugreports.qt.io/browse/QTWEBKIT-56
在它运行的Mac上,我没有看到服务器获取的请求中的#。但如果我删除代码中的#,我会得到404.
所以我的问题是:
网络服务器是nginx,框架是falcon。
我对此有更多信息。
当URL包含#我在nginx日志中看到时:
POST /workitem/67876029556368716590/report
请求已成功提供。
但是当URL没有#时,我会在日志中看到这个:
GET /workitem/67876029556368716590
然后返回404。
另一个更新:
我已经发现#是一个Angular JS路由器:
AngularJS routing without the hash '#'
所以现在我唯一的问题是,是否存在阻止它在Windows中运行的Qt错误。
答案 0 :(得分:1)
'#'是一个不安全的角色,应该编码。
所有不安全的字符必须始终在URL中编码。对于 例如,角色"#"必须在URL中编码,即使在 通常不处理片段或锚点的系统 标识符,以便将URL复制到另一个系统中 确实使用它们,没有必要更改URL编码。 http://www.ietf.org/rfc/rfc1738.txt
答案 1 :(得分:1)
这原来是一个大红鲱鱼。我能够修改系统,以便我不需要URL中的#,它仍然无法正常工作。原来问题是代码试图使用SSL下载jquery,并且它在没有安装SSL库的系统上不起作用。我更改了代码以从我的服务器而不是互联网下载jquery,这一切都奏效了。