Заголовки ответов в Dart BrowserClient

У меня есть код, в котором я отправляю запрос, а код ответа 201 создается с заголовком «Location»: «URL» нового созданного ресурса.

final Response response = await _http.post(getUri(_url), body: plan);
return _getPlan(response.headers['location']);

Где _http - это BrowserClient из пакета http-0.12.0+1. Но response.headers['Location'] пусто. Сам массив headers содержит только один элемент Content-Type. В инструментах разработчика Chrome я вижу все заголовки ответов, включая Location. Что я делаю неправильно? Как я могу получить доступ к заголовкам ответов?


person Martin Edlman    schedule 01.04.2019    source источник


Ответы (2)


Я предполагаю, что в ответе отсутствует заголовок

Access-Control-Allow-Headers:location

и поэтому браузер предотвращает доступ JavaScript (Dart) к заголовку (CORS).

Чтобы сделать заголовок доступным для JavaScript (Dart), вам необходимо изменить сервер, чтобы включить указанный выше заголовок в ответы.

См. Также https://stackoverflow.com/a/36281935/217408

person Günter Zöchbauer    schedule 02.04.2019
comment
Спасибо за подсказку. Ваш ответ направил меня к правильному заголовку. Правильный заголовок, который нужно добавить, - Access-Control-Expose-Headers (не Access-Control-Allow-Headers). Смотрите мой ответ ниже. - person Martin Edlman; 02.04.2019

Спасибо Günter Zöchbauer за то, что указал мне на ответ. Как описано на странице https://stackoverflow.com/a/39021128/1444083, отсутствует заголовок _ 1_ (не _ 2_).

Поскольку я использую Dart Aqueduct на стороне сервера, мне пришлось добавить эту строку в метод подготовки канала ()

class MyAppChannel extends ApplicationChannel {
  @override
  Future prepare() async {
    // ... some code
    CORSPolicy.defaultPolicy.exposedResponseHeaders.add('location');
  }
}

поэтому ответы теперь содержат Access-Control-Expose-Headers: location

person Martin Edlman    schedule 02.04.2019