繁体   English   中英

小书签提交或相关数据库操作的意外行为

[英]Unexpected behaviour on bookmarklet submit or related database action

[更新如下]

我在使用带有一些 javascript 书签功能的 mod_wsgi 在 apache 上部署站点时遇到了一些问题。 问题是书签(这是一个浏览器菜单按钮)提交到一个页面

http://stemhub.org/submit/http://the-users-link.com/here

然后返回一个表单来保存有关链接的元数据。 视图函数(flask/werkzeug 应用程序)检查数据库以查看链接是否已添加,然后返回带有预先存在或新分配的链接 ID 的表单,我想这可能会触发某种计时问题. 很奇怪,当我第一次提交链接时,我得到了http://stemhub.org/submit/http://the-users-link.com/here页面,其中包含一个“未找到”的 apache 错误,但如果我当时重新加载页面,我按预期获得表单。 错误日志包含有关线程异常的消息,但当站点按预期执行时,它们也会包含这些消息。

该应用程序在另一个端口( stemhub.org:5000上并行部署,该端口在 Tornado 上运行并且运行良好,以及本地开发版本。

以下是书签,它们可能是问题所在:

工作端口 5000 版本:

javascript:(function(){window.open('http://stemhub.org:5000/submit/'+encodeURIComponent(window.location.href),'height=200,width=150')}())

问题端口 80 版本:

javascript:(function(){window.open('http://stemhub.org/submit/'+encodeURIComponent(window.location.href),'height=200,width=150')}())

更新:由于属于另一个标签的某种原因,将 javascript 方法encodeURIComponent更改为encodeURI会使一切按预期工作,至少在 Firefox 和 Chrome 中。 但是,将来会采纳 Graham Dumpleton 关于更明智的建议的建议。

无论您的问题是什么,您在 URL 中放置第二个 URL 的方式都不适用于 Apache。 这是因为 Apache 会将重复的斜杠折叠成一个斜杠,然后该单斜杠就是 Apache 托管的应用程序将在 PATH_INFO 中看到的所有内容。

换句话说,这不是 mod_wsgi 问题,如果将其他动态 Web 应用程序托管机制与 Apache 结合使用,即使是非 Python 的,也可能发生。

顺便说一句,有些人可能会指出未修改的 URL 位于 REQUEST_URI 中,但依赖它不一定是一个好主意,因为确定如何将其拆分并将其映射到 SCRIPT_NAME 和 PATH_INFO 可能并不总是直接取决于是否重写规则在 Apache 中使用。

建议您改为调查作为查询字符串一部分的第二个 URL,而不是 URL 路径。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM