amazon-web-services - CORS、S3 和 CloudFront 配置
问题描述
每当我尝试将文件发布到我的 S3 存储桶时,都会收到以下错误消息:
POST https://api.*.com/sermon 413
Access to XMLHttpRequest at 'https://api*.com/sermon' from origin 'https://*.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
我的 S3 ELB 存储桶配置如下(对于https://api.*.com/sermon
):
我的 Cloudfront 设置如下(对于https://api.*.com/sermon
):
我还将 CloudFront 源响应触发器设置为 Lambda 函数:
'use strict';
// If the response lacks a Vary: header, fix it in a CloudFront Origin Response trigger.
exports.handler = (event, context, callback) => {
const response = event.Records[0].cf.response;
const headers = response.headers;
if (!headers['vary'])
{
headers['vary'] = [
{ key: 'Vary', value: 'Access-Control-Request-Headers' },
{ key: 'Vary', value: 'Access-Control-Request-Method' },
{ key: 'Vary', value: 'Origin' },
];
}
callback(null, response);
};
HTTP 状态:
有什么我想念的吗?
解决方案
CORS 设置在 S3 上,但看起来您在到达 S3 之前在 CloudFront 遇到了 HTTP 413(“有效负载太大”)。所以这个问题与 CORS 本身并没有真正的关系。
HTTP 413 通常意味着超过 20 kb 的 CloudFront 请求大小或 8 kb 的 URL 长度。请注意,“请求大小”被定义为包括请求标头和查询字符串,但不包括请求正文。
所以第一件事是验证请求大小和 URL 长度限制没有被超过。并且任何有效负载都在 POST body中,而不是请求标头的一部分。
另请查看上传较小的文件(< 100 mb)是否可行,以排除有关分段上传的任何问题。
推荐阅读
- python-3.x - 如何使不和谐机器人定时静音自动 5 分钟?
- r - 在 R 中创建具有匹配名称的较小向量子集的子集数据框
- file - 文件路径访问权限
- mysql - 从重复的“MYSQL”中选择不同的匹配数据
- function - 如何使用涉及“至少来自另一台设备的另一项活动”的 CTE 进行 SQL 查询
- c++ - Arduino BLE 获得价值
- ios - 收藏视图交互在 iPhone12 pro max 上不起作用
- algorithm - “约束/最优”拓扑顺序以增强/减少其他算法的性能/内存使用
- python - Pydantic:验证嵌套模型
- powerbi - 维度中的 DAX 最大日期忽略日期过滤器