django - iFrame 在 Facebook Canvas 应用程序中显示为空白

标签 django iframe nginx facebook-canvas uwsgi

我有一个非常简单的页面,我正在尝试在 Facebook iframe 中查看该页面。它是一个 Django View ,但它不依赖于请求是通过 POST 还是 GET 提交。它所做的只是返回一些简单的 HTML。

如果我们直接点击链接,它会正确显示。如果在 Firefox 中,我右键单击 iframe 并选择仅显示该框架的选项 - 那么它会正确显示。但是,当查看 Facebook 应用程序时,没有任何显示。

这是应用程序链接:http://apps.facebook.com/fireflietest/ 哪个指向http://www.fireflie.com/facebook/

这是我非常简单的 View 的代码:

from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt, csrf_protect

@csrf_exempt
def facebook(request):
    body = """
    <html>
        <head><title>Fireflie on Facebook</title></head>
        <body>Hello, Facebook!</body>
    </html>
    """
    return HttpResponse(body)

出于测试目的,我创建了一个小型 HTML 表单,可以 POST 到该页面。效果很好。我还运行了 Facebook 调试工具,“scraper”显示它正在正确提取我们的内容。

这是服务器日志,显示它两次都返回 200 OK:

24.210.144.32 - - [15/Jun/2012:18:27:18 +0000] "POST /facebook/ HTTP/1.1" 200 31 "http://apps.facebook.com/fireflietest/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.19 (KHTML, like Gecko) Ubuntu/12.04 Chromium/18.0.1025.151 Chrome/18.0.1025.151 Safari/535.19"

24.210.144.32 - - [15/Jun/2012:18:27:26 +0000] "GET /facebook/ HTTP/1.1" 200 67 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.19 (KHTML, like Gecko) Ubuntu/12.04 Chromium/18.0.1025.151 Chrome/18.0.1025.151 Safari/535.19"

最后,我尝试使用 Chrome 的开发人员工具深入研究响应对象,但在查看 iframe 版本时,看起来返回的只是内容标题。

有人知道这里发生了什么吗?或者关于如何进一步调试这个问题的任何想法?谢谢。

编辑:我将 Facebook 应用程序的 URL 复制并粘贴到同一位置。我将在这里再次复制它,以防万一我做错了什么。我不知道为什么它会抛出 404。

直接从地址栏复制并粘贴:http://apps.facebook.com/fireflietest/

更新:原来我必须关闭沙盒模式。不应该再出现 404。当然,我仍然遇到原来的问题,即我的 iFrame 显示为空。谢谢!

更新 2:(从我的 Django 用户组主题复制并粘贴)

我一直在尝试诊断这个问题。不过我不知道发生了什么。

  1. 我尝试在 Nginx 上提供一个简单的 .html 页面,看看这是否是问题所在。它没有正确服务(通过错误),但它确实显示了错误。问题是,你无法 POST 到 NGINX 中的静态页面。没什么大不了的,反正我也不想加载静态页面。

  2. 我查看了我的日志文件。事实证明,我的应用程序超时了。它没有任何意义,因为它不会在其他地方超时。

  3. 这里的一些日志显示了正在发生的特殊情况。我不确定如何调试该问题。不过,根据我正在阅读的内容 - 这就是我想象的情况。

Nginx 正确接收请求。 Nginx 将请求推送到 uWSGI 应用程序 (django)。 Django 成功获取请求。 Django 试图做出回应,但这一定是它崩溃的地方。

我不确定问题是什么——但它与 Facebook iframe 内部有关。 (我还没有检查过远程 iframe,接下来我会这样做)

