一、跨域请求痛点最近网站新增了一个域名B用于分离不同的功能 。 但是需要复用服务器的高防等服务 , 但是服务和原有域名A绑定 , 所以新域名B需要直接去调用域名A 。
一开始想使用CNAME的方式 , 让B直接指向A 。 但是Https支持性有点问题 , 需要多域名证书 。 也考虑过反向代理 , 但是代理服务器的性能和高防等又是一个问题 。
最终决定在域名B的网页中 , 所有请求都直接去调用域名A的接口 。 于是就遇到了跨域请求的问题 。
二、跨域请求的实现方式网上找了许多资料来实现跨域请求 。 最终预估下来 , 有两种方案比较靠谱:通过iframe实现和CORS方案
三、通过iframe实现初步设想是加载一个域名A的iframe页面 , 然后通过postMessage将所有Ajax请求 , 转发给这个页面 , 通过这个页面来进行请求 , 最终将结果通过postMessage回发给外层的域名B页面 。
【奈飞|Ajax跨域请求的两种实现方式】于是开始实现:
前端使用的是React , 所以实现了一个FrameHttp.js专门用法封装ajax调用 。 调用FrameHttp.ajax将所有外部Jquery请求转发给iframe中域名A的/util/ajaxrequest页面 。
import Tools from \"../Tools\"
const FrameHttpCmd = {
INIT: 1
REQUEST: 2
REQUEST_CALLBACK: 3
class FrameHttp {
static isInit = false
static _request_buffer = [
static frame = null
static message_key = 0
static message_key_max = 10000000
static request_map = {
static init(domain) {
var the_frame = document.createElement('iframe')
let url_obj = new URL(domain)
url_obj.pathname = Tools.getUrl('/util/ajaxrequest')
the_frame.src = url_obj.toString()
the_frame.style.visibility = 'hidden'
the_frame.style.position = 'absolute'
the_frame.style.width = 0
the_frame.style.height = 0
FrameHttp.frame = the_frame
document.body.appendChild(the_frame)
window.addEventListener('message' this.onMessage)
static _initFrame() {
FrameHttp.isInit = true
console.log('(INFO)FrameHttp._initFrame')
for (let i = 0; i < FrameHttp._request_buffer.length; i++) {
let arg = FrameHttp._request_buffer[i
FrameHttp.ajax(arg)
FrameHttp._request_buffer = [
- 优爱腾刚要学,奈飞模式就崩盘?免费看片还要多久
- 日前据《纽约时报》报道|奈飞推出带有广告的低价订阅服务arpu订阅服务
- 日前据报道|奈飞推出低价订阅服务,预计下一季度继续减少200万用户
- 奈飞股价下跌,关爱优腾什么事?
- TME推音乐制作服务平台“启明星音乐助手”;奈飞正考虑进入音乐直播领域
- Netflix|奈飞要进军直播赛道,不如直接开始带货
- 一直被拿来给国内长视频“立标杆”的Netflix奈飞突然不香了。|长视频会员流失的背后
- 股价|损失1万多亿市值后 奈飞CEO坐不住了:员工不喜欢公司可以滚
- Netflix|Netflix奈飞终于向市场妥协 年底前降低订阅费 并加入广告
- Netflix(奈飞)这家流媒体之王在资本市场上的至暗时刻|奈飞做游戏,病急乱投医