我正在使用Http.expectStringResponse
将 HTTP 响应元数据与正文(或错误)一起传递。然后我将 Dict.keysmetadata.headers
记录到控制台中。根据日志,Elm 没有传递所有 header 。从附图中可以看出,开发工具网络选项卡中的 header 集是日志中 header 的超集。我在文档中找不到对此的解释。希望 Elm 社区能够提供一些启发。
更新
正如glennsl和Gareth Latty所指出的,这是与CORS相关的,与Elm无关。 XMLHttpRequest
产生相同的结果。
最佳答案
I can't reproduce this.有一些 header 不会返回,特别是 Set-Cookie
和 Set-Cookie2
,但示例中的所有 header 都应该是,至少就 Elm 而言。
您可以看到 Http
's header parsing 的实现:
_Http_parseHeaders(xhr.getAllResponseHeaders())
...
function _Http_parseHeaders(rawHeaders)
{
if (!rawHeaders)
{
return __Dict_empty;
}
var headers = __Dict_empty;
var headerPairs = rawHeaders.split('\r\n');
for (var i = headerPairs.length; i--; )
{
var headerPair = headerPairs[i];
var index = headerPair.indexOf(': ');
if (index > 0)
{
var key = headerPair.substring(0, index);
var value = headerPair.substring(index + 2);
headers = A3(__Dict_update, key, function(oldValue) {
return __Maybe_Just(__Maybe_isJust(oldValue)
? value + ', ' + oldValue.a
: value
);
}, headers);
}
}
return headers;
}
您可以在 Elm 中看到,没有发生任何过滤。
getAllResponseHeaders()
确实过滤了前面提到的两个 header :
A
ByteString
representing all of the response's headers (except those whose field name isSet-Cookie
orSet-Cookie2
) separated by CRLF, ornull
if no response has been received. If a network error happened, an empty string is returned.
正如您所看到的,这可能是特定情况导致浏览器不返回所有 header 的原因。我们需要更多信息(最好是我们可以重现问题的示例)来说明更多内容。按照建议in glennsl's comment ,这似乎可能是 a CORS issue 。我建议尝试直接在该环境中使用 getAllResponsHeaders()
并从等式中删除 Elm。
关于cors - 从 Elm 中的 HTTP 响应读取自定义 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59234034/