`
phpseyo
  • 浏览: 158504 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

通用跨域请求代理文件

阅读更多
<script type="text/javascript">
document.domain = 'test.cn';

var $ = {}; 
$.xho = function () { //创建xmlhttprequest对象 
    var http_request = null; 
    if (window.XMLHttpRequest) { //Mozilla 浏览器 
        http_request = new XMLHttpRequest(); 
        if (http_request.overrideMimeType) {//设置MIME类别 
            http_request.overrideMimeType("text/xml"); 
        } 
    } 
    else if (window.ActiveXObject) { //IE浏览器 
        try { 
            http_request = new ActiveXObject("Msxml2.XMLHTTP"); 
        } catch (e) { 
            try { 
                http_request = new ActiveXObject("Microsoft.XMLHTTP"); 
            } catch (e) { } 
        } 
    } 
    return http_request; 
};

$.rsc = function (obj, callfunc) { 
    return function () { 
        if (obj.readyState == 4) { 
            if (obj.status == 200) { 
                callfunc(obj.responseText); 
            } 
        } 
    };
};

$.GET = function (url, callfunc) { 
    var xho = $.xho(); 
    if (xho == null) return; 
    xho.onreadystatechange = $.rsc(xho, callfunc); //设置回调函数 
    //第三个参数指定在等待服务器返回信息的时间内是否继续执行下面代码,如果为true,则不会继续执行,默认为true 
    xho.open("GET", url, true); 
    xho.setRequestHeader("X-Requested-With", "XMLHttpRequest");
    xho.send(null); 
};

$.POST = function (url, data, callfunc) {
    var xho = $.xho(); 
    if (xho == null) return; 
    xho.onreadystatechange = $.rsc(xho, callfunc); //设置回调函数 
    xho.open("POST", url, true); 
    xho.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); //post请求必须修改MIME类别 
    xho.setRequestHeader("X-Requested-With", "XMLHttpRequest");
    xho.send(data); 
};

function call(func, param)
{
    func = eval('parent.window.' + func);
    func(param);
}


function isJson(obj){
    var isjson = typeof(obj) == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length;    
    return isjson;
}

function isEmpty(obj) {
    for(var prop in obj) {
        if(obj.hasOwnProperty(prop))
            return false;
    }
    return true;
}

function json2Query(params) {
    tail = [];
    for (var p in params) {
        if (params.hasOwnProperty(p)) {
            tail.push(p + "=" + encodeURIComponent(params[p]));
        }
    }
    return tail.join("&")
}

var invokeApi = function(api, param, method, callback) {
    var m = (!method || method.toLowerCase() == 'get') ? 'get' : 'post';
    if ('get' == m) {
        debugger
        if (isJson(param) && ! isEmpty(param)) {
            param = json2Query(param);
        }

        if (param) {
            api = (api.indexOf('?') == -1) ? api + '?' + param : api  + '&' + param;
        }


        $.GET(
            api,
            function(data){
                call(callback, data);
            }
        )
    } else {
        if (isJson(param)) {
            param = json2Query(param);
        }
        $.POST(
            api,
            param,
            function(data) {
                call(callback, data);
            }
        )
    }
}

</script>

 说明:比如 a.test.cn的js想发送请求到 b.test.cn,这时只需要在 b.test.cn 的根目录新增一个 proxy.html ,内容为上面的代码。然后在 a.test.cn 下新建一个html文件,内容如下:

<script type="text/javascript">

mod = {};

mod.submod = function() {

    var ifr_win = '';

    var init = function() {
        load_iframe();
    }

    var load_iframe = function() {
            document.domain = 'test.cn';
            var ifr = document.createElement('iframe');
            ifr.src = 'http://b.test.cn/proxy.html';
            ifr.style.display = 'none';
            ifr.id = 'proxy_ifr';
            document.body.appendChild(ifr);
            ifr.onload = function() {
                ifr_win = ifr.contentWindow;
            };
    };

    var cb = function(msg) {
        console.log(msg);
    }

    var get_dl = function() {
        ifr_win.invokeApi(
            'http://b.test.cn/ajax/dl',
            {"id":13082, "from":"office", "app":"helper", "file_type":1},
            'POST',
            'mod.submod.cb'
        );
    }

    var get_preview = function() {
        ifr_win.invokeApi(
            'http://b.test.cn/ajax/preview',
            {"mb_id":12269, "moban_type":"2", "app":"helper", "file_type":2},
            'GET',
            'mod.submod.cb'
        );
    }

    return {
            init : init,
            cb : cb,
            get_dl : get_dl,
            get_preview : get_preview
    };
}();

mod.submod.init();

setTimeout("mod.submod.get_dl()", 500);

setTimeout("mod.submod.get_preview()", 500);

</script>

 

分享到:
评论

相关推荐

    跨域下载文件

    3. **代理服务器**:在服务器端设置一个代理,将跨域请求转发到实际的资源服务器。这种方法可以绕过同源策略,但增加了服务器的负担。 4. **使用`HttpWebRequest`类**:在.NET中,我们可以使用`HttpWebRequest`发起...

    解决ajax跨域问题

    在前端应用和目标服务器之间架设一个代理服务器,所有跨域请求都先发往代理服务器,由代理服务器转发给目标服务器,再将结果返回给前端。这样,所有的通信都在同一源下进行,规避了跨域问题。 4. document.domain ...

    js跨域问题解决方案.

    通过设置一个代理服务器,所有跨域请求都先发送到代理服务器,由代理服务器转发到目标服务器,这样可以绕过浏览器的同源策略。 #### 3.4 document.domain 如果子域和父域是相同的顶级域名,可以通过设置`document....

    vue中axios解决跨域问题和拦截器的使用方法

    具体而言,可以在项目的config目录下的index.js文件中配置dev选项下的proxyTable,从而将请求代理到目标服务器。例如,可以配置一个代理规则,将所有以/api开头的请求代理到***。这样在开发过程中,我们可以简化请求...

    Angular4开发解决跨域问题详解

    否则,浏览器将禁止跨域请求。 反向代理是解决跨域问题的一种方法。反向代理方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求...

    ArcGis代理.Net版本proxy.ashx

    代理服务作为中介,可以转发请求并返回结果,解决跨域问题。 2. **安全性增强**:通过代理服务,可以集中管理认证和授权,例如,动态获取和附加token,避免敏感信息(如用户名和密码)暴露在客户端代码中。 3. **...

    文件下载。点击连接弹出对话框。

    - `Content-type: application/octet-stream`: 指明文件类型为二进制流,这是通用的文件类型,适用于各种文件格式。 - `Accept-Ranges: bytes`: 表明服务器支持按范围请求数据。 - `Accept-Length: ...`: 指定...

    js实现跨域访问的三种方法

    最后,后台代理方式是一种解决跨域问题的通用方案。它不依赖于浏览器端的特殊设置,而是通过服务器端进行中转。在客户端发起请求时,请求首先到达开发者的服务器(本域),然后由服务器向目标域(其他域)发起请求。...

    代理之狐源代码 ProxyFox

    HTTP代理在数据爬取、跨域访问和安全控制等方面有广泛应用。 3. **源代码分析**: - `ProxyFox.aps`:这是Visual Studio的工程文件,用于构建和管理ProxyFox项目。 - `ProxyFox.clw`:可能是Visual Studio的工作...

    superagent-一个很小渐进的HTTP请求库

    由于跨域资源共享(CORS)是现代Web开发中的常见需求,`superagent`自动处理预检请求(OPTIONS),并且可以设置相应的请求头以支持CORS。 **9. 插件系统** `superagent`的插件系统允许开发者扩展其功能,例如添加...

    行业网站代码

    2. daili.asp:这个名字可能是“代理”或“代理服务”的意思,这可能是一个处理代理请求的页面,比如数据获取、用户身份验证或跨域请求。 3. SmallClass1.asp 和 SmallClass.asp:可能表示的是小型分类或子分类的...

    axios-0.11.0.zip

    7. **自动转换XMLHttpRequest级别2**:在浏览器中,Axios 使用XMLHttpRequest Level 2,支持跨域请求,进度事件,以及上传和下载进度。 8. **错误处理**:对于网络错误或服务器返回的状态码不在2xx范围内的情况,...

    mapproxy-Tomcat下proxy.cgi设置实例

    首先,`proxy.cgi`是一种通用的HTTP代理脚本,通常用Perl或Python编写,用于处理跨域请求。在OpenLayers中,当需要通过JavaScript访问不同源的地图服务时,由于浏览器的同源策略限制,我们需要设置一个代理来转发...

    vue配置1

    在这个例子中,所有以`/api`开头的请求会被代理到`http://api.example.com`,`changeOrigin`设置为`true`表示允许跨域,`pathRewrite`则用于重写路径,使得API请求在本地看起来像是直接向目标服务器发送的。...

    浅谈在Vue-cli里基于axios封装复用请求

    这里的`/api`是我们的前缀,所有以`/api`开头的请求都将被转发到指定的目标服务器`http://47.95.xxx.246:8080`,并且`changeOrigin`设置为`true`,允许跨域请求。 在主入口文件`main.js`中,我们将axios挂载到Vue...

    web javaScript 获取终端ip 获取本地ip 获取本机ip地址,403报错解决方案

    - 它利用 `&lt;script&gt;` 标签不受同源策略限制的特点,通过动态插入 `&lt;script&gt;` 标签来实现跨域请求。 4. **IP 地址**: - IP 地址是互联网协议地址,用于唯一标识连接到互联网的设备。 - 在前端开发中,有时需要...

    小米2019秋招安全开发笔试题.docx

    CORS(跨源资源共享)是允许浏览器向不同源发送请求的机制,而不是产生跨域攻击的方式。 8. **Linux 文件系统权限**: - 只读权限对应的数值是 a. 4。 9. **反弹 shell 命令**: - `bash -i &gt;& /dev/tcp/192.168...

    react项目学习(一)全球新闻发布管理系统(项目创建与配置)

    在项目构建过程中,我们将涉及到scss预处理器的使用以及设置反向代理,以解决跨域问题。 首先,让我们深入了解`scss`。Sass (Syntactically Awesome Style Sheets) 是一种CSS预处理器,它扩展了CSS的功能,允许我们...

Global site tag (gtag.js) - Google Analytics