Значки Font-awesome не загружаются после подключения к AWS - PullRequest
0 голосов
/ 30 апреля 2020

Я занимаюсь проектом по разработке сайта. Я выбрал Django для моего бэкэнда. Я загрузил свои stati c файлы в корзину Amazon s3. Все мои CSS файлы и изображения и каждый файл stati c загружаются, кроме значков из font-awesome. Я пытался использовать их CDN. Пока нет результата.

  <link href="{% static 'vendor/fontawesome-free/css/all.min.css' %}" rel="stylesheet">
  <link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">

Я не вижу результатов вообще. URL моего сайта: https://fine-arts-club.herokuapp.com/

1 Ответ

1 голос
/ 01 мая 2020

Обычно это вызвано неправильно настроенной обработкой CORS.

Откройте инструменты разработчика браузера. Если есть ошибка, в которой говорится, что Font Awesome не может быть загружен, поскольку он заблокирован политикой CORS, это является причиной.

Для решения этой проблемы необходимо установить заголовок HTTP access-control-allow-origin.

Установка значения на * разрешит любой домен.

access-control-allow-origin: *

Вы можете установить значение заголовка для указанного c домена. Обычно это лучший вариант для файлов, размещенных на определенном c сайте.

access-control-allow-origin: https://www.your-domain.com

Существует два способа установить заголовок CORS. Вы можете создать политику в своей корзине S3 или изменить заголовок, используя функцию Lambda@Edge.

Конфигурация S3

Как добавить документацию CORS

Документация по конфигурации CORS

<CORSConfiguration>
 <CORSRule>
   <AllowedOrigin>*</AllowedOrigin>
   <AllowedMethod>GET</AllowedMethod>
   <AllowedHeader>https://www.your-domain.com</AllowedHeader>
 </CORSRule>
</CORSConfiguration>

Lambda@Edge Функция

Вы также можете добавить HTTP-заголовок access-control-allow-origin, используя функцию Lambda@Edge. Вероятно, это излишне для того, что вам нужно, но может быть полезно, если есть более сложные настройки.

Для этого вам нужно создать функцию Lambda в US-East-1.

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

exports.handler = async (event, context) => {
    const request = event.Records[0].cf.request;
    const response = event.Records[0].cf.response;

    // Add logic here
    let cors = "something";

    response.headers['access-control-allow-origin'] = [{ key: 'Access-Control-Allow-Origin', value: cors }];

    return response;
};

После создания функции Lambda вы можете добавить ее в свой дистрибутив CloudFront, отредактировав поведение и добавив свою функцию в Связи лямбда-функций как «Ответ зрителя» или «Исходный ответ».

Я бы рекомендовал использовать метод S3 почти во всех ситуациях.

...