代码之家  ›  专栏  ›  技术社区  ›  unmounted

mod \u wsgi bookmarklet提交或相关数据库操作的意外行为

  •  1
  • unmounted  · 技术社区  · 14 年前

    [更新如下]

    我在apache上部署一个带有mod\uwsgi和一些javascript bookmarklet功能的站点时遇到了一点问题;alpha站点在这里可用: stemhub.org

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

    然后返回一个表单来保存关于链接的元数据。view函数(flask/werkzeug应用程序)检查数据库以查看是否已经添加了链接,然后返回带有预先存在或新分配的链接id的表单,我认为这可能会触发某种计时问题。很奇怪,当我第一次提交链接时,我得到了 http://stemhub.org/submit/httphttp://the-users-link.com/here

    在另一个端口上有应用程序的并行部署-- stemhub.org:5000 --这是运行在龙卷风和工作良好,以及当地的发展版本。

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

    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

    1 回复  |  直到 14 年前
        1
  •  2
  •   Graham Dumpleton    14 年前

    不管您的问题是什么,在URL中放置第二个URL的方式在Apache中都不起作用。这是因为Apache会将重复的斜杠折叠成一个斜杠,而这个斜杠就是Apache托管的应用程序在PATH\u INFO中看到的全部内容。

    换句话说,这不是mod\uwsgi问题,如果将其他动态web应用程序宿主机制与Apache(甚至非Python)结合使用,则可能会发生这种问题。

    顺便说一句,有些人可能会指出,未修改的URL位于REQUEST\u URI中,但依赖于此并不一定是一个好主意,因为根据Apache中是否使用了重写规则,解决如何将其拆分并映射到SCRIPT\u NAME和PATH\u INFO可能并不总是直接的。