Node.js 如何检测AJAX请求和普通请求
AJAX代表异步JavaScript和XML,用于在客户端运行时向服务器发送动态请求。
在Node.js中,有两种技术可以检测AJAX请求:
- 检查请求的头部,如果包含 HTTP_X_REQUESTED_WITH 并且其值为 XMLHttpRequest ,则为AJAX请求。
- 当您发送一个AJAX请求时,会在请求的头部添加 ‘content type’:’application/json’ 。因此,如果请求包含该头部,则为AJAX请求。
- 如果 referer 头部与 host 头部不同,则为AJAX请求。
- 如果 sec-fetch-dest 头部的值为 empty ,则为AJAX请求。
对上述最后两种方法的实现:
示例1: 如果referer头部与host头部不同,则为AJAX请求:
- server.js: 创建一个名为server.js的文件,并粘贴下面的代码:
const http = require('http');
const server = http.createServer((req, res) => {
if (req.headers.host != req.headers.referer) {
console.log("It is the AJAX Request!");
}
});
server.listen(3000);
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<h1 style="color:green">GeeksforGeeks</h1>
<h3>How to detect AJAX request to normal request Node.js?</h3>
</body>
<script>
const xhr = new XMLHttpRequest();
xhr.open("GET", "http://localhost:3000", true);
xhr.send();
</script>
</html>
在终端中执行以下命令:
node server.js
打开浏览器并使用ajax.html,观察server.js的输出
注意: 该代码监听在3000端口,并在收到AJAX请求时打印一条消息。
输出: 在输出中,我正在执行server.js,然后使用HTTP协议运行ajax.html,并检测AJAX。
示例2: 如果sec-fetch-dest头部等于空,则说明是一个AJAX请求
- server.js: 创建一个名为server.js的文件,并粘贴下面的代码
const http = require('http');
const server = http.createServer((req, res) => {
if (req.headers['sec-fetch-dest'] == 'empty') {
console.log("It is the AJAX Request!");
}
});
server.listen(3000);
- ajax.html: 创建一个HTML文件并粘贴下面的代
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<h1 style="color:green">GeeksforGeeks</h1>
<h3>How to detect AJAX request to normal request Node.js?</h3>
</body>
<script>
const xhr = new XMLHttpRequest();
xhr.open("GET", "http://localhost:3000", true);
xhr.send();
</script>
</html>
在终端中执行以下命令:
node server.js
打开浏览器,并观察 server.js 的输出结果
注意: 这段代码监听3000端口,并在收到 AJAX 请求时打印一条消息
输出: 在输出中,我会执行 server.js 然后使用 HTTP 协议运行 ajax.html 并检测 AJAX