существуютразвитие современное Web При нанесении передняя часть изадняя часть обычно развертывается отдельно на разных серверах Служить, что приводит к Междоменный доменпросить вопрос. Политика браузера в отношении одного и того же происхождения Политика) заблокирует Междоменный доменпросить,пока незадняя часть Служитьустройство Конфигурациядопустимый Междоменный доменпросить CORS(Cross-Origin Resource Поделиться) заголовок. В этой статье подробно объясняется, как существовать Vue В проектеиспользовать Axios Решайте междоменные проблемы при инициировании междоменных запросов.
Междоменный запрос означает, что браузер отправляет запрос из одного домена в другой домен. Такие запросы будут блокироваться политикой браузера по одному и тому же источнику, если только целевой домен явно не разрешает запросы из разных источников. Общие междоменные запросы включают в себя:
example.com
просить api.example.com
)localhost:8080
просить localhost:3000
)http
просить https
)решать Междоменный Лучший способ решить проблему домена — существованиезадняя. часть Служитьустройствоначальство Конфигурация CORS голова. Вот как живут обычные задние частьв рамке Конфигурация CORS。
Сначала установите cors
промежуточное программное обеспечение:
npm install cors
Затем ваше приложение Express будет использовать его:
const express = require('express');
const cors = require('cors');
const app = express();
const port = 3000;
app.use(cors()); // Междоменный разрешен из всех источников доменпросить
app.post('/login', (req, res) => {
res.send('Вход успешен');
});
app.listen(port, () => {
console.log(`Server is running on http://localhost:${port}`);
});
Вы можете настроить CORS более подробно, передав объект параметров, например, чтобы разрешить доступ только к определенным доменным именам:
app.use(cors({
origin: 'http://localhost:8080', // С этого адреса разрешено только Междоменный доменпросить
methods: ['GET', 'POST'], // допустимый HTTP метод
allowedHeaders: ['Content-Type', 'Authorization'] // допустимыйпроситьголова
}));
Сначала установите flask-cors
:
pip install flask-cors
Затем создайте ваше приложение Flask, используя его:
from flask import Flask, request, jsonify
from flask_cors import CORS
app = Flask(__name__)
CORS(app) # Междоменный разрешен из всех источников доменпросить
@app.route('/login', methods=['POST'])
def login():
return jsonify({'message': 'Вход успешен'})
if __name__ == '__main__':
app.run(port=3000)
Вы также можете указать разрешенные источники:
CORS(app, resources={r"/api/*": {"origins": "http://localhost:8080"}})
существуют в среде разработки,использовать Webpack развивать Служитьустройствоизактерское мастерство Функция в порядкерешать Междоменный вопрос по домену. Вю CLI Предоставляет простой метод настройки прокси.
существовать vue.config.js
Добавьте следующую конфигурацию:
module.exports = {
devServer: {
proxy: {
'/api': {
target: 'http://localhost:3000',
changeOrigin: true,
pathRewrite: { '^/api': '' }
}
}
}
}
существуют в вашем интерфейсном коде,Путь Воляпросить изменен на /api
начало:
this.$axios.post('/api/login', {
username: this.username,
password: this.password
})
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
Таким образом, все сообщения, отправленные на /api
Все запросы будут пересылаться на http://localhost:3000
。
Nginx Может Конфигурацияобеспечить регрессактерское мастерство, вперед просить с передка назад часть Служить, избегать Междоменный вопрос по домену. Прежде всего, убедитьсь в своем Nginx Уже установлен и работает.
существоватьтвой Nginx Конфигурациядокумент(в целомсуществовать /etc/nginx/nginx.conf
или /etc/nginx/sites-available/default
)серединадобавить вобеспечить регрессактерское мастерство Конфигурация:
server {
listen 80;
server_name yourdomain.com;
location / {
root /var/www/html;
index index.html;
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_pass http://localhost:3000/; # Воля /api Приставка просить вперед-назад часть Служить
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Затем перезапустите Nginx:
sudo systemctl restart nginx
iframe
+ postMessage
Этот видметод Подходит для приложений, которым необходимо перейти из интерфейсных приложений в разные источники.руководитьситуация общения。проходитьсуществоватьвнешний интерфейсстраницасередина Встроить iframe
ииспользовать postMessage
API Для связи можно обойти политику одного и того же происхождения.
<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Iframe PostMessage Example</title>
</head>
<body>
<iframe id="myIframe" src="http://different-origin.com/iframe.html" style="display:none;"></iframe>
<script>
const iframe = document.getElementById('myIframe');
window.addEventListener('message', (event) => {
if (event.origin === 'http://different-origin.com') {
console.log('Received:', event.data);
}
});
iframe.onload = () => {
iframe.contentWindow.postMessage('Hello from parent', 'http://different-origin.com');
};
</script>
</body>
</html>
существовать Node.js среды, вы можете использовать промежуточное программное обеспечение для актерского мастерствопросить。Например,существовать Express В приложениииспользовать http-proxy-middleware
:
Сначала установитепромежуточное программное обеспечение:
npm install http-proxy-middleware
Затем,существоватьтвой Express Настройте прокси в приложении:
const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');
const app = express();
app.use('/api', createProxyMiddleware({
target: 'http://localhost:3000',
changeOrigin: true
}));
app.listen(8080, () => {
console.log('Server is running on http://localhost:8080');
});
GraphQL Позволяет клиентам гибко запрашиватьи Данные операции。проходить Волявнешний интерфейспросить Отправить равномерно в GraphQL Служить,исуществовать Должен Служитьсерединаиметь дело с просить разного происхождения, можно избежать прямого Междоменного доменпроситьвопрос。
существуют в среде разработки,Можетпроходить Конфигурация Просматриватьустройствопренебрегать CORS проверять。Этот видметод Только для разработки и отладки,существование не рекомендуется для производственных сред.
Например,существовать Chrome , вы можете использовать следующую команду, чтобы запустить браузер, чтобы игнорировать CORS проверять:
chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security
использовать Служитьустройство Боковой рендеринг(Напримериспользовать Nuxt.js руководить Vue проект SSR),Можетсуществовать Служитьустройствоначальстворуководитьвсе API запрос, избегая браузера CORS предел.
Убедитесь, что серверная часть правильно обрабатывает предполетные запросы (ОПЦИИ просить). Если использовать сложный запрос (например, просить с настраиваемым заголовком), браузер отправляет OPTIONS просить Приходитьисследовать Служитьустройство Это разрешено?Должендействительныйпросить。
Пример:использовать Express Обработка предполетных запросов:
app.options('/api/*', (req, res) => {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
res.send();
});
убеждаться Axios Настроено правильно, например, установка baseURL
ииметь дело Ответ на ошибку:
import axios from 'axios';
const instance = axios.create({
baseURL: 'http://localhost:3000', // настраиватьзадняя часть API базовый URL
timeout: 10000, // Установить таймаут просить
});
instance.interceptors.response.use(
response => response,
error => {
console.error('API error:', error);
return Promise.reject(error);
}
);
export default instance;
существовать Vue Компоненты в использовании Конфигурация хорошая Axios Пример:
<template>
<div>
<h1>{{ message }}</h1>
</div>
</template>
<script>
import axios from './http'; // Импортировать конфигурацию ОК Axios Пример
export default {
data() {
return {
message: ''
};
},
mounted() {
axios.post('/login', {
username: 'test',
password: 'test'
})
.then(response => {
this.message = response.data;
})
.catch(error => {
console.error('HTTP error:', error);
});
}
};
</script>
Междоменный доменпроситьвопрос Это раньшезадняя Общие проблемы в развитии разделения частей могут быть решены путем существованиязадней часть Конфигурация CORS、существуют в среде разработкииспользоватьактерское мастерствои другиеметод Приходитьрешать。оптимальныйрешать План Конфигурациязадняя часть Служить, чтобы разрешить необходимый Междоменный доменпросить, тем самым обеспечив безопасность и стабильность работы приложения. Я надеюсь, что эта статья поможет вам полностью понять ирешать Vue В проектеиспользовать Axios Проблемы, возникающие при выполнении междоменных запросов.