【问题标题】:"Content-Range" response header not visible for JavaScript [duplicate]JavaScript 不可见“Content-Range”响应标头 [重复]
【发布时间】:2019-03-04 16:45:45
【问题描述】:

我有以下代码:

const URL = 'https://www.tophtml.com/snl/15.mp3';
window.addEventListener('load', function() {
	const button_load		= document.querySelector('.button_load');
	button_load.addEventListener('click', async function() {
		let url = URL + '?nocache='+(new Date()).getTime();
		let arrayBuffer = await fetchData(url, 501, 510);
		console.log('This is the response itself:');
		console.log(arrayBuffer);
	});
});
function fetchData(url, byte_from, byte_to) {
	return new Promise((resolve, reject) => {
		var request = new XMLHttpRequest();
		request.responseType = 'arraybuffer';
		request.open('GET', url, true);
		request.setRequestHeader("Range", "bytes=" + byte_from + "-" + byte_to);
		request.onload = function() {
			resolve(request.response);
		}
		request.onreadystatechange = function() {
			if (this.readyState == this.HEADERS_RECEIVED) {
				console.log('These are the "Response Headers" visible to JavaScript:');
				console.log(request.getAllResponseHeaders());
			}
		}		
		request.send();
	});
}
<button class="button_load">Load</button>

你也可以在这里找到:

https://codepen.io/anon/pen/OBJqZG?editors=1010

我的问题是,由于某种原因,JavaScript 的响应标头对于 JavaScript 不可见,如下图所示:

知道这里发生了什么吗?

谢谢!

【问题讨论】:

    标签: javascript html xmlhttprequest httpresponse


    【解决方案1】:

    知道这里发生了什么吗?

    很简单,content-range 是一个响应标头,不是一个请求标头。唯一可以从客户端设置的响应标头(使用XMLHttpRequest.prototype.overrideMimeType)是content-type

    如果它被Access-Control-Expose-Headers 响应标头暴露,您可以使用以下方法检索它:

    request.getResponseHeader('Content-Range')
    

    【讨论】:

    • 但是有什么方法可以在我提交请求后使用JavaScript 获得Content-Range 的值吗?有什么解决方法吗?谢谢!
    • 你能分叉我的CodePen.io 并提醒价值吗?谢谢!
    • @davidesp 检查我的更新。在这种情况下是不可能的:它没有暴露。试试看,看看你的控制台。
    猜你喜欢
    • 1970-01-01
    • 2018-04-25
    • 2017-08-25
    • 2010-10-17
    • 1970-01-01
    • 2022-06-25
    • 2013-05-06
    • 1970-01-01
    • 2018-10-30
    相关资源
    最近更新 更多