uWSGI Logs:
[pid: 11059|app: 0|req: 3/4] 24.210.144.32 () {52 vars in 1170 bytes} [Tue Jun 19            14:24:03 2012] POST /facebook/ => generated 0 bytes in 444 msecs (HTTP/1.1 500) 0 headers in 0 bytes (0 switches on core 0)
[pid: 11345|app: 0|req: 1/1] 24.210.144.32 () {52 vars in 1170 bytes} [Tue Jun 19 14:24:31 2012] POST /facebook/ => generated 2970 bytes in 333 msecs (HTTP/1.1 200) 4 headers in 128 bytes (1 switches on core 0)
[pid: 11353|app: 0|req: 3/31] 24.210.144.32 () {52 vars in 1172 bytes} [Tue Jun 19 14:31:04 2012] POST /facebook/ => generated 2970 bytes in 3 msecs (HTTP/1.1 200) 4 headers in 128 bytes (1 switches on core 0)
[pid: 11954|app: 0|req: 1/14] 24.210.144.32 () {52 vars in 1216 bytes} [Tue Jun 19 14:35:04 2012] POST /facebook/ => generated 2970 bytes in 343 msecs (HTTP/1.1 200) 4 headers in 128 bytes (1 switches on core 0)
[pid: 11950|app: 0|req: 2/31] 24.210.144.32 () {52 vars in 1211 bytes} [Tue Jun 19 14:48:57 2012] POST /facebook/ => generated 2970 bytes in 3 msecs (HTTP/1.1 200) 4 headers in 128 bytes (1 switches on core 0)
[pid: 11962|app: 0|req: 4/57] 24.210.144.32 () {52 vars in 1216 bytes} [Tue Jun 19 14:53:43 2012] POST /facebook/ => generated 2970 bytes in 2 msecs (HTTP/1.1 200) 4 headers in 128 bytes (1 switches on core 0)

Nginx Error Logs:
2012/06/19 20:02:30 [error] 11164#0: *29617 readv() failed (104: Connection reset by peer) while reading upstream, client: 24.210.144.32, server: fireflie.com, request: "POST /facebook/ HTTP/1.1", upstream: "uwsgi://<commented out for security>", host:     "www.fireflie.com", referrer: "http://apps.facebook.com/253156011452899/"

Nginx Access Log:
24.210.144.32 - - [19/Jun/2012:20:02:30 +0000] "POST /facebook/ HTTP/1.1" 200 31 "http://apps.facebook.com/253156011452899/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.19 (KHTML, like Gecko) Ubuntu/12.04 Chromium/18.0.1025.151 Chrome/18.0.1025.151 Safari/535.19"
24.210.144.32 - - [19/Jun/2012:20:03:29 +0000] "-" 408 0 "-" "-"
24.210.144.32 - - [19/Jun/2012:20:03:29 +0000] "-" 408 0 "-" "-"

最佳答案

解决方案

问题出在 uWSGI 上。我不太确定为什么它不起作用——但我相信这可能与 Facebook 的 Canvas 应用程序发布的数据太少有关。无论如何,这是对我有用的修复。

我修改了我的uWSGI配置选项。我添加了以下三个选项,尽管第一个选项可能是无操作,而最后一个选项可能只是为了安全起见(它可以在没有它的情况下在我的临时站点上运行)。

<pep3333-input/>
<post-buffering>4096</post-buffering>
<buffer-size>32768</buffer-size>

关于django - iFrame 在 Facebook Canvas 应用程序中显示为空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11056283/

相关文章:

algorithm - 实时显示一段时间内最常见/重复的元素

c - nginx 模块在指令中扩展变量的最佳方式是什么?

javascript - Django:在表编辑期间未访问 View

django - 即使在将 url 添加到 ALLOWED_HOSTS 后,Heroku 仍出现 "Django DisallowedHost at/Invalid HTTP_HOST header:"错误

javascript - 将 JSON 数据作为上下文引号发送为“?

javascript - javax.xml.transform.TransformerException : iframe is not allowed in this position in the stylesheet

jquery - 当像 jQuery 中的灯箱一样单击链接时,如何在动态生成的 iFrame 中加载页面?

java - 使用 Glassfish + Nginx + Javascript 的 Websocket

python - Django 模板加载器行为? (得到 Django TemplateDoesNotExist 异常)

php - 使用 URL 或 php 在 iframe 中加载页面