拒绝获取不安全的头部"Content-Length"。

3

有人能帮忙吗?

我在这里是新手

function getFileSize(url, callback) {
        var request = new XMLHttpRequest();
        //get only header.
        request.open("HEAD", url, true);
        request.onreadystatechange = function() {
            if (this.readyState == this.DONE) {
                callback(parseInt(request.getResponseHeader("Content-Length")));
            }
        };
        request.send();
    }

拒绝获取不安全的头部"Content-Length"

这行代码在控制台中报错 >> allback(parseInt(request.getResponseHeader("Content-Length")));

有谁能提供帮助吗?


无论如何,请求头中没有内容或长度。 - dandavis
有的。在这里阅读。https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13 - arjabbar
1个回答

4
您的 JavaScript 没有问题。这是一个 CORS 问题。您可以从这个答案学习更多
如果您可以在源头修改标头,则需要包含 Access-Control-Expose-Headers 标头。您可以在此处了解更多信息。

是的,我发现这是CORS问题,但我不明白该如何解决。 - Giorgi Chitaladze
如果您可以修改来自源的标头,则添加此内容=> https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Access-Control-Expose-Headers - arjabbar
实际上我不能从另一个不属于我的服务器获取那个文件,它是VK音乐的。 - Giorgi Chitaladze
看起来你最后的选择是在 vk 音乐和自己之间创建一个代理。然后,你将从自己的服务器请求此信息,你的服务器将向 vk 音乐发送请求,并从那里提取你想要的标头。在那时,你将完全控制响应。 - arjabbar
是的,但使用代理会有点慢。 - Giorgi Chitaladze
这是正确的答案,应该被接受。谢谢你的帮助。在CORS上下文中,必须在服务器端设置Access-Control-Expose-Headers以将标头列入白名单,以便客户端可以访问标头。在我的情况下,我正在将Content-Disposition标头列入白名单,以便我可以获取正在下载的文件的文件名。例如:response.Content.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition"); - Llyle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接