
Я устанавливаю laravel и vuejs.
Плагин CORS для laravel и внешнего интерфейса, я использую Axios для вызова REST api
у меня ОШИБКА Доступ к XMLHttpRequest в 'https: //xx.xxxx.xx' из источника 'http: // локальный: 8080' заблокирован политикой CORS: ответ на предполетную проверку запрос не проходит проверку контроля доступа: перенаправление не разрешено для предполетный запрос.
this is for a vuejs axios setup **main.js**
axios.defaults.baseURL = process.env.BASE_URL;
axios.defaults.headers.get['Accepts'] = 'application/json';
axios.defaults.headers.common['Access-Control-Allow-Origin'] = '*';
axios.defaults.headers.common['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept';
**content.vue file**
this.loading = true;
var companyId = this.$route.params.cid;
var userId = this.$route.params.uid;
const thisVue = this;
var formData = new FormData();
let data = {};
formData.append("subject", this.title);
formData.append("content", this.content);
formData.append("posting_article_url", this.blog_link);
formData.append("recruitment_tension", this.sel_recruitment_tension);
formData.append("why_hire_engineer", this.sel_company_hire_engineer);
formData.append("technique_skill", this.requiredTechniqueSkill);
formData.append("better_technique_skill",this.betterTechniqueSkillIfThereIs);
formData.append("personality", this.requiredPersonality);
formData.append("any_request", this.anyRequest);
formData.append("location", this.location);
formData.append("supplement_time", this.supplement_time);
formData.append("supplement_contract", this.supplement_contract);
formData.append("en_benefits", this.en_benefits);
formData.append("recruit_role", this.recruit_role);
formData.append("how_to_proceed", this.how_to_proceed);
formData.append("current_structure", this.current_structure);
if (this.selectedSkill.length > 0)
{
let selectedSkills = this.selectedSkill
.filter(obj => {
return obj.id;
})
.map(item => {
return item.id;
});
formData.append("skill_keyword", selectedSkills);
}
if (this.imageBlob != "") {
formData.append("image", this.imageBlob, "temp.png");
}
for (var i = 0; i < this.sel_schedule.length; i++) {
formData.append("freelance_type[" + i + "]", this.sel_schedule[i])
}
for (var i = 0; i < this.sel_type_of_contract.length; i++) {
formData.append("contract_type[" + i + "]", this.sel_type_of_contract[i])
}
this.loading = false;
$('html, body').animate({scrollTop:300}, 'slow');
} else {
axios
.post(
"/xx/xxx/?token = " + localStorage.getItem("token"),
formData,
{
headers: [
{ "X-localization": localStorage.getItem("lan") },
{ "Access-Control-Allow-Origin": '*' },
{ "Access-Control-Allow-Headers": 'Origin, X-Requested-With, Content-Type, Accept '},
{ "Access-Control-Allow-Methods": "POST, GET, PUT, OPTIONS, DELETE" },
{ "Access-Control-Max-Age": 3600 }
]
}
)
.then(res => {
if (!res.data.result) {
if (res.data[0]) {
this.$toaster.error(res.data[0]);
this.$store.dispatch("logout");
}
if (res.data.errors) {
for (var i = 0; i < res.data.errors.length; i++) {
this.$toaster.error(res.data.errors[i].message);
}
}
this.loading = false;
} else {
this.$toaster.success(thisVue.$t("success_recruit_add"));
}
})
.catch(() => {
this.$toaster.error(thisVue.$t("err_network"));
});
}
ошибка возникает только на одном маршруте, остальные все работают. также работаю над Почтальон
@Ferrybig, я получил ошибку только на одном маршруте, все остальные работают хорошо, а также хорошо работают на моем локальном сервере.
Не могли бы вы показать полный ответ, включая путь исходного URL-адреса и путь URL-адреса, который сервер пытается перенаправить вас



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Проблема связана с серверной частью, в нашем случае это Laravel, в вашем config / cors.php попробуйте использовать следующую конфигурацию:
'supportsCredentials' => true,
'allowedOrigins' => ['*'],
'allowedOriginsPatterns' => [],
'allowedHeaders' => ['*'],
'allowedMethods' => ['*'],
'exposedHeaders' => [],
'maxAge' => 0,
Или вы можете попробовать использовать этот код в верхней части public / index.php
Редактировать
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE');
header('Access-Control-Allow-Headers: Origin, Content-Type, Accept, Authorization, X-
Request-With');
все еще не работает, я меняю код, что вы сказали, но все равно сталкиваюсь с той же ошибкой.
Вероятно, у вас есть некоторая неправильная конфигурация либо на стороне веб-сервера, либо на стороне Laravel. Возможно, вам поможет это решение: Почему мой веб-сервер nginx не обрабатывает шрифты ttf?.
Обратите особое внимание на метод OPTIONS, поскольку он включает поддержку предварительной проверки.
почему не работает только один маршрут? все остальные маршруты работают нормально.
Добавьте https: // localhost в его настройку, как на снимке экрана:
Теперь закройте весь браузер Chrome и откройте cmd. Затем запустите следующую команду:
«C: \ Program Files (x86) \ Google \ Chrome \ Application \ chrome.exe» –-allow-file-access-from-files --disable-web-security --user-data-dir --disable-features = CrossSiteDocumentBlockingIfIsolating
Если команда работает правильно, вы увидите следующее уведомление, как на скриншоте ниже:
Если вы не видите уведомление, значит, команда не сработала. Поэтому вам следует проверить ссылку на каталог, указанную в команде, чтобы убедиться, что файл chrome.exe существует в этой ссылке на каталог.
Если вы найдете файл chrome.exe, то после закрытия браузера Chrome вы должны проверить диспетчер задач, работает ли какая-либо другая служба Chrome в фоновом режиме. После закрытия всех служб команда должна работать должным образом.
internet option > security > Internet и снимите флажок «Включить защищенный режим».Затем нажмите на настраиваемый уровень и включите доступ к источникам данных в доменах.
в разделе "Разное", как на изображении ниже. Следуйте тому же процессу
для internet option > security > Local intranet.
Надеюсь, это решит вашу проблему.
большие усилия, но мой сценарий отличается.
Каков ваш сценарий?
он решил мою проблему, я сталкиваюсь с этим несколько дней
Это решит проблему на локальной машине. Но когда вы выходите в эфир, проблема не исчезает. Сказать всем пользователям установить расширение или выполнить некоторые настройки в своих браузерах - не лучшее решение.
@franc определенно не годится для сервера. Решение только для localhost. На сервере есть несколько передовых методов, которым вы можете следовать. Вот я делюсь одним: w3.org/wiki/CORS_Enabled
Можете ли вы объяснить, откуда именно открывается эта третья точка - добавьте localhost в ее настройку, как на снимке экрана: я не могу найти эту опцию
Ссылка не работает
Я согласен с @franc, это не лучшее решение и не должен быть принятым ответом
@ksugiarto Не могли бы вы предложить хорошее решение для localhost ?? Это решение определенно не подходит для сервера, поскольку серверу необходимо разрешить URL-адрес, но рассматриваемый URL-адрес - localhost, поэтому ответ должен быть основан на локальной среде.
@MdRiadulIslam Я просто прохожу мимо, когда ищу свою проблему cors, я не использую vue.js. Но здесь проблема с cors всегда связана с сервером, иногда даже мы правильно настраиваем cors, но ответ сервера не подходит для этого конкретного запроса, фронт / браузер может сказать, что это проблема cors из-за некоторых отсутствующих cors ответ конфигурации от сервера. Во-вторых, посмотрите, как вы взламываете Chrome с помощью --disable-web-security, это определенно то, что вы сделали на свой страх и риск, поэтому, пожалуйста, не предлагайте это рискованное решение.
В-третьих, как и в предыдущем комментарии, когда вы меняете компьютер, ОС, это снова возникает, когда настоящая проблема - это сервер. Не говоря уже о другом члене команды, с которым работает автор, они легко смогут воспроизвести случай, кроме того, цель кода всегда запускать на сервере, а не на локальном хосте. Короче говоря, ваше решение может работать, но это еще не лучшее решение.
Обработка cors (Cross-Origin Resource Sharing) на стороне сервера. Если вы пришли с конца laravel, значит, пакет barryvdh / laravel-cors поможет решить эту ошибку
Мы можем исправить это с помощью APP_URL, если вы используете его как базовый URL для запроса axios. Убедитесь, что корневой URL вашего браузера и APP_URL в .env совпадают.
Например, если вы запускаете приложение на «http://127.0.0.1:8000», тогда должно быть APP_URL = http://127.0.0.1:8000
И если вы запустите приложение на «http: // локальный: 8000», тогда должно быть APP_URL = http: // локальный: 8000
Надеюсь, это поможет! И это протестировано с laravel6.x
Проблема со стороны сервера. Если вы используете express js. Попробуйте установить пакет express cors на свой сервер.
npm install cors
В вашем app.js требуется cors.
var cors = require('cors')
Затем добавьте его в качестве промежуточного программного обеспечения в свое приложение.
app.use(cors())
После установки пакета вы не должны столкнуться с проблемой cors.
Творили чудеса!
Проблема исходит из вашего приложения Vue.
Например: вы запрашиваете URL-адрес ниже:
https://example.com/api/methods/
И бэкэнд перенаправляет его на:
https://example.com/api/methods
Остерегайтесь косой черты в конце.
Отключение этого флага сработало для меня: хром: // флаги / # блокировать небезопасные-частные-сетевые-запросы
nelmio_cors:
defaults:
allow_origin: ["*"]
allow_headers: ["*"]
allow_methods: ["POST", "PUT", "GET", "DELETE", "OPTIONS"]
max_age: 3600
origin_regex: false
paths:
'^/': ~
добавить в nelmio_cors / packge / nelmio_cors
В вашей ошибке говорится, что HTTP-перенаправление не разрешено для предварительного запроса OPTIONS, теперь вам нужно отладить, почему другой сервер отправляет это