好的,所以我相信正确的做法是这样的:
if request.method == "POST": response = HttpResponse(simplejson.dumps(data),mimetype='application/json') response['Access-Control-Allow-Origin'] = "*" return responseelif request.method == "OPTIONS": response = HttpResponse("") response['Access-Control-Allow-Origin'] = "*" response['Access-Control-Allow-Methods'] = "POST, OPTIONS" response['Access-Control-Allow-Headers'] = "X-Requested-With" response['Access-Control-Max-Age'] = "1800"else: return HttpResponseBadRequest()这是基于我根据预检请求从Mozilla挖掘而来的文档。
所以,我相信会发生的是:
- 如果预检缓存中没有任何内容,则将
OPTIONS
其X-Requested-With
设置为发送,XMLHttpRequest
我相信这是必要的,以允许Javascript和Origin
标头访问任何内容。 - 服务器可以检查该信息。 这就是CORS的安全性 。就我而言,我的回答是“任何来源都可以”和“允许您发送
X-Requested-With
东西”。我是说OPTIONS
并且POST
被允许,并且此响应应该被缓存30分钟。 - 然后,客户端继续进行先前的POST。
- 我最初将响应修改为包括
Allow-Methods
,Allow-Headers
但是根据上面链接的文档中的交流,这不是必需的。这很有意义,访问检查已经完成。 - 我相信那会发生什么是这里描述的资源共享检查。基本上,一旦提出要求,浏览器就会再次检查该
Allow-Origin
字段的有效性,例如POST
。如果通过,则客户端可以访问数据,否则,请求已经完成,但浏览器拒绝实际的客户端应用程序(Javascript)访问该数据。
我认为这是对正在发生的事情的正确总结,无论如何它似乎都起作用。如果我不对,请大喊。



