jQuery-Ajax调用中xhr.getResponseHeader('Location')返回null问题排查
问题原因及解决方案
嘿,我来帮你拆解这个问题——你遇到的情况其实是浏览器的CORS安全机制在起作用导致的:
核心原因:浏览器的CORS策略默认只允许前端访问「简单响应头」(比如
Cache-Control、Content-Type、Date这类),像Location这种不属于简单响应头的字段,必须由服务器明确授权才能被前端读取。你直接访问目标URL能看到Location头,是因为这种非跨域请求不受CORS的这个限制,但通过AJAX跨域请求时,浏览器会检查服务器是否返回了Access-Control-Expose-Headers头来允许前端获取Location,如果没有的话,就会把这个头隐藏起来,导致你调用xhr.getResponseHeader("Location")返回null。解决方案:需要让目标服务器在响应中添加
Access-Control-Expose-Headers头,明确指定允许前端访问Location字段。比如服务器端需要配置类似这样的响应头:Access-Control-Expose-Headers: Location这样你的前端代码就能正常获取到
Location头的值了。
另外补充一句:你在前端设置的withCredentials、crossDomain这些参数,主要是处理跨域请求的凭证和跨域标识问题,解决不了响应头的访问授权问题,这个必须由服务器端来配置。
内容的提问来源于stack exchange,提问作者Pritam
相关产品推荐
相关产品推荐

