Как включить CORS для Catalyst

Имея приложение Perl Catalyst, которое создает JSON, мне нужно прочитать этот контент JSON с помощью jQuery на HTML-странице, обслуживаемой сервером Apache. Оба приложения, Catalyst и Apache, работают на одном хосте.

Когда я получаю доступ к URL-адресу Catalyst из Apache, я получаю сообщение об ошибке

Access to XMLHttpRequest at 'http://localhost:3000/abc/json_list' from origin 'http://localhost:8888' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Как я писал во многих темах, заголовок (или больше) должен быть установлен. В этом случае катализатор должен быть установлен, но я не знаю, как это сделать.

Любой намек?

Вы не показываете никакого соответствующего кода. Пожалуйста, редактировать вашего сообщения, чтобы показать соответствующий код, генерирующий ответ. Вы устанавливаете заголовки в приложении Catalyst, вызывая метод ->header(...)Катализатор:: Ответ, поэтому я бы начал с этого.

Corion 05.02.2019 09:14

Таким образом, чтобы приложения считались имеющими одинаковое происхождение, недостаточно, чтобы оба приложения работали на одном сервере. Два приложения также должны обслуживаться с одним и тем же именем хоста, одним и тем же номером порта и одним и тем же протоколом (оба http или оба https). В противном случае браузеры будут рассматривать любой запрос как запрос из разных источников, если он сделан кодом JavaScript внешнего интерфейса, работающим на сервере Apache, на сервер Perl Catalyst. Вот почему вам нужно включить CORS на сервере Perl Catalyst. Для этого см. lists.scsys.co.uk/pipermail/catalyst/2018-June/…

sideshowbarker 05.02.2019 09:46
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
3
2
335
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Catalyst позволяет вам устанавливать заголовки ответов, используя метод header для объекта ответа.

$c->res->header( "Access-Control-Allow-Origin" => "http://localhost:8888" );

Рассмотрите возможность использования контроллера sub auto или с использованием существующего промежуточное ПО, если у вас есть несколько конечных точек, которым необходимо предоставить разрешение через CORS.

Другие вопросы по теме