客戶端發起 AJAX 請求時,通過 XMLHttpRequest.setRequestHeader() 設置自定義 Header,服務端通過 $_SERVER['HTTP_ 讀取判斷。
xmlHttpRequest.setRequestHeader('X-Request-Type', 'ajax');
$.ajax({
type: 'GET',
url: '/api/user/list',
beforeSend: function(xhr) {
xhr.setRequestHeader('X-Request-Type', 'ajax');
},
success: function(data) { /* ... */ }
});
if (isset($_SERVER['HTTP_X_REQUEST_TYPE']) && $_SERVER['HTTP_X_REQUEST_TYPE'] === 'ajax') {
// AJAX 請求
} else {
// 普通請求
}
X-Request-Type、X-Requested-With),但慣例用 X-Requested-With: XMLHttpRequest (jQuery 默認發送)。HTTP_ 前綴、大寫、下劃線:X-Requested-With → $_SERVER['HTTP_X_REQUESTED_WITH']。if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest')。此方案比檢測
$_POST['ajax']等業務參數更標準、更難被偽造、不侵入業務邏輯。