PHP - 我测试了以下代码,但以下标题似乎并不发送它是javascript发送请求而不是非JavaScript用户
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
AlexaToolbar-ALX_NS_PH:AlexaToolbar/alxg-3.2
Connection:keep-alive
Content-Length:146
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryA9tyz4BRlSglKAWC
Cookie:PHPSESSID=2dc90d7cfbcb6058d1ca02fd6144c3bf
Host:dev.r.com
Origin:http://dev.r.com
Referer:http://dev.r.com/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36
以下是我想用来判断是否ajax的代码
define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
if(!IS_AJAX)
{
die('Restricted access');
}
这是我使用的javascript
function sendstatus(){
var status = document.getElementsByName("status").value;
var uri = "/statusupdate";
var xhr = new XMLHttpRequest();
var fd = new FormData();
xhr.open("POST", uri, false);
xhr.onreadystatechange = function()
{
if (xhr.readyState == 4 && xhr.status == 200)
{
var r = xhr.responseText;
// Handle response.
alert(xhr.responseText);
}
}
fd.append('status', status);
// Initiate a multipart/form-data upload
xhr.send(fd);
return false;
}
如果有人知道为什么它不知道这是一个xmlhttprequest它会非常有帮助。
答案 0 :(得分:0)
请查看jQuery源代码的第67-74行 https://github.com/jquery/jquery/blob/master/src/ajax/xhr.js
if ( !options.crossDomain && !headers["X-Requested-With"] ) {
headers["X-Requested-With"] = "XMLHttpRequest";
}
// Set headers
for ( i in headers ) {
xhr.setRequestHeader( i, headers[ i ] );
}
我知道,Apache2会收到这些标题,因此您可以检测到 如果调用是否是Ajax。