我有一个代码,我在其中发布请求,并使用新创建的资源的“ 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
。
我究竟做错了什么?如何访问响应头?
答案 0 :(得分:1)
我认为响应缺少标题
<div id="container">
<div id="fixed"></div>
<div id="bottom"></div>
</div>
,因此浏览器阻止JavaScript(Dart)访问标头(CORS)。
要使标头可用于JavaScript(Dart),您需要将服务器更改为在响应中包含上述标头。
答案 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