CORS(跨源资源共享)是一种机制,允许Web应用程序从不同的源(域)请求资源。Fetch API 是一个现代的、基于Promise的网络请求API,用于替代传统的XMLHttpRequest。
以下是一个使用Fetch API进行CORS请求并检索响应头的示例:
fetch('https://api.example.com/data', {
method: 'GET',
mode: 'cors', // 确保请求是CORS模式
headers: {
'Content-Type': 'application/json'
}
})
.then(response => {
// 检查响应是否成功
if (!response.ok) {
throw new Error('Network response was not ok ' + response.statusText);
}
// 获取所有响应头
const headers = response.headers;
console.log(headers);
// 获取特定响应头
const contentType = headers.get('content-type');
console.log(contentType);
// 解析响应体为JSON
return response.json();
})
.then(data => {
console.log(data);
})
.catch(error => {
console.error('There has been a problem with your fetch operation:', error);
});
原因:服务器没有正确设置CORS头部,或者请求的源不在允许的列表中。
解决方法:
Access-Control-Allow-Origin
头部。*
,但不推荐在生产环境中使用。原因:默认情况下,浏览器只允许获取简单的响应头(如Content-Type
),其他自定义头部需要服务器明确允许。
解决方法:
Access-Control-Expose-Headers
头部,列出允许前端访问的自定义头部。例如,在服务器端设置:
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Expose-Headers', 'X-Custom-Header');
这样前端就可以通过response.headers.get('X-Custom-Header')
获取到自定义头部。
通过理解CORS和Fetch API的基础概念及其应用场景,可以有效地处理跨域请求并正确检索响应头。遇到问题时,检查服务器端的CORS设置和响应头配置是关键。
领取专属 10元无门槛券
手把手带您无忧上云