在JavaScript中,跨域请求是指在客户端向不同域名的服务器发送HTTP请求。由于浏览器的同源策略限制,默认情况下不允许跨域请求。但是,有一些方法可以实现跨域请求,例如使用JSONP、CORS(跨域资源共享)或者代理服务器。
<script>
标签的src属性不受同源策略限制的特点。JSONP请求实际上是动态添加一个<script>
标签,将请求的URL作为src属性的值。服务器返回的数据需要包裹在一个函数调用中,客户端需要提前定义好这个函数。示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JSONP Example</title>
<script>
function handleResponse(data) {
console.log(data);
}
</script>
<script src="http://example.com/api?callback=handleResponse"></script>
</head>
<body>
</body>
</html>
Access-Control-Allow-Origin
。客户端可以使用XMLHttpRequest或Fetch API发起CORS请求。以下是一个使用Fetch API的示例:
fetch('http://example.com/api', {
method: 'GET',
mode: 'cors',
credentials: 'include'
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
示例(使用Node.js和Express搭建的简单代理服务器):
const express = require('express');
const fetch = require('node-fetch');
const cors = require('cors');
const app = express();
const port = 3000;
app.use(cors());
app.use('/api', (req, res) => {
const url = 'http://example.com/api' + req.originalUrl;
req.pipe(fetch(url)).then(response => response.text()).then(data => res.send(data));
});
app.listen(port, () => {
console.log(`Proxy server listening at http://localhost:${port}`);
});
客户端请求代理服务器的API,代理服务器再将请求转发到目标服务器,从而实现跨域请求。