关于postwoman测试django后端出现的跨域请求问题

postwoman

Postwoman是一个用于替代Postman,免费开源、轻量级、快速且美观的API调试工具。笔者被朋友推荐,于是采用这个作为后端接口的测试工具,以下是postwoman的web界面内容
关于postwoman测试django后端出现的跨域请求问题_第1张图片## 测试django接口
由于是本地的小项目,于是直接使用http://127.0.0.1:8000/xxx以get请求进行测试,然而明明这么简单的东西居然没有正常返回。于是在浏览其中按F12进入开发者模式,进入Network栏查看发现,当前请求好像除了点问题:
在这里插入图片描述大概内容就是status=blocked,transferred=CORS missing Allow Origin,然后在开发者模式查看了下响应,发现前端的确收到了后端传来的文件,但是页面当中却一直呈现network error错误,找了前端同学请教一番,原来是跨域请求的问题。

配置django处理跨域问题

笔者查看网上资源,发现了比较经典的解决方法

  • 安装第三方插件,然后配置django项目中的setting.py
    pip install django-cors-headers
  • 添加到已安装的应用程序中
INSTALLED_APPS  =(
     ... 
    ' corsheaders ',
     ... 
)
  • 添加中间件类来收听响应
MIDDLEWARE  = [
    ... 
    # 跨域请求中间件
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
     ... 
]
  • 然后在setting.py文件后添加
# 跨域允许的请求方式,可以使用默认值,默认的请求方式为:
# from corsheaders.defaults import default_methods
CORS_ALLOW_METHODS = (
    'GET',
    'POST',
    'PUT',
    'PATCH',
    'DELETE',
    'OPTIONS'
)

# 允许跨域的请求头,可以使用默认值,默认的请求头为:
# from corsheaders.defaults import default_headers
# CORS_ALLOW_HEADERS = default_headers

CORS_ALLOW_HEADERS = (
    'XMLHttpRequest',
    'X_FILENAME',
    'accept-encoding',
    'authorization',
    'content-type',
    'dnt',
    'origin',
    'user-agent',
    'x-csrftoken',
    'x-requested-with',
    'Pragma',
)

# 跨域请求时,是否运行携带cookie,默认为False
CORS_ALLOW_CREDENTIALS = True
# 允许所有主机执行跨站点请求,默认为False
# 如果没设置该参数,则必须设置白名单,运行部分白名单的主机才能执行跨站点请求
CORS_ORIGIN_ALLOW_ALL = True
  • 重新启动django服务器
    python manager.py runserver
    配置完成后,然后又测试了一下,发现还是一样的问题。可能是djangodjango-cors-headers版本的问题,笔者用2.0版,由于一些原因,将不做版本的更换。那得想想其他办法啊,想到之前做视频推流用到nginx,可以尝试用nginx配置转发,然后在nginx端来处理跨域问题(因为项目中需要部署多个服务器,如果每个django服务器都要作者么多工作,就有点麻烦了)。

nginx配置跨域问题

此文不涉及nginx安装及部署工作,只在配置文件nginx.conf上作相关工作,在nginx中,可以通过在httphttps中添加server来实现转发

http{
  server{
    listen    8081;
    location    /  {
      proxy_pass http://127.0.0.1:8000;
    }
  }
}

如上配置就可以实现将ngnix_ip:8081的所有请求发送到http://127.0.0.1:8000中,为了解决跨域问题,在server中添加

add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;

nginx.conf的对应部分变化如下

http {
     server {
         listen      8081;
     add_header Access-Control-Allow-Origin *;
     add_header Access-Control-Allow-Headers X-Requested-With;
     add_header Access-Control-Allow-Methods GET,POST,OPTIONS;

        location / {
              proxy_pass http://127.0.0.1:8000;
       }

    }
 }

配置完成后重新运行nginx,然后再在postwoman当中以nginx地址进行请求时,便可以得到测试结果了

你可能感兴趣的:(nginx,django)