Dart BrowserClient中的响应标头

时间:2019-04-01 16:54:15

标签: dart dart-html

我有一个代码,我在其中发布请求,并使用新创建的资源的“ Location”:“ URL”标头创建了响应代码201。

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

其中_http是软件包http-0.12.0+1中的BrowserClient。但是response.headers['Location']为空。 headers数组本身仅包含一个元素Content-Type。 在Chrome开发人员工具中,我看到了所有响应标头,包括Location。 我究竟做错了什么?如何访问响应头?

2 个答案:

答案 0 :(得分:1)

我认为响应缺少标题

<div id="container">
  <div id="fixed"></div>
  <div id="bottom"></div>
</div>

,因此浏览器阻止JavaScript(Dart)访问标头(CORS)。

要使标头可用于JavaScript(Dart),您需要将服务器更改为在响应中包含上述标头。

另请参阅https://stackoverflow.com/a/36281935/217408

答案 1 :(得分:1)

感谢GünterZöchbauer指出我的答案。如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

相关问题