js跨域請(qǐng)求

ajax跨域產(chǎn)生原因(三個(gè)同時(shí)滿足會(huì)產(chǎn)生跨域問題):
    1. 瀏覽器限制
    2. 跨域請(qǐng)求了
    3. XHR(XMLHttpRequest)請(qǐng)求

解決:
    1. 解決瀏覽器限制:
    2.不用XHR請(qǐng)求: 用JsonP(只支持get請(qǐng)求,后端需要修改)
    3. 不跨域調(diào)用(最后修改的可能都是http服務(wù)器,但是不同域的http服務(wù)器)
        * 被調(diào)用方修改,支持跨域(添加返回信息); 
        * 調(diào)用方修改,隱藏跨域
        # Filter方案, Nginx

跨域請(qǐng)求,會(huì)先看是否是簡(jiǎn)單請(qǐng)求,非簡(jiǎn)單請(qǐng)求會(huì)先檢查后調(diào)用

簡(jiǎn)單請(qǐng)求: 
    方法為GET, HEAD, POST
    請(qǐng)求header里面: 
        無自定義頭; 
        Content-Type為以下幾種: text/plain, multipart/form-data, application/x-www-form-urlencoded
常見的 非簡(jiǎn)單 請(qǐng)求:
    put, delete方法的ajax請(qǐng)求
    發(fā)送json格式的ajax請(qǐng)求
    帶自定義頭的ajax請(qǐng)求


nginx:
    啟動(dòng): start nginx
    nginx -s stop   快速關(guān)機(jī)
    nginx -s quit   優(yōu)雅的關(guān)機(jī)
    nginx -s reload 更改配置,使用新配置啟動(dòng)新工作進(jìn)程烁焙,正常關(guān)閉舊工作進(jìn)程
    nginx -s reopen 重新打開日志文件

    查看進(jìn)程: tasklist /fi "imagename eq nginx.exe"

后臺(tái)返回值

callbackfunction({"name":"wwwwwwwwwwww"});

    @RequestMapping("/gateway/data")
    public @ResponseBody String gatewayData(ModelMap model, HttpServletRequest request, HttpServletResponse response) {
        Map<String, Object> result = fundHistoryService.fundsAmountHomePage();

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("fundInvestsum", ArithmeticUtil.divStrRoundDown(result.get("tradeSum")+"","10000", 0));
        map.put("openAccountsum", result.get("openAccountAllsum"));
        map.put("companyAccountsum",2718);
        JSONObject jsonObject = JSONObject.fromObject(map);
        return  request.getParameter("callback")+"("+jsonObject.toString()+")";
    }

1. 通過script標(biāo)簽引用,寫死你需要的src的url地址

<script>
    var callbackfunction = function(data) {
        console.log('我是跨域請(qǐng)求來的數(shù)據(jù)-->' + data.name);
    };
</script>
<script src="[http://i2.mediapower.mobi/adpower/vm/Bora/js/test.js?callback=callbackfunction](http://i2.mediapower.mobi/adpower/vm/Bora/js/test.js?callback=callbackfunction)"></script>

2. 動(dòng)態(tài)創(chuàng)建script,來調(diào)用

function handleResponse(data){
        console.log('The responsed data is: '+data);
        $('.companyAccountsum').html(data.companyAccountsum);
        $('.fundInvestsum').html(data.fundInvestsum);
    }
    var script = document.createElement('script');
    //script.src = 'http://127.0.0.1:8081/yilucaifu/org/gateway/data.html?callback=handleResponse';
    script.src = 'https://www.yilucaifu.com/org/gateway/data.html?callback=handleResponse';
    document.body.insertBefore(script, document.body.firstChild);

3. JQuery的ajax,get方式

$(function(){
  $.ajax({
    async: false,
    type: "GET",
    dataType: 'jsonp',
    jsonp: 'callback',
    jsonpCallback: 'callbackfunction',
    url: "http://i2.mediapower.mobi/adpower/vm/Bora/js/test.js",
    data: "",
    timeout: 3000,
    contentType: "application/json;utf-8",
    success: function(msg) {
      console.log(msg);
    }
  });
})

