2

Facebook iframe で表示しようとしている非常に単純なページがあります。これは Django ビューですが、リクエストが POST または GET のどちらで送信されたかには依存しません。単純な HTML を返すだけです。

リンクを直接クリックすると、正しく表示されます。Firefox で iframe を右クリックし、そのフレームのみを表示するオプションを選択すると、正しく表示されます。ただし、Facebook アプリを表示すると、何も表示されません。

アプリのリンクは次のとおりです: http://apps.facebook.com/fireflietest/これはhttp://www.fireflie.com/facebook/ を指しています

私の非常に単純なビューのコードは次のとおりです。

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)

テスト目的で、そのページに POST する小さな HTML フォームを作成しました。それは正常に動作します。また、Facebook デバッグ ツールを実行したところ、「スクレーパー」がコンテンツを正しくプルしていることを示しました。

これは、両方の回で 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 ページを提供してみました。(エラーにより)適切に機能しませんでしたが、実際にはエラーが表示されました。そこにあった問題は、NGINX の静的ページに POST できないことです。とにかく、静的ページを読み込もうとしているわけではありません。

  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 "-" "-"
4

4 に答える 4

2

解決

問題は uWSGI にありました。なぜ機能しなかったのかは正確にはわかりませんが、Facebook の Canvas App POSTing のデータが少なすぎることに関係していたのではないかと思います。とにかく、これが私のために働いた修正です。

uWSGI 構成オプションを変更しました。次の 3 つのオプションを追加しましたが、最初のオプションは何もしない可能性があり、最後のオプションは安全性を確保するためだけにある可能性があります (それがなくてもステージング サイトで動作します)。

<pep3333-input/>
<post-buffering>4096</post-buffering>
<buffer-size>32768</buffer-size>
于 2012-06-21T15:47:23.583 に答える
1

Flaskを使用して、今日同じ問題だと思うことに遭遇しました。GET は正常に機能し、POST は失敗しましたが、Flask はエラーを報告せず、Firebug / Chrome Dev Tools は「接続がリセットされました」以外は何も報告しませんでした。

次に、Flask の作成者である Armin Ronacher による次のスニペットを見つけました。

http://flask.pocoo.org/snippets/47/

問題を説明し、私のために働いた修正が含まれています。バッファパラメータをいじったことを考えると、これは同じ問題であると思われます。

少なくとも問題の原因を突き止めるのに役立つことを願っています。

于 2012-10-09T15:36:01.577 に答える
1

以前は、フラッシュがインストールされていない IE で問題がありました。彼らがまだそれを修正したかどうかはわかりません。

CSRFも候補です。csrf デコレータを削除して、csrf ビュー ミドルウェアを無効にしてみてください。

ローカル マシンで試すこともできます。Facebook アプリの設定でサイト URL を localhost.local:8000 に設定するか、それらの設定で新しいアプリを作成し、localhost.local をホスト ファイルに追加します。これにより、DEBUG=True とログを取得できます。

于 2012-06-20T14:32:07.723 に答える
0

これは既知の問題のようです。この回避策は良い出発点です。

于 2012-06-15T18:55:58.963 に答える