Размещение фреймов Facebook на страницах в Cloudfront

Я переключил свою страницу Facebook на получение iframe в результате недавнего объявления Facebook что они поддерживают фреймы на страницах. Поскольку вам нужно разместить страницу iframe за пределами Facebook, я подумал, что было бы неплохо использовать Cloudfront для размещения файлов (страницы HTML, таблицы стилей CSS и изображения jpg). К сожалению, несмотря на установку разрешений для файлов Cloudfront на 744, страница iframe загружается правильно в браузере, но при вызове из Facebook я получаю это сообщение об ошибке.

Когда я размещаю те же файлы на своем сервере Media Temple, iframe на фактической странице Facebook также загружается правильно.

Есть ли причина, по которой Facebook и Cloudfront не работают вместе? Я пока не смог найти ни одного.


person Donald Jenkins    schedule 13.02.2011    source источник
comment
Хорошо, это можно сделать: но вам нужно разместить изображения на Cloudfront, а остальное содержимое на S3. Amazon предоставляет набор четких инструкций о том, как это. Проблема решена.   -  person Donald Jenkins    schedule 25.02.2011


Ответы (5)


К сожалению, Facebook загружает страницу iframe, используя HTTP POST, а не HTTP GET, и не совместим, поскольку Amazon имеет интерфейс REST и правильно использует POST для загрузки/изменения контента.

Лучший,

Дэвид Буллок

person davidjbullock    schedule 03.06.2011

Я столкнулся с этой проблемой сегодня, и это вызвало некоторые головные боли. Как указывает Дэвид Баллок, проблема заключается в том, что Facebook загружает HTML-страницу через запрос POST, но S3 (и, следовательно, CloudFront) не будет обслуживать ресурсы в ответ на это (он возвращает 405 Method Not Allowed).

Вы можете разместить свой CSS, скрипты и изображения на S3/CloudFront, но исходная HTML-страница должна быть на каком-то другом сервере. Если вы беспокоитесь о загрузке или задержке со всего мира, вы можете попробовать реализовать крошечный перенаправитель, который перенаправляет запрос Facebook POST в местоположение, кэшированное CloudFront (вам придется вернуть 303 See Other, чтобы выполнить это перенаправление, чтобы браузер сделал вместо этого запросите GET: см. RFC 2616).

person simpleigh    schedule 04.02.2016

Существует потрясающе простой способ обойти тот факт, что AWS отклоняет POST-запросы, и тот факт, что Facebook требует, чтобы вкладки страниц размещались через HTTPS: просто перенаправьте запрос через https://bit.ly/….

Да, это действительно так просто.

  1. Разместите HTML-страницу в любом месте. HTTP в порядке.

  2. Создайте сокращенный URL-адрес страницы.

  3. Используйте его — заменив https:// на http:// — в качестве «URL защищенной вкладки страницы» при создании вкладки страницы Facebook.

  4. Активируйте вкладку, используя этот недокументированный URL-адрес диалога: https://www.facebook.com/dialog/pagetab?app_id=app_id&redirect_uri=bitly_url

Бум: готово.

person Dave Land    schedule 04.05.2017

Хорошо, это можно сделать, но вам нужно разместить изображения в Cloudfront, а остальное содержимое — в S3. Amazon предоставляет набор четких инструкций о том, как это сделать. . Проблема решена.

person Donald Jenkins    schedule 25.02.2011
comment
Нет, он также должен работать, чтобы размещать все через облачный фронт. Каков URL-адрес страницы, которую вы хотите поместить в iframe? - person Martin; 25.02.2011
comment
И на самом деле, похоже, все еще существует проблема с использованием даже S3 для доставки контента в iframe Facebook: если индексная html-страница размещена на S3, я получаю это сообщение об ошибке: http://cl.ly/4q5h. Файлы и изображения javascript можно разместить на Cloudfront (сейчас они находятся на этой странице), но html нельзя разместить на либо, и по какой-то причине css тоже не может. Я подозреваю, что проблема с html связана с Facebook, но проблема с css странная. - person Donald Jenkins; 25.02.2011
comment
Контент, размещенный на S3 (идентичный контенту в Media Temple), который генерирует это сообщение об ошибке при просмотре через iframe Facebook, загружается без проблем, если вы просматриваете его напрямую: http://donaldjenkins-facebook.s3-website-us-east-1.amazonaws.com/ - person Donald Jenkins; 25.02.2011

Используйте Cloudfront, чтобы перехватить ошибку 405 и использовать свой HTML-код в качестве страницы «Пользовательский ответ на ошибку» на нужной индексной странице.

Обновлено: за это проголосовали против, однако я собираюсь помочь многим разработчикам Facebook со следующим. Последняя проблема, с которой мы столкнулись при размещении приложения facebook на S3, связана с CORS. Мы исправили ошибку 405, выполнив «Пользовательский ответ на ошибку». Подробнее см. по этой ссылке: http://blog.celingest.com/en/2014/10/02/tutorial-using-cors-with-cloudfront».-and-s3/

person Ben Holtzendorff    schedule 02.07.2015