2

你好我有一个我无法解决的问题。现在我有一个简单的 django 项目,我即将完成。几天前,我将我的静态文件和媒体文件上传到谷歌云 sql-bucket。通常,媒体文件一切正常,但当我上传静态文件时,事情开始发生。这里有一些错误消息(30+):

Access to script at 'https://storage.googleapis.com/blablabla/debug_toolbar/js/toolbar.js' from origin 'http://127.0.0.1:8000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
GET https://storage.googleapis.com/blablabla/debug_toolbar/js/toolbar.js net::ERR_FAILED
Access to font at 'https://storage.googleapis.com/blablabla/Fonts/jost/Jost-500-Medium.woff2' from origin 'http://127.0.0.1:8000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

通常 django 也不接受我的静态文件,因为它们在其他地方,但我加载了 django-cors-headers (我不知道它是全名。)并且 django 接受大多数 css 文档。这是我的 settings.py (我在粘贴时剪切了一些部分):

ALLOWED_HOSTS = ['*']
INSTALLED_APPS = [
    'honeypot',
    'ckeditor',
    'ckeditor_uploader',
    'modeltranslation',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'corsheaders',
    'Product.apps.ProductConfig',
    'captcha',
    'admin_honeypot',
]
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'corsheaders.middleware.CorsPostCsrfMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOWED_ORIGINS = (
    'http://127.0.0.1:8000',
    'http://localhost:8000',
    'https://storage.googleapis.com',
    'https://googleapis.com',
)
CSRF_TRUSTED_ORIGINS = [
    'http://127.0.0.1:8000',
    'http://localhost:8000',
    'https://storage.googleapis.com',
    'https://googleapis.com',
]

但我的问题从这里开始。例如,我有 4 个 css,例如在我的第一个 css(theme.css) 中有这样的行:

@font-face {
  font-family: "Jost";
  font-weight: 600;
  src: url(https://storage.googleapis.com/blablabla/Fonts/jost/Jost-600-Semi.woff2) format("woff2"), url(https://storage.googleapis.com/blablabla/Fonts/jost/Jost-600-Semi.woff) format("woff"), url(https://storage.googleapis.com/blablabla/Fonts/jost/Jost-600-Semi.ttf) format("truetype"); }

或在调试工具栏文档中的toolbar.js

import { $$, ajax } from "./utils.js";

此外,我所有的 css 和字体文件都在同一个谷歌存储桶中。我的网站接受 css 文档,但不接受像我粘贴的内部引用。而且我不知道错误在哪里。我到处搜索,但找不到任何解决方案。我希望有一个人可以帮助我。而且我认为这个错误不是因为 django,它可能是因为 google

4

1 回答 1

0

似乎是配置CORS的问题。我认为它在Google 文档中得到了很好的解释。

gcloud简而言之,您需要使用REST API 或您提供的编程语言库(文档中的示例)配置存储桶 cors 。Access-Control-Allow-Origin如果您设置,GCS 将添加标题origin

标头的功能在这里origin描述得很好:

如果浏览器请求中的来源与您的 CORS 配置中的来源匹配,则 Cloud Storage 会向浏览器返回 Access-Control-Allow-Origin。如果不匹配,Cloud Storage 不会在响应中包含 Access-Control-Allow-Origin。您可以提供一个通配符值来授予对所有来源的访问权限:<Origin>*</Origin>.

于 2021-02-03T10:19:36.150 回答