JQuery ajax設定Request Headers例項
阿新 • • 發佈:2018-11-12
最近在為某神祕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