1. 程式人生 > >ajax跨域 自定義header

ajax跨域 自定義header

 

1、前端ajax設定表頭資訊兩種方式:


<script src="jquery.min.js"></script>

<script >
    $(function(){
        $.ajax({
            //第一種
            headers: {
                "params-one": "params-one-value",
                 "params-two": "params-two-value",
                 "Authorization": "params-Authorization-value"
                 
            },
            //第二種
            //beforeSend : function(request) {
          //   request.setRequestHeader("params-one",params-one-value);
            //     request.setRequestHeader("params-two",params-two-value);
            //}
            url: 'http://127.0.0.9/test',
            type: 'get',
            success: function(res) {
                    console.log(res)
                } 
        }); 
    });
</script>

2、後端php處理:

header('Access-Control-Allow-Origin:*');
header('Access-Control-Allow-Methods:GET, POST, DELETE, PUT, OPTIONS');
header('Access-Control-Allow-Headers:content-type,params-one,params-two, Authorization');

引數如下:

客戶端 按照原來的寫,你需要處理的是 服務端 響應頭的設定

1.第一步 設定響應頭

header('Access-Control-Allow-Origin:*');  //支援全域名訪問,不安全,部署後需要固定限制為客戶端網址

header('Access-Control-Allow-Methods:POST,GET,OPTIONS,DELETE'); //支援的http 動作

header('Access-Control-Allow-Headers:content-type,params-one,params-two, Authorization'); //響應頭 請按照自己需求新增。

2.第二部 瞭解IE chrome 等瀏覽器 對於 跨域請求並要求設定Headers自定義引數的時候的 "預請求"   就是如果遇到 跨域並設定headers的請求,所有請求需要兩步完成!

A 第一步:傳送預請求 OPTIONS 請求。此時 伺服器端需要對於OPTIONS請求作出響應 一般使用202響應即可 不用返回任何內容資訊。(能看到這份手稿的人,本人不相信你後臺處理不了一個options請求)

B 第二步:伺服器accepted 第一步請求後 瀏覽器自動執行第二步 傳送真正的請求。此時 大多數人 會發現請求成功了,但是 有那麼幾個人會發現 請求成功了但是沒有任何資訊返回 why?因為你自定義的請求頭在伺服器響應中不存在!

檢視console輸出 會發現一個問題:

“Access-Control-Allow-Headers 列表中不存在請求標頭 XXXXXX”【IE】,

request header field xxxxxx is not allowed by Access-Control-Allow-Header【chrome】

這是因為 你的XXXX請求頭 沒有在伺服器端被允許哦~

遇到這個問題 只有通過修改伺服器端來完成,舉例:需要設定 requesttype這麼一個自定義頭,那麼 你需要在 服務端裡面 將header('Access-Control-Allow-Headers:x-requested-with,content-type,requesttype');  同學們自行體會吧 這種語法就是根據“,”分割 自己需要設定什麼頭,必須要在 服務端請求的響應頭裡面設定好,不然客戶端永遠永遠提交不上去!

至此  JavaScript/ajax  跨域+ 修改httpheader 任務完美實現。

"人們都一直在抱怨 JavaScript同源策略限制了web前端的發展!然而是服務端做的不夠細緻!"

部分程式碼參考如下:程式碼只是提供了思想,具體步驟還要根據以上的文字 自行揣摩實現。以上內容看不懂 說明對於web一點也不瞭解,需要買本書看看嘍~