response.url 是只读属性,返回重定向链结束后服务器实际响应的最终 url;fetch 中可直接访问,xmlhttprequest 需用 responseurl 且兼容性较差。

Response 对象本身没有“只读属性”能直接返回服务器解析后的最终 URL。浏览器中发起的请求(如 fetch 或 XMLHttpRequest)所得到的 Response 实例,其 url 属性**就是重定向链结束后、实际响应内容来源的最终 URL**,且该属性是只读的、无需额外解析。
Response.url 就是你要的最终 URL
Response.url 是标准定义的只读属性,它在请求完成(包括所有重定向)后自动设为服务器最终响应的 URL。它不是初始请求地址,也不是中间跳转地址,而是真实返回响应的那个地址。
- 如果请求未重定向,
Response.url === 请求时传入的 URL - 如果发生了 301/302/307 等重定向,
Response.url会更新为最后一次响应的 URL(即最终资源地址) - 该值在 Response 实例创建后即确定,不可修改,符合“只读属性”的要求
fetch 中直接使用 Response.url
调用 fetch() 后,Promise 解析出的 Response 对象可立即访问 url:
fetch('/api/data')<br> .then(response => {<br> console.log(response.url); // ✅ 自动是最终 URL,含完整协议、域名、路径<br> return response.json();<br> });
注意:XMLHttpRequest 不提供等效的只读 url 属性
XMLHttpRequest 的 responseURL 属性功能类似,但兼容性略低(IE10+),且需在 load 事件后读取:
- 必须等待
readyState === 4(完成)才能安全读取 - 某些旧版浏览器(如 IE9 及更早)不支持
responseURL - 推荐优先使用 fetch +
Response.url,语义清晰、行为统一
不需要手动跟踪重定向
你无需设置 redirect: 'manual' 再自己处理 Location 头 —— 那样反而得不到最终响应体,也失去了 Response.url 的自动同步优势。默认的 redirect: 'follow'(fetch 默认行为)已足够,浏览器会在内部完成重定向并把最终 URL 填入 Response.url。










