使用AJAX获取API响应Link响应头时未返回对应字段问题咨询
无法获取AJAX响应中Link头部的解决方法
问题背景
尝试抓取API响应的Link头部信息,操作截图如下:
使用的jQuery AJAX请求代码:
$.ajax({ type : "GET", url : "url_here", cache : false, }).done(function( data, status, response ) { var headers = response.getAllResponseHeaders(); })
获取到的完整响应头列表:
cache-control: no-cache connection: Keep-Alive content-length: 528 content-type: text/html; charset=UTF-8 date: Fri, 27 Aug 2021 14:39:47 GMT keep-alive: timeout=5, max=92 server: Apache/2.4.41 (Win64) OpenSSL/1.0.2s PHP/7.1.33 x-powered-by: PHP/7.1.33
排查&解决步骤
- 第一步:确认服务器是否实际返回了Link头
直接用curl、Postman等工具直接请求目标接口,检查响应头中是否包含Link字段。如果工具返回的响应头里也没有该字段,说明是后端接口没有输出该头部,需要后端开发在接口响应逻辑中添加对应的Link头。 - 第二步:处理CORS头部暴露限制
浏览器的跨域资源共享(CORS)规范默认只允许JS访问6个基础响应头,其余头部默认禁止JS读取,Link头不在默认白名单内。如果确认服务器已经返回了Link头,需要后端在响应头中添加Access-Control-Expose-Headers字段,值包含Link即可:
以当前使用的Apache+PHP环境为例,可以选择以下任意一种方式配置:- 接口PHP代码中添加:
header('Access-Control-Expose-Headers: Link');- Apache配置或站点根目录的.htaccess文件中添加:
Header set Access-Control-Expose-Headers "Link" - 第三步:校验本地测试环境
不要使用file://协议打开页面测试,需要将页面部署在http/https服务下,和接口的域名、端口、协议匹配后再验证头部获取结果。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

