cors - 从 Elm 中的 HTTP 响应读取自定义 header

标签 cors elm

我正在使用Http.expectStringResponse将 HTTP 响应元数据与正文(或错误)一起传递。然后我将 Dict.keysmetadata.headers 记录到控制台中。根据日志,Elm 没有传递所有 header 。从附图中可以看出,开发工具网络选项卡中的 header 集是日志中 header 的超集。我在文档中找不到对此的解释。希望 Elm 社区能够提供一些启发。

enter image description here

更新

正如glennsl和Gareth Latty所指出的,这是与CORS相关的,与Elm无关。 XMLHttpRequest 产生相同的结果。

最佳答案

I can't reproduce this.有一些 header 不会返回,特别是 Set-CookieSet-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 is Set-Cookie or Set-Cookie2) separated by CRLF, or null 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/

相关文章:

http - 服务器如何知道发送的请求带有凭据?

jquery - 在 IE10 中使用 Node 和 Express 中的 CORS 时出现安全错误

django - 被 CORS 策略阻止 - 从 Django 应用程序访问 S3 存储桶

parallel-processing - 如何在Elm中合并多个效果?

types - 如何制作表示数字子集的数据结构?

php - Wordpress 警告 : call_user_func_array() expects parameter 1 to be a valid callback, 数组必须恰好有两个成员

javascript - CORS - 服务器如何知道是否使用了 Jquery ajax 的 "withCredentials : true"?

physics - 如何为太空战做物理学?

Elm - 如何根据另一个信号修改一个信号的参数化

javascript - 在 Elm 中同时运行两个命令