同源策略(Same origin policy)是一种约定,服务器托管网它规定了 请求的url地址,必须与浏览器上的url地址处于同域上,也就是域名,端口,协议相同,如果不一致,请求会发送成功,后端会正常响应,但是浏览器会拦截
跨域问题产生的原因:
浏览器对非同源请求返回的结果做了拦截,只要做前后端分离,就会产生跨域问题
解决跨域问题
CORS:跨域资源共享 ,向相应头中加数据,允许跨域
JSONP:利用有的标签没有跨域问题 比如script img
websocket:长连接,不存在跨域
前端代理:开发阶段用,上线不用
CORS如何解决跨域问题
首先我们需要服务端支持—-》就是服务端在相应头中加数据
CORS基本流程
CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)
简单请求:只发送一次
非简单请求:发送两次,第一次是OPTIONS请求,第二次是真正的请求
什么是简单请求,什么是非简单请求
只要同时满足以下两大条件,就属于简单请求。
1.请求方式是以下三种方式之一
HEAD
GET
POST
2.HTTP的头信息不超出以下几种字段:
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain
凡是不同时满足上面两个条件,就属于非简单请求。
解决跨域问题
方案一
统一写一个中间件,处理所有跨域
from django.utils.deprecation import MiddlewareMixin
class CorsMiddleWare(MiddlewareMixin):
def process_response(self,request,response):
if request.method=="OPTIONS":
#可以加*
response["Access-Control-Allow-Headers"]="*"
res['Access-Control-Allow-Methods'] = '*'
response["Access-Control-Allow-Origin"] = "*"
return response
方案二
使用第三方模块
# 1、使用pip安装
pip install django-cors-headers
#2、添加到setting的app中
INSTALLED_APPS = (
...
'corsheaders',
...
)
#3、添加中间件
MIDDLEWARE = [
...
'corsheaders.middleware.CorsMiddleware',
...
]
4、setting下面添加下面的配置
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_METHODS = (
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
'VIEW',
)
CORS_ALLOW_HEADERS = (
'XMLHttpRequest',
'X_FILENAME',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin服务器托管网',
'user-agent',
'x-csrftoken',
'x-requested-with',
'Pragma',
'token'
)
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: js:规范小数位数,例:10.00展示为10,10.98展示为10.98
代码 var value = 10.0; // 原始的双精服务器托管网度类型值 if (value == Math.floor(value)) { var formattedValue = parseInt(value); // 10.00 转换为 10 } …