浏览器向Django发出OPTIONS请求以进行CORS请求,但没有POST

时间:2019-04-08 16:44:49

标签: django cors django-cors-headers

我正在尝试通过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请求。它在控制台中没有显示错误...

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

如果是这样,请在Django设置中将该标头添加到CORS_ALLOW_HEADER = ['that-header']。

在我的情况下,不允许使用缓存控制标头。所以我添加了它,它起作用了。