在 JavaScript 中,跨域請求可以通過以下幾種方式實(shí)現(xiàn):
JSONP 是一種通過動(dòng)態(tài)創(chuàng)建 <script>
標(biāo)簽來實(shí)現(xiàn)跨域請求的方法。它的基本思想是利用瀏覽器允許跨域引用 JavaScript 腳本的特性,將請求數(shù)據(jù)包裹在一個(gè)回調(diào)函數(shù)中,并通過 <script>
標(biāo)簽的 src
屬性將數(shù)據(jù)傳遞給父頁面。
function jsonpCallback(data) {
console.log("收到數(shù)據(jù):", data);
}
const script = document.createElement("script");
script.src = "https://example.com/data?callback=jsonpCallback";
document.body.appendChild(script);
服務(wù)器端需要將數(shù)據(jù)包裹在 jsonpCallback
函數(shù)中,并設(shè)置 Content-Type
為 application/javascript
。
CORS 是一種更為現(xiàn)代的跨域解決方案,它允許服務(wù)器通過設(shè)置響應(yīng)頭來指定哪些源可以訪問其資源。要使用 CORS,需要在服務(wù)器端配置允許跨域請求的響應(yīng)頭。
例如,在 Node.js 的 Express 框架中,可以使用以下代碼配置 CORS:
const express = require("express");
const app = express();
app.use((req, res, next) => {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
// 其他路由和中間件
如果你無法修改服務(wù)器端的配置,可以考慮使用代理服務(wù)器來實(shí)現(xiàn)跨域請求。代理服務(wù)器可以接收客戶端的請求,然后將請求轉(zhuǎn)發(fā)給目標(biāo)服務(wù)器,并將響應(yīng)返回給客戶端。這樣,客戶端就可以繞過瀏覽器的跨域限制。
例如,在 Node.js 中,可以使用 http-proxy-middleware
庫來創(chuàng)建一個(gè)簡單的代理服務(wù)器:
const express = require("express");
const { createProxyMiddleware } = require("http-proxy-middleware");
const app = express();
app.use("/api", createProxyMiddleware({
target: "https://example.com",
changeOrigin: true,
pathRewrite: {
"^/api": "",
},
}));
// 其他路由和中間件
這樣,當(dāng)客戶端向 /api
發(fā)送請求時(shí),代理服務(wù)器會將請求轉(zhuǎn)發(fā)給 https://example.com
,并將響應(yīng)返回給客戶端。