首页 > 解决方案 > 尝试访问管理字体文件时,Django 在 AWS S3 中托管静态文件导致 CORS 错误

问题描述

我设置 Django 将所有静态文件存储在 S3 上,并使用“collectstatic”命令复制所有管理文件,当我访问管理站点时,CSS 和 JS 文件正确来自 S3 存储桶。例如:

https://bucket.s3.amazonaws.com/static/admin/css/base.css
https://bucket.s3.amazonaws.com/static/admin/js/vendor/jquery/jquery.js

但是当它尝试访问字体文件 .woff 时,我收到以下错误:

Access to font at 'https://bucket.s3.amazonaws.com/static/admin/fonts/Roboto-Light-webfont.woff' from origin 'http://localhost:8000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

奇怪的是,它让我可以访问除字体文件之外的所有文件:

在此处输入图像描述

标签: djangoamazon-s3django-rest-frameworkdjango-admin

解决方案


在 S3 Bucket Permissions > CORS 中配置以下内容修复了该问题。

[
    {
        "AllowedHeaders": [
            "Authorization"
        ],
        "AllowedMethods": [
            "GET"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": [],
        "MaxAgeSeconds": 3000
    },
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "HEAD",
            "GET",
            "PUT",
            "POST",
            "DELETE"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": [
            "ETag",
            "x-amz-meta-custom-header"
        ]
    }
]

推荐阅读