Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
FaceBook通过HTTP POST加载HTTPS托管的iframe应用程序(S3和CloudFront错误)_Facebook_Facebook Graph Api_Iframe_Amazon Web Services_Amazon S3 - Fatal编程技术网

FaceBook通过HTTP POST加载HTTPS托管的iframe应用程序(S3和CloudFront错误)

FaceBook通过HTTP POST加载HTTPS托管的iframe应用程序(S3和CloudFront错误),facebook,facebook-graph-api,iframe,amazon-web-services,amazon-s3,Facebook,Facebook Graph Api,Iframe,Amazon Web Services,Amazon S3,我一直在尝试编写一个允许(X-HTTP-Method-Override)的bucket策略,因为我的研究表明Facebook通过HTTP POST而不是HTTP GET加载HTTPS托管的iframe应用程序,这会导致S3和CloudFront错误 有人能帮我解决这个问题吗 如果我直接从S3提供Facebook应用程序,则S3会返回以下信息: <?xml version="1.0" encoding="UTF-8" ?> - <Error> <Code>Me

我一直在尝试编写一个允许(X-HTTP-Method-Override)的bucket策略,因为我的研究表明Facebook通过HTTP POST而不是HTTP GET加载HTTPS托管的iframe应用程序,这会导致S3和CloudFront错误

有人能帮我解决这个问题吗

如果我直接从S3提供Facebook应用程序,则S3会返回以下信息:

<?xml version="1.0" encoding="UTF-8" ?> 
- <Error>
<Code>MethodNotAllowed</Code> 
<Message>The specified method is not allowed against this resource.</Message> 
<ResourceType>OBJECT</ResourceType> 
<Method>POST</Method> 
<RequestId>B21565687724CCFE</RequestId> 
<HostId>HjDgfjr4ktVxqlIBeIlvXT3UzBNuPg8b+WbhtNHOvNg3cDNpfLH5GIlyUUpJKZzA</HostId> 
</Error>
如果我从CloudFront以S3作为源站提供Facebook应用程序,则CloudFront会返回以下内容:

错误

这项要求未能得到满足

由cloudfront生成(cloudfront)


我认为解决方案应该是编写一个bucket策略,使用X-HTTP-Method-Override。。。也许我错了。对此问题的解决方案将不胜感激。

您不能更改帖子以获取-这是Facebook加载应用程序页面的方式,因为它还将当前用户的数据作为帖子正文发送(有关更多详细信息,请参阅)。我建议你考虑修复你的应用程序,以确保它正确响应POST请求。

你不能更改POST以获取-这是Facebook加载应用程序页面的方式,因为它还将当前用户的数据作为POST正文发送(有关详细信息,请参阅)。我建议您考虑修复您的应用程序,以确保它正确响应POST请求。

您可以将Cloudfront发行版设置为允许POST方法

如果进入仪表板并编辑分发的行为 -然后选择允许的HTTP方法-GET、HEAD、PUT、POST、PATCH、DELETE和OPTIONS


这允许Facebook上的帖子进入您的源站。

您可以将Cloudfront发行版设置为允许帖子方法

如果进入仪表板并编辑分发的行为 -然后选择允许的HTTP方法-GET、HEAD、PUT、POST、PATCH、DELETE和OPTIONS


这使得Facebook上的帖子可以直接发送到您的源站。

在尝试了许多不同的方法来实现这一点后,事实证明,按照目前的情况,将帖子发送到静态内容在S3上是不可能的。即使您允许通过Cloudfront进行POST,启用CORS,更改bucket策略,以便Cloudfront源标识可以获取/放置等。它仍然会抛出错误

顺便说一句,S3并不是唯一一个对静态内容的POST请求做出响应的障碍。如果您将
nginx
配置为Facebook iframe的源站,您将得到相同的405错误,尽管您可以在一个简单的示例中解决该问题(基本上将其重写为一个隐藏的示例)。您还可以将页面(尽管仍然是静态的)更改为动态扩展(
.aspx
.php
)以解决nginx的问题

当然,您可以在S3上托管所有其他内容,只需将发布到的页面移动到其他来源。有了适当的缓存时间,您应该可以看到最小的流量,但这将意味着将您的内容保留在两个位置。我最后做的是:

  • 在自动缩放组中创建EC2实例(以防万一)以服务于内容
  • 他们使用cron作业每5分钟同步一次来自S3的内容
  • 不需要更改工作流(仍然只是将内容上载到S3)

这并不理想,也不是特别有效,但希望它能为其他人节省大量徒劳的测试,使其仅在S3上工作。

在尝试了许多不同的方法使其工作后,事实证明,按照目前的情况,将POST转换为静态内容在S3上工作是不可能的。即使您允许通过Cloudfront进行POST,启用CORS,更改bucket策略,以便Cloudfront源标识可以获取/放置等。它仍然会抛出错误

顺便说一句,S3并不是唯一一个对静态内容的POST请求做出响应的障碍。如果您将
nginx
配置为Facebook iframe的源站,您将得到相同的405错误,尽管您可以在一个简单的示例中解决该问题(基本上将其重写为一个隐藏的示例)。您还可以将页面(尽管仍然是静态的)更改为动态扩展(
.aspx
.php
)以解决nginx的问题

当然,您可以在S3上托管所有其他内容,只需将发布到的页面移动到其他来源。有了适当的缓存时间,您应该可以看到最小的流量,但这将意味着将您的内容保留在两个位置。我最后做的是:

  • 在自动缩放组中创建EC2实例(以防万一)以服务于内容
  • 他们使用cron作业每5分钟同步一次来自S3的内容
  • 不需要更改工作流(仍然只是将内容上载到S3)

这并不理想,也不是特别有效,但希望它能为其他人节省大量徒劳的测试,使其仅在S3上工作。

过去几天我一直在与S3和CloudFront抗争。我还确认,使用任何bucket策略,我们都无法将来自Facebook的POST呼叫重定向到S3静态(JS丰富)内容

唯一的解决方案似乎是Adam Comerford在本帖中提到的:

拥有一个轻型应用程序,接收Facebook呼叫,然后从S3或CloudFront获取内容


如果任何人有任何其他解决方案或想法,我们将不胜感激

过去几天,我一直在与S3和CloudFront抗争。我还确认,使用任何bucket策略,我们都无法将来自Facebook的POST呼叫重定向到S3静态(JS丰富)内容

唯一的解决方案似乎是Adam Comerford在本帖中提到的:

拥有一个轻型应用程序,接收Facebook呼叫,然后从S3或CloudFront获取内容


如果任何人有任何其他解决方案或想法,我们将不胜感激

如问题中所述,应用程序托管在S3上,而S3