为何Java代码获取HTTP响应头时Location头缺失?
Location响应头缺失的原因及解决办法
核心原因:Java的
URLConnection默认会自动跟随HTTP重定向(比如302跳转),你代码里获取的是最终跳转完成后的响应头,而包含Location的是初始跳转响应的头,被自动跳过了。解决方法:在打开连接后,禁用自动重定向功能:
try { URL obj = new URL("https://app.armorcode.com/oauth2/authorization/okta-apptesting?email=manan.girdhar@armorcode.io"); URLConnection conn = obj.openConnection(); // 禁用自动跟随重定向 conn.setInstanceFollowRedirects(false); Map<String, List<String>> map = conn.getHeaderFields(); System.out.println("Printing Response Header...\n"); for (Map.Entry<String, List<String>> entry : map.entrySet()) { System.out.println("Key : " + entry.getKey() + " ,Value : " + entry.getValue()); } } catch (IOException e) { e.printStackTrace(); }补充说明:当服务器返回3xx状态码时,
Location头用于指定跳转目标。默认行为下URLConnection会自动向Location指向的地址发起请求,此时你拿到的是第二次请求的响应头,自然看不到初始的Location。禁用自动重定向后,就能获取到包含Location的原始响应头,同时你可以自己根据状态码和Location头处理跳转逻辑。
内容的提问来源于stack exchange,提问作者Manan Girdhar
相关产品推荐
相关产品推荐

