跨域问题是浏览器同源策略限制,当前域名的js只能读取同域下的窗口属性。
当要在在页面中使用js获取其他网站的数据时,就会产生跨域问题,比如在网站中使用ajax请求其他网站的天气、快递或者其他数据接口时以及hybrid app中请求数据,浏览器就会提示以下错误。这种场景下就要解决js的跨域问题。
XMLHttpRequest cannot load http://你请求的域名. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://当前页的域名' is therefore not allowed access. 哪些情况会产生跨域问题 一个网站的网址组成包括协议名,子域名,主域名,端口号。比如 https://github.com/,其中https是协议名,www是子域名,github是主域名,端口号是80,当在在页面中从一个url请求数据时,如果这个url的协议名、子域名、主域名、端口号任意一个有一个不同,就会产生跨域问题。 即使是在 http://localhost:80/ 页面请求 http://127.0.0.1:80/ 也会有跨域问题
有很多种方法,大体上分前台解决方案和后台解决方案。 前台可以设置ajax的type为jsonp(注意,jsonp != json) 现在介绍Django后台的解决方案,特别简单。其他的,也有自己的解决方案,网上一搜一箩筐,不过,由于没有时间去尝试,需要你自己甄别了。下面仅仅介绍Django的解决方案。
pip install django-cors-header
如果报上面的问题,说明站点不可用
再上述命令后,加上 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com 即可。
这是我选取的一个可用的站点。
增加APPS
INSTALLED_APPS = (
...
'corsheaders'
)
设置中间键
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
)
增加前三个。注意,corsheaders.middleware.CorsMiddleware一定要在django.middleware.common.CommonMiddleware之前。
不用重启,就实时生效了。Django支持热加载。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。