$.getJSON(url + "?callback=?", data, function(data) { 
} 

4. web sockets

web sockets是一種瀏覽器的API爆捞,它的目標(biāo)是在一個(gè)單獨(dú)的持久連接上提供全雙工、雙向通信勾拉。(同源策略對(duì)web sockets不適用)
web sockets原理:在JS創(chuàng)建了web socket之后煮甥,會(huì)有一個(gè)HTTP請(qǐng)求發(fā)送到瀏覽器以發(fā)起連接。取得服務(wù)器響應(yīng)后藕赞,建立的連接會(huì)使用HTTP升級(jí)從HTTP協(xié)議交換為web sockt協(xié)議成肘。
只有在支持web socket協(xié)議的服務(wù)器上才能正常工作。

var socket = new WebSockt('ws://www.baidu.com');//http->ws; https->wss
socket.send('hello WebSockt');
socket.onmessage = function(event){
 var data = event.data;
}
//Spring注解
@CrossOrigin
//過濾器
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        // TODO Auto-generated method stub
        HttpServletResponse res = (HttpServletResponse) response;
        HttpServletRequest req = (HttpServletRequest) request;
        String origin = req.getHeader("Origin");
        if(!StringUtils.isEmpty(origin)) {
            res.addHeader("Access-Control-Allow-Origin", origin);//帶cookie這里不能用*
        }
        res.addHeader("Access-Control-Allow-Methods", "*");
        String headers = req.getHeader("Access-Control-Request-Headers");
        if(!StringUtils.isEmpty(headers)) {//這里是可以直接寫*的
            res.addHeader("Access-Control-Allow-Headers", headers);//發(fā)送json參數(shù)請(qǐng)求
        }
        res.addHeader("Access-Control-Max-Age", "3600");//預(yù)檢命令緩存時(shí)間 秒
        res.addHeader("Access-Control-Allow-Credentials", "true");//帶cookie
        chain.doFilter(request, response);
    }
//前端代理 webpack.dev.config.js
config.devServer = {
    noInfo: true,
    hot: true,
    inline: true,
    outputPath: path.join(__dirname, 'dist'),
    proxy: {
      '/ma-contract': {
        target: 'http://127.0.0.1:9999',
        secure: false,
        changeOrigin: true,
        host: '127.0.0.1'
      }
}
//Nginx代理
server{
    listen 80;
    server_name a.com;
    
    location / {
        proxy_pass http://localhost:8081;
    }
    location /ajaxserver{
        proxy_pass http://localhost:8080/ajax;
    }
}
server{
    listen 80;
    server_name b.com;
    
    location /{
        proxy_pass http://localhost:8080;
        
        add_header Access-Control-Allow-Methods *;
        add_header Access-Control-Max-Age 3600;
        add_header Access-Control-Allow-Credentials true;
        
        add_header Access-Control-Allow-Origin $http_origin;
        add_header Access-Control-Allow-Headers $http_access_control_request_headers;
        
        if ($request_method = OPTIONS){
            return 200;
        }
    }
}

//前端Ajax請(qǐng)求
/* $.ajax({
        url : base + "/get1",
        type: "get",
        dataType : "jsonp",
        success:function(json){
            console.log(json);
        }
    }); */
    /* $.ajax({//貴金所省份跨域請(qǐng)求
        url : "https://mibaoapi.hseb.com.cn/bankbranch/getProveniences.json",
        type: "get",
        dataType : "jsonp",
        success:function(json){
            console.log(json);
        }
    }); */
    
    $.getJSON(base+"/get1").then(function(result){//簡(jiǎn)單請(qǐng)求
        console.log(result);
    });
    $.ajax({//json格式請(qǐng)求
        url : base + "/postJson",
        type: "post",
        contentType:"application/json;charset=utf-8",
        data:JSON.stringify({name:"jack"}),
        success:function(json){
            console.log(json);
        }
    });
    
    $.ajax({//帶cookie的請(qǐng)求, 瀏覽器添加cookie: document.cookie = "jsession=jack"
        url : base + "/getCookie",
        type: "get",
        xhrFields:{
            withCredentials:true
        },
        success:function(json){
            console.log(json);
        }
    });
    
    $.ajax({//帶自定義頭
        url : base + "/getHeader",
        type: "get",
        headers:{
            "header1":"jack1"
        },
        beforeSend:function(xhr){
            xhr.setRequestHeader("header2","rose")
        },
        success:function(json){
            console.log(json);
        }
    });
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末斧蜕,一起剝皮案震驚了整個(gè)濱河市双霍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌批销,老刑警劉巖洒闸,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異均芽,居然都是意外死亡丘逸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門掀宋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來深纲,“玉大人仲锄,你說我怎么就攤上這事∨热担” “怎么了儒喊?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)币呵。 經(jīng)常有香客問我怀愧,道長(zhǎng),這世上最難降的妖魔是什么余赢? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任芯义,我火速辦了婚禮,結(jié)果婚禮上没佑,老公的妹妹穿的比我還像新娘毕贼。我一直安慰自己温赔,他們只是感情好蛤奢,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著陶贼,像睡著了一般啤贩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拜秧,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天痹屹,我揣著相機(jī)與錄音,去河邊找鬼枉氮。 笑死志衍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的聊替。 我是一名探鬼主播楼肪,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼惹悄!你這毒婦竟也來了春叫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤泣港,失蹤者是張志新(化名)和其女友劉穎暂殖,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體当纱,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡呛每,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了坡氯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片莉给。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡毙石,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出颓遏,到底是詐尸還是另有隱情徐矩,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布叁幢,位于F島的核電站滤灯,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏曼玩。R本人自食惡果不足惜鳞骤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望黍判。 院中可真熱鬧豫尽,春花似錦、人聲如沸顷帖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)贬墩。三九已至榴嗅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間陶舞,已是汗流浹背嗽测。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肿孵,地道東北人唠粥。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像停做,于是被迫代替她去往敵國(guó)和親晤愧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容