0

我们分别使用 AngularJS 和 Django 前端和后端。我们面临 CORS 错误,因为我们在 installed_app 中添加了 corsheaders 并且还添加了中间件,但我们仍然面临同样的问题

我们正在使用 AngularJS v1.6.3、Django 1.10.11 和 Python 2.7。

角度控制器:

var socket = io.connect('http://192.168.13.129:8000/');

socket.on('connect', function (data) { 
    console.log('connected') 
})

在 django settings.py 中

INSTALLED_APPS = (
    'corsheaders',
)



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

CORS_ORIGIN_ALLOW_ALL=True

预期的结果是成功完成 Socket.IO CORS 请求,但我们收到以下错误:

从源“ http://192.168.13.148:8082 ”访问“ http://192.168.13.129:8000/socket.io/?EIO=3&transport=polling&t=MncX14t ”处的 XMLHttpRequest已被 CORS 策略阻止:否“ Access-Control-Allow-Origin' 标头出现在请求的资源上。

4

1 回答 1

2

许多人使用 CORS 的快速而肮脏的解决方案是通过允许所有来源来禁用它。但这为漏洞打开了大门,例如针对您的用户的 CSRF 攻击。

在您的情况下,我建议您只启用您希望接收请求的来源。从您的示例中,您想要使用的正确且安全的 Socket.IO 配置是:

sio = socketio.Server(cors_allowed_origins="http://192.168.13.148:8082")

如果您有其他来源,只需将上述参数列在列表中,然后在其中添加所有来源。A*对于内部测试是可以的,但对于生产站点来说不是一个好主意,除非你真的知道你在做什么。

于 2019-08-07T07:14:02.137 回答