解决跨域请求 ---脚本代码中向非同源域发送http请求

下面两种情况,是不受跨域限制的,严格来讲,这两种情况只是跨站资源请求:

1)页面中的链接,重定向及表单提交是不受同源策略限制的

2)跨域资源的引入,如 < script src="" > < image src="" > < iframe > 等

第一种解决跨域请求的方式 JsonP, 缺点:只支持GET请求。

第二种解决跨域请求方式:在响应头加上响应的允许跨域的参数,告诉浏览器当前请求被服务器接受,这种跨域方式也是通用的。

写一个中间件解决

from django.utils.deprecation import MiddlewareMixin


# 中间件加响应头解决跨域问题
class MyCors(MiddlewareMixin):
    def process_response(self,request, response):
        response['Access-Control-Allow-Origin'] = '*'
        # 复杂请求会先发预检 OPTIONS
        if request.method == 'OPTIONS':
            response['Access-Control-Allow-Headers'] = 'Content-Type'
            response['Access-Control-Allow-Methods'] = 'PUT, PATCH, DELETE'
        return response

第三种方式Django框架中:下载Django-cors-headers 处理跨域请求
注册APP

INSTALLED_APPS = (
	...
	'corsheaders',
	...
)

注册中间件 这个corsheaders中间件必须在csrf跨域伪造之前

MIDDLEWARE = [   
	...
	'corsheaders.middleware.CorsMiddleware',
	'django.middleware.common.CommonMiddleware',
	...
]

setting下面添加的配置

CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ORIGIN_WHITELIST = (
	'*'
)
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',
)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值