le mie informazioni di contatto
Posta[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Condivisione delle risorse tra domini (CORS, Cross-Origin Resource Sharing) rappresentano una sfida comune nello sviluppo front-end. Questo articolo introdurrà in dettaglio le soluzioni in diversi ambienti (come progetti Vue3 + Vite, progetti jQuery e altri ambienti).
L'essenza del problema tra domini è che il browser limita il caricamento delle risorse da una fonte (dominio, protocollo, porta) a un'altra fonte per motivi di sicurezza. Questo meccanismo di sicurezza è chiamato "politica della stessa origine". La politica della stessa origine stabilisce che il browser consentirà il passaggio della richiesta solo se l'URL richiesto ha lo stesso protocollo, nome di dominio e porta dell'URL della pagina Web corrente.
Mancanza di intestazioni CORS:
Il server non ha impostato le intestazioni di risposta CORS corrette, causando il rifiuto della richiesta da parte del browser.Ad esempio, il browser si aspetta che la risposta del server contengaAccess-Control-Allow-Origin
header, se questa intestazione non è impostata, il browser bloccherà la richiesta.
Le richieste multiorigine sono vietate:
Per impostazione predefinita, i browser bloccano le richieste multiorigine per proteggere gli utenti. Se il server non consente l'accesso per un dominio specifico, il browser genererà un errore CORS.
Richiesta di verifica preliminare non riuscita:
Per alcune richieste complesse, il browser invierà una richiesta di preflight (richiesta OPTIONS) per confermare se il server consente la richiesta. Se la richiesta di preflight fallisce, si verificherà un errore CORS.
Attraverso la funzione proxy del server di sviluppo di Vite, le richieste locali possono essere inoltrate a server diversi per evitare problemi tra domini. Ecco i passaggi specifici:
npm create vite@latest
cd your-project-name
npm install
Seleziona il modello Vue3 e accedi alla directory del progetto.
Trovato nella directory principale del progetto Vitevite.config.ts
(Ovite.config.js
) ed effettuare la seguente configurazione:
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
export default defineConfig({
plugins: [vue()],
server: {
proxy: {
'/api': {
target: 'http://api.example.com', // 目标服务器
changeOrigin: true, // 是否改变请求源
rewrite: (path) => path.replace(/^/api/, ''), // 重写路径
},
},
},
});
Nel componente Vue, puoi passareaxios
Ofetch
invia richiesta. Per esempio:
<template>
<div>
<button @click="fetchData">获取数据</button>
<div v-if="data">{{ data }}</div>
</div>
</template>
<script lang="ts">
import { defineComponent, ref } from 'vue';
import axios from 'axios';
export default defineComponent({
setup() {
const data = ref(null);
const fetchData = async () => {
try {
const response = await axios.get('/api/data');
data.value = response.data;
} catch (error) {
console.error('请求错误:', error);
}
};
return {
data,
fetchData,
};
},
});
</script>
Nei progetti jQuery, i problemi CORS possono essere risolti impostando le intestazioni delle richieste o utilizzando JSONP.
Assicurati che sul server siano impostate le intestazioni CORS corrette, ad esempio Access-Control-Allow-Origin
. Quando il client avvia una richiesta:
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
$.ajax({
url: 'http://api.example.com/data',
method: 'GET',
success: function(data) {
console.log(data);
},
error: function(xhr, status, error) {
console.error('请求错误:', error);
}
});
</script>
Se il server supporta JSONP, i problemi tra domini possono essere risolti nei seguenti modi:
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
$.ajax({
url: 'http://api.example.com/data',
method: 'GET',
dataType: 'jsonp', // 使用JSONP
success: function(data) {
console.log(data);
},
error: function(xhr, status, error) {
console.error('请求错误:', error);
}
});
</script>
In molti casi, è possibile impostare un proxy sul lato server per inoltrare richieste tra domini tramite il lato server.Ad esempio, in Node.js puoi utilizzarehttp-proxy-middleware
:
const { createProxyMiddleware } = require('http-proxy-middleware');
app.use('/api', createProxyMiddleware({
target: 'http://api.example.com',
changeOrigin: true,
pathRewrite: {
'^/api': '',
},
}));
Assicurati che nella risposta del server siano incluse le intestazioni CORS corrette. Ad esempio, in Node.js + Express:
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();
});
app.get('/data', (req, res) => {
res.json({ message: 'Hello World' });
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});
In Nginx, i problemi CORS possono essere risolti configurando il proxy:
server {
listen 80;
server_name yourdomain.com;
location /api/ {
proxy_pass http://api.example.com/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Il problema CORS èSviluppo front-end Una sfida comune, ma che può essere risolta in modo efficace con la corretta configurazione del proxy e le impostazioni del server. In ambienti diversi, puoi utilizzare la funzione proxy di Vite, impostare intestazioni di richiesta, JSONP, proxy lato server, proxy Nginx e altri metodi per risolvere problemi tra domini. Spero che questo articolo ti aiuti a comprendere e risolvere i problemi CORS.