window.addEventListener('message' this.onMessage)
render() {
return null
export default AjaxRequest
如此实现后 , 发现iframe因为跨域问题无法加载
因为后端是由Django实现的 , 经过查阅发现 , 在views中需要进行处理 , 添加xframe_options_exempt装饰器 , 实现跨域加载iframe 。
@xframe_options_exempt
def indexCross(request *args **kwargs):
return render(request 'index.html' {)
功能能够正常请求 , 但是请求中cookie并没有正常传送 。
经过排查发现 , 对于跨域的iframe , google浏览器默认对于cookie中SameSite这个参数是LAX , 会导致只有同源才能设置服务器返回的Set-Cookie 。 所以需要将服务器返回的Set-Cookie中指定SameSite为None , 这样前端才能成功设置Cookie 。
于是服务端Django引入了中间件django-cookies-samesite 。 settings.py进行如下修改:
INSTALLED_APPS = [
...
'corsheaders'
...
# 中间件request按照注册顺序顺序执行 , response按照注册顺序倒序执行
MIDDLEWARE = [
'django_cookies_samesite.middleware.CookiesSameSite' # 此处response需要最后执行
...
SESSION_COOKIE_SECURE = True
SESSION_COOKIE_SAMESITE = 'None'
至此实现了iframe方式跨域 。
四、CORS方案这个需要前端Jquery加入两个参数:
jquery.ajax({
...
xhrFields: {
withCredentials: true
crossDomain: true
)
然后服务端需要开启跨域请求支持 。 Django下引入中间件django-cors-headers 。 settings.py下如下设置:
MIDDLEWARE = [
...
'corsheaders.middleware.CorsMiddleware' # 这个位置越高越好 , 至少要高于CommonMiddleware
...
# 跨域配置
CORS_ALLOW_CREDENTIALS = True
# CORS_ORIGIN_ALLOW_ALL = True
CORS_ORIGIN_WHITELIST = [
'https://www.xxx.com'# 域名B
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'
'cache-control'
此方案也需要和iframe一样 , 解决cookie中SameSite的问题 。
至此CORS方案跨域也实现了 。
- 优爱腾刚要学,奈飞模式就崩盘?免费看片还要多久
- 日前据《纽约时报》报道|奈飞推出带有广告的低价订阅服务arpu订阅服务
- 日前据报道|奈飞推出低价订阅服务,预计下一季度继续减少200万用户
- 奈飞股价下跌,关爱优腾什么事?
- TME推音乐制作服务平台“启明星音乐助手”;奈飞正考虑进入音乐直播领域
- Netflix|奈飞要进军直播赛道,不如直接开始带货
- 一直被拿来给国内长视频“立标杆”的Netflix奈飞突然不香了。|长视频会员流失的背后
- 股价|损失1万多亿市值后 奈飞CEO坐不住了:员工不喜欢公司可以滚
- Netflix|Netflix奈飞终于向市场妥协 年底前降低订阅费 并加入广告
- Netflix(奈飞)这家流媒体之王在资本市场上的至暗时刻|奈飞做游戏,病急乱投医