Отказался получить небезопасный заголовок «Местоположение» - PullRequest
7 голосов
/ 09 октября 2011

У меня есть веб-сайт и мой REST API-сервер.

Я делаю ajax post запрос к REST серверу, чтобы создать новую модель. Ответом на этот запрос будет «HTTP / 1.1 201 Created», ответ с заголовком «Location: http://myapi.com/some/path/111" Но я получаю сообщение об ошибке Refused to get unsafe header "Location". Я знаю, что это из-за политики междоменного доступа и других бла-бла-бла.

Кто-нибудь знает, как это исправить? Может быть, мне нужно добавить в ответ заголовок «Access-Controll-Allow-SOMETHINGHERE»?

UPD:

URL веб-сайта http://www.mydomain.com/

Исходный URI - http://api.mydomain.com/model/, а новый URI местоположения - http://api.mydomain.com/model/211

Исходный URI используется для запроса POST ajax, который отвечает новым заголовком Location.

Ответы [ 4 ]

5 голосов
/ 21 июля 2014

Это потому, что заголовок Location по умолчанию не доступен вызывающему клиенту (в данном случае ваш ajax-код) (это «небезопасно»).Чтобы открыть его, вы должны вернуть дополнительный заголовок:

Access-Control-Expose-Headers: Location

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

1 голос
/ 09 октября 2011

Я бы просто обойти это, либо вернув новое местоположение в качестве значения из вызова, либо узнав, что клиентский код знает, где хранится вновь созданный элемент.

Другой вариант - создать прокси для звонков в исходном домене.

0 голосов
/ 09 декабря 2016

Для загрузки на Amazon S3 (например, через Dropzone) это необходимо в конфигурации CORS.

<ExposeHeader>location</ExposeHeader>
0 голосов
/ 09 октября 2011
header Location: http://myapi.com/some/path/111"

Этот кусок кода совершенно неверен.Используйте это правильно или почти правильно.

Попробуйте это:

header("Location: http://myapi.com/some/path/111");

или

header("Location: http://myapi.com/some/path/111"); exit();

Если это не сработает, дайте мне знать: -)

...