Cors 从Elm中的HTTP响应读取自定义头
我使用传递HTTP响应元数据和正文(或错误)。我将Cors 从Elm中的HTTP响应读取自定义头,cors,elm,Cors,Elm,我使用传递HTTP响应元数据和正文(或错误)。我将Dict.keys metadata.headers记录到控制台中。根据日志,Elm不会传递所有的头。从附加的图像中可以看出,dev tools network选项卡中的标题集是日志中标题的超集。我在文件中找不到对此的解释。希望榆树社区能提供一些信息 更新 正如glennsl和Gareth Latty所指出的,这与CORS有关,与Elm无关XMLHttpRequest产生相同的结果。有些头不会专门返回Set-Cookie和Set-Cookie2
Dict.keys metadata.headers
记录到控制台中。根据日志,Elm不会传递所有的头。从附加的图像中可以看出,dev tools network选项卡中的标题集是日志中标题的超集。我在文件中找不到对此的解释。希望榆树社区能提供一些信息
更新
正如glennsl和Gareth Latty所指出的,这与CORS有关,与Elm无关XMLHttpRequest
产生相同的结果。有些头不会专门返回Set-Cookie
和Set-Cookie2
,但至少就Elm而言,示例中的所有头都应该返回
您可以看到以下各项的实现:
您可以在Elm中看到,没有发生过滤
是否过滤前面提到的两个标题:
一个ByteString
,表示所有响应的头(字段名为Set-Cookie
或Set-Cookie2
的头除外),由CRLF分隔,如果未收到响应,则表示null
。如果发生网络错误,则返回空字符串
正如您所看到的,这可能是特定情况导致浏览器无法返回所有标题的原因。我们需要更多的信息(最好是一个可以重现问题的例子)来说明更多。正如建议的那样,这似乎是可能的。我建议您尝试在该环境中直接使用
getAllResponseHeaders()
,并从等式中删除Elm。而不是编辑,如果这解决了您的问题,请随意接受我的答案,或者更好的是,发布您自己的答案,详细说明CORS问题以及您如何修复它并接受它!加雷斯,我投了赞成票,但不知道该如何接受这个答案。@yagger,你应该看看。
_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;
}