2016-04-04 2 views
2

состояния Facebook в их документации по установке холст:Как настроить AWS S3, чтобы POST работать как GET

Наши серверы будут делать запрос HTTP POST на этот веб-адрес. Полученный результат будет отображаться в рамке Canvas на Facebook.

Мое приложение размещается на AWS S3 в качестве статического сайта с помощью следующей конфигурации CORS:

<?xml version="1.0" encoding="UTF-8"?> 
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
    <CORSRule> 
     <AllowedOrigin>*</AllowedOrigin> 
     <AllowedMethod>GET</AllowedMethod> 
     <AllowedMethod>POST</AllowedMethod> 
     <AllowedMethod>HEAD</AllowedMethod> 
     <MaxAgeSeconds>3000</MaxAgeSeconds> 
     <AllowedHeader>Authorization</AllowedHeader> 
    </CORSRule> 
</CORSConfiguration> 

Уже у меня вопрос здесь. GET запросы работают отлично, но POST ИНГ http://my-bucket-name.s3-website-us-east-1.amazonaws.com пинками обратно:

<html> 
    <head> 
     <title>405 Method Not Allowed</title> 
    </head> 
    <body> 
     <h1>405 Method Not Allowed</h1> 
     <ul> 
      <li>Code: MethodNotAllowed</li> 
      <li>Message: The specified method is not allowed against this resource.</li> 
      <li>Method: POST</li> 
      <li>ResourceType: OBJECT</li> 
      <li>RequestId: 94159551A72424C7</li> 
      <li>HostId: +Lcz+XaAzL97Y47OZFvaTwqz4Z7r5koaJGHjZJBBMOTUHyThTfKbZG6IxJtYEbtsXWcb/bFxeI8=</li> 
     </ul> 
     <hr/> 
    </body> 
</html> 

Шаг 1:^Я думаю, что нужно, чтобы получить эту эту работу.

но ждать, есть еще

Facebook также требует безопасного URL. поэтому для этого я пошел в облачную.

Моя конфигурация выглядит следующим образом:

Cloudfront Configuration

More Cloudfront Configuration

Так же, как при работе с S3 непосредственно, делая GET запросы https://app-cloudfront-id.cloudfront.net/ работает как чемпион, размещая, ногами назад это:

<?xml version="1.0" encoding="UTF-8"?> 
<Error> 
    <Code>MethodNotAllowed</Code> 
    <Message>The specified method is not allowed against this resource.</Message> 
    <Method>POST</Method> 
    <ResourceType>OBJECT</ResourceType> 
    <RequestId>657E87A80AFBB3B0</RequestId> 
    <HostId>SY2g4smvhr06kAAQYVMsYeQZ+pSKbIIvsh/OaPBiMADGt5UKut0sXSZkFsnFmcRXQ2PFBVgPK4M=</HostId> 
</Error> 

Просмотр приложения на facebook.com показывает:

app on facebook

ли я что-то отсутствует?

+0

Это не проблема CORS. Facebook делает запрос POST вашему приложению, отправив скрытую форму, он не запрашивает ваш URL через AJAX. – CBroe

+0

@CBroe Я почти уверен, что это проблема CORS. AWS отклоняет запросы POST, независимо от того, делаю ли я их через клиент REST или посетив страницу facebook (см. Скриншот, который я добавил, также извиняюсь за мой плагин XML, который выглядит странно на снимке экрана) – drewwyatt

+1

_ «AWS отклоняет POST запрос "_ - и именно поэтому это не проблема CORS. (CORS будет работать только в том случае, если ваш браузер выполняет междоменные запросы через JS), и в этом случае _browser_ откажется выполнить запрос, если удаленная конечная точка не включена с поддержкой CORS. Однако у вас есть _server_ говорит: «POST? Я не знаю, что с этим делать». http://stackoverflow.com/a/32036032/1427878 – CBroe

ответ

4

так что - я тоже думал, что это должно быть легко и хорошо поддержано AWS в 2016 году. По-видимому, из всего прочитанного я сделал, мы ошибаемся.

Невозможно обслуживать индексную страницу для приложения facebook с s3 - с облачным или без него.

Возможно, можно будет обслуживать индексную страницу из альтернативного источника (т. Е. Ваш собственный httpd, работающий где-то) через облачный экран и все остальное от s3 - но я не пытался вникнуть в эту кроличью нору. И если вам все еще нужно запустить свой собственный HA httpd ... сложность может не стоить того, что зависит от вашей шкалы активов. т.е. http://www.bucketexplorer.com/documentation/cloudfront--how-to-create-distributions-post-distribution-with-multiple-origin-servers.html

вы -can- используйте облачную перед вашим собственным источником httpd, обслуживая статический контент, чтобы воспользоваться кешем и распределением краев - он просто отправит POST (и PUT и т. д.) в исходное состояние и обходит край кеша.

Эти ответы старые, около 2011 года, но я не могу найти никаких доказательств того, что с этим что-то изменилось.

https://forums.aws.amazon.com/thread.jspa?messageID=228988&#228988

https://forums.aws.amazon.com/thread.jspa?threadID=62525

Надеюсь, мы можем получить некоторую активность на эту тему, чтобы доказать, что я неправ, я мог бы использовать это прямо сейчас тоже.

+1

. Это также вывод, к которому я пришел. FWIW: Вот скверное обходное решение, которое я использую: http://www.webmasterymadesimple.com/blog/hosting-facebook-iframe-canvas-pages-on-cloudfront-solved.html – drewwyatt

+2

ха-ха, это не совсем плохо взломать - хотя вы бы беспокоились о влиянии ограничения скорости битти для запросов, если у вас есть какой-то трафик в масштабе. – keen

0

Попробуйте создать страницу в качестве объекта ответа для функции лямбда и использовать ApiGateway для создания маршрута обработки обработки страницы.

Оставьте статический контент на S3, CloudFront для поддержки SSL и Lambda для любой динамической обработки страниц.

 Смежные вопросы

  • Нет связанных вопросов^_^