Web端 jQuery Ajax 请求总是遇到跨域的问题,但是开发的时候又不能改一次提交一次。jsonp 也解决不了 post 提交。 话说 Chrome 支持 本地编辑 js 文件,改 Bug 方便多了
为了解决跨域的问题,做了一堆实验 首先错误信息是说没有 Header 里没有 Access-Control-Allow-Origin那就加上,范围选 * 虽然生产环境这样不好但是开发就无所谓了 Ruby Sinatra 的服务器这样做之后就没问题了。
get '/csrf' do
headers \
"Access-Control-Allow-Origin" => "*"
body "csrf"
end
但是 Django 不够,除了加 header 还需要在配置里把django.middleware.csrf.CsrfViewMiddleware 注释掉或者只对某些方法加上@csrf_exempt
# ...
from django.views.decorators.csrf import csrf_exempt
# ...
# 加 header
def allowCsrf(rsp):
Origin = "*"
Methods = "POST, GET, OPTIONS"
MaxAge = "86400"
Headers = "*"
rsp["Access-Control-Allow-Origin"] = Origin
rsp["Access-Control-Allow-Methods"] = Methods
rsp["Access-Control-Max-Age"] = MaxAge
rsp["Access-Control-Allow-Headers"] = Headers
return rsp
@csrf_exempt # 如果注释掉 csrf中间件就可以不需要 @csrf_exempt 修饰符
def djcsrf(arg):
response = HttpResponse('djcsrf')
response = allowCsrf(response)
return response
以及还可以选择实用现成的 django app 稍微配置一下也行。