У меня очень простая страница, которую я пытаюсь просмотреть в iframe Facebook. Это представление 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)
Просто для целей тестирования я создал небольшую 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, — это заголовки содержимого.
Кто-нибудь знает, что здесь происходит? Или какие-либо идеи о том, как дальше отлаживать эту проблему? Спасибо.
Редактировать: я скопировал и вставил URL-адрес приложения Facebook в то же место. Я собираюсь продублировать это здесь снова на случай, если я сделал что-то не так. Я не уверен, почему он выдал 404.
Скопировано и вставлено прямо из адресной строки: http://apps.facebook.com/fireflietest/
Обновление: оказалось, что мне пришлось отключить режим песочницы. 404 больше не должно быть. Конечно, я все еще сталкиваюсь с исходной проблемой, заключающейся в том, что мой iFrame отображается пустым. Спасибо!
Обновление 2: (скопировано и вставлено из объявления моей группы пользователей Django)
Я пытался диагностировать эту проблему. Хотя я понятия не имею, что происходит.
Я попытался просто обслуживать простую .html-страницу на Nginx, чтобы увидеть, не в этом ли проблема. Он не работал должным образом (из-за ошибки), но на самом деле отображал ошибку. Проблема была в том, что вы не можете POST на статические страницы в NGINX. Ничего страшного, я все равно не пытаюсь загрузить статическую страницу.
Я посмотрел в своих лог-файлах. Оказывается, у моего приложения истекает время ожидания. Это не имеет никакого смысла, так как больше нигде не истекает время ожидания.
Вот несколько журналов, которые показывают, что происходит что-то странное. Я не уверен, как отладить проблему. Однако из того, что я читаю, я представляю, что происходит.
Nginx правильно получает запрос. Nginx отправляет запрос в приложение uWSGI (django). Django успешно получает запрос. Джанго пытается ответить, но тут, должно быть, что-то ломается.
Я не уверен, в чем проблема, но это как-то связано с нахождением внутри iframe facebook. (Мне еще предстоит проверить удаленные 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 "-" "-"