【问题标题】:CGI serving HTML not renderingCGI 服务 HTML 不呈现
【发布时间】:2014-09-24 18:03:02
【问题描述】:

我有 CGI python 程序将 HTML 作为内容(不是 URL)。流程是:

1. open http://jioworld.jioconnect.com/cgi-bin/loginpp.py
2. you get HTML form (since you have not yet login)
3. enter some dummy user and password and submit
4. you stay on same page after submit even though response html is served. So the page (response) is not rendered by browser but cookie is set
5. reload the page (hit refresh/reload)
6. page is rendered

我的问题是:为什么页面没有在第 4 步中呈现,而在重新加载时却在第 6 步中呈现。

我希望第 4 步能够呈现页面。

我已经为所有链接(如样式表、javascript、图像等)尝试了相对的、绝对的 url,但似乎只有绝对的 URL 似乎比其他链接更好。这又是一个问题,因为我也尝试将 html 的 BASE 标记设置为 / 并且它不起作用。图像等解析为 cgi-bin/images 而不是 /images。所以我将 BASE 所有 URL 设置为绝对可能导致 BASE 标记被忽略。因此,我将 BASE 标记也设置为主机的完整 URL。

【问题讨论】:

    标签: python html cgi


    【解决方案1】:

    图像等解析为 cgi-bin/images 而不是 /images。

    这很容易解决。当服务器运行您的脚本时,它会将脚本的当前工作目录 (CWD) 设置为 cgi-bin。我相信这是服务器执行此操作的常见约定,尽管我怀疑有一个 Apache 配置可以更改它。

    我已经有几年没有使用 Apache,所以我有点生疏了,但我偶尔会玩一些基本的 Web 服务器。其中一个服务器在 cgi-bin 中启动脚本,另一个在服务器的 CWD 中启动它,所以我把它放在我的 CGI 脚本中:

    #Change to parent dir if we're in cgi-bin,
    if os.path.basename(os.getcwd()) == 'cgi-bin':
        os.chdir('../')  
    

    但我不确定如何通过列表中的第 4 步解决您的问题。

    通常,您会发送一些这样的内容

    '<meta http-equiv="REFRESH" content="0;url=%s">' % href

    到浏览器,其中url 是页面的url。但我不知道这是否适合你。

    如果我们能看到 CGI 脚本,或者至少是说明问题的简化版本,也许会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-22
      • 1970-01-01
      • 1970-01-01
      • 2016-04-03
      • 2012-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多