Заголовки ответа в Dart BrowserClient - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть код, куда я отправляю запрос, и код ответа 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.Что я делаю неправильно?Как я могу получить доступ к заголовкам ответа?

Ответы [ 2 ]

2 голосов
/ 02 апреля 2019

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

Access-Control-Allow-Headers:location

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

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

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

1 голос
/ 02 апреля 2019

Спасибо Гюнтеру Цохбауэру за указание на мой ответ. Как описано в https://stackoverflow.com/a/39021128/1444083, отсутствует заголовок Access-Control-Expose-Headers (не Access-Control-Allow-Headers).

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

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

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

...