0

我正在尝试通过 post 将来自 react 应用程序的表单提交到不同来源的 django 服务器。

浏览器发送一个 OPTIONS 请求,服务器上的 cors 中间件以 200 响应该请求,以及以下信息:

HTTP/1.1 200 OK
Date: Mon, 08 Apr 2019 16:34:38 GMT
Server: WSGIServer/0.2 CPython/3.7.2
Content-Type: text/html; charset=utf-8
Content-Length: 0
Vary: Origin
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: accept, accept-encoding, authorization, content-type, dnt, origin, user-agent, x-csrftoken, x-requested-with
Access-Control-Allow-Methods: DELETE, GET, OPTIONS, PATCH, POST, PUT
Access-Control-Max-Age: 86400
Connection: keep-alive

但浏览器随后从未发出 POST 请求。它在控制台中显示没有错误...

4

3 回答 3

1

尝试安装django-cors-headershttps://pypi.org/project/django-cors-headers/)应用程序并添加CORS_ORIGIN_ALLOW_ALL = True到您的 django 设置文件中。这是解决问题的最简单方法,此应用程序为您提供了许多 CORS 自定义选项。

或者您可以编写自定义中间件并为每个响应添加 CORS 标头。

否则,您可以将 CORS 标头配置添加到您的网络服务器(nginx、apache 等)。

于 2019-04-08T17:01:27.340 回答
0

事实证明,您必须添加Cache-Control才能CORS_ALLOW_HEADERS使其正常工作。某些浏览器无法将其设置为“*”。这是我的设置:

CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_METHODS = [
    "DELETE",
    "GET",
    "OPTIONS",
    "PATCH",
    "POST",
    "PUT",
]
CORS_ALLOW_HEADERS = [
    "accept",
    "accept-encoding",
    "authorization",
    "content-type",
    "dnt",
    "origin",
    "user-agent",
    "x-csrftoken",
    "x-requested-with",
    "cache-control",
    "pragma",
]
于 2021-11-23T09:51:57.133 回答
0

去检查请求响应的元素,并检查那里是否有任何“标题不允许”消息。

如果是这样,请将该标头添加到 django settings.py 中的 CORS_ALLOW_HEADER = ['that-header']

就我而言,不允许缓存控制标头。所以我添加了它,它起作用了。

于 2020-09-26T11:07:19.020 回答