Проблема с CORS
Я использую webpack-dev-server v1.10.1
для увеличения моего проекта Redux, и у меня есть следующие варианты:
contentBase: `http://${config.HOST}:${config.PORT}`,
quiet: false,
noInfo: true,
hot: true,
inline: true,
lazy: false,
publicPath: configWebpack.output.publicPath,
headers: {"Access-Control-Allow-Origin": "*"},
stats: {colors: true}
В JS я использую request
из superagent
для генерации вызова HTTP GET
request
.get(config.APIHost + apiUrl)
.set('Accept', 'application/json')
.withCredentials()
.end(function (err, res) {
if (!err && res.body) {
disptach(() => {
return {
type: actionType || GET_DATA,
payload: {
response: res.body
}
}
});
}
});
Но я получил ошибку CORS:
XMLHttpRequest cannot load http://localhost:8000/api/getContentByType?category=all. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:5050' is therefore not allowed access
Любое предложение разрешить это? Большое спасибо
Ответы
Ответ 1
С webpack-dev-server 1.15.X вы можете использовать эту конфигурацию в своем файле конфигурации:
devServer: {
contentBase: DIST_FOLDER,
port: 8888,
// Send API requests on localhost to API server get around CORS.
proxy: {
'/api': {
target: {
host: "0.0.0.0",
protocol: 'http:',
port: 8080
},
pathRewrite: {
'^/api': ''
}
}
}
},
В этом примере вы перенаправите все вызовы с http://0.0.0.0:8888/api/*
на http://0.0.0.0:8080/*
и CORS решит
Ответ 2
Другой способ обойти это - напрямую добавить необходимые заголовки CORS на сервер dev:
devServer: {
...
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS",
"Access-Control-Allow-Headers": "X-Requested-With, content-type, Authorization"
}
}
Ссылки на документы
Ответ 3
Вы запускаете свой JavaScript с localhost:5050
но вашим сервером API является localhost:8000
. Это нарушает ту же политику происхождения, поэтому браузер запрещает ее.
Вы можете либо изменить свой сервер API, чтобы включить CORS, либо следовать инструкциям на странице webpack-dev-server в разделе "Объединение с существующим сервером", чтобы объединить обслуживание ресурсов с webpack-dev-server и вашим собственным сервером API.
Ответ 4
Была такая же проблема, но мой API был по протоколу https (https://api....). Пришлось запустить сервер с https и использовать https://localhost: 8080
devServer: {
headers: {
"Access-Control-Allow-Origin": "*",
https: true
}
.....
}