1. 程式人生 > >JQuery ajax設定Request Headers例項

JQuery ajax設定Request Headers例項

最近在為某神祕OJ測試介面,其中一項是需要用到請求頭token,即在使用者登陸後,後臺給它分配一個token,返回給前端,之後該使用者每次請求都需要在http頭部加上請求頭!
先講一下這個東西是啥先吧!

Token認證機制實現

JSON Web Token(JWT)是一個非常輕巧的規範。這個規範允許我們使用JWT在使用者和伺服器之間傳遞安全可靠的資訊。
具體這裡推薦一篇部落格,就不搬過來了!基於Token的WEB後臺認證機制

傳遞token的作用

防止表單重複提交

主要原理是:使用者提交表單後,會攜帶token到伺服器,伺服器將session中的token和使用者請求帶過來的token進行比較,如果相同,會將session中的token進行更新。若使用者重複提交,則使用者之後發過來的請求的token和伺服器session中的token是不一致的,所以會導致之後的表單提交操作失敗。

防止anti csrf 攻擊(跨站點請求偽造)

如果使用者是跨站點偽造的請求,在驗證token的時候會發現客戶端請求的token和伺服器session中的token是不一致的,所以會導致請求的失敗。

ajax中傳遞token的兩種方法

放在請求頭中
 $.ajax({
                type: "post",
                url: "http:///test/getInfo",
                headers: {      //請求頭
                    Accept: "application/json; charset=utf-8",
                    token: "" + token  //這是獲取的token
                },
                data:JSON.stringify(jsonDate),
                contentType: "application/json",  //推薦寫這個
                dataType: "json",
                success: function(data){
                	console.log('ok');
                },
                error:function(){
                    console.log('error');
                }
            })
使用beforeSend方法設定請求頭
 $.ajax({
                type: "post",
                url: "http://aliyun.seatang.cn:8080/onlinejudge/test/getInfoById",
                beforeSend: function(request) {      //使用beforeSend
                    request.setRequestHeader("token", token);
                     request.setRequestHeader("Content-Type","application/json");
                 },
                data:JSON.stringify(jsonDate),
                dataType: "json",
                success: function(data){
                    console.log('ok');
                },
                error:function(){
                    console.log('error');
                }
            })

上面為什麼要推薦contentType 設定為"application/json"呢,是因為如果我們傳送的資料是一個複雜的json物件時,預設的application/x-www-form-urlencoded 這種形式是沒有辦法將複雜的 JSON 組織成鍵值對形式,然後請求就會報錯

這裡推薦一篇博文,感覺不錯
$.ajax 中的contentType