為了程序安全上的考慮,我們在某些情況下會需要檢測一個請求是否是 AJAX 請求,該如何去判斷呢?本文就簡要分享一下經驗。
1. 使用原生 JavaScript 發出 ajax 請求時,我們可以給請求頭部添加信息,以方便後端php程序進行區分,方法如下:
var xmlhttp=new XMLHttpRequest(); xmlhttp.open("GET","test.php",true); xmlhttp.setRequestHeader("X-Requested-With","XMLHttpRequest"); xmlhttp.send();
這裡我們給頭部添加了 X_REQUESTED_WITH 信息,值為 XMLHttpRequest,當然這裡的值是可以隨意設置的,比如:www.phpernote.com。這樣在接收端 php 程序裡面就可以這樣寫:
<?php // php 判斷是否為 ajax 請求 if(isset($_SERVER['HTTP_X_REQUESTED_WITH'])&&strtolower($_SERVER['HTTP_X_REQUESTED_WITH'])=='xmlhttprequest'){ // ajax 請求的處理方式 }else{ // 正常請求的處理方式 }
2. 目前比較流行的js框架jquery就考慮的比較充分,jQuery 發出 ajax 請求時,會在請求頭部添加一個名為 X-Requested-With 的信息,信息內容為:XMLHttpRequest,所以後端 php 同樣可以用如上代碼來進行判斷。
注意:如果你的jquery請求是通過iframe打開網頁的,那麼HTTP_X_REQUESTED_WITH參數不會被傳遞,也就是說你沒有辦法判斷請求的類型。