在JavaScript中获取域名和端口号的核心方法是使用window.location对象的hostname与port属性,其中location.hostname返回纯域名,location.port返回端口字符串(若为默认80/443则返回空),而location.host可一次性返回包含端口的主机名,这一组合方案已覆盖90%以上前端开发场景,且被所有现代浏览器原生支持。
域名与端口获取的核心方法
1 基于window.location的标准方案
window.location是浏览器内置的Location对象,承载当前URL的全部信息,以下属性直接对应域名与端口需求:
location.hostname:纯域名,不含端口,如www.example.com。location.port:端口号,返回字符串,如"8080";若为默认端口则返回。location.host:完整主机名,包含端口,如www.example.com:8080。location.protocol:协议,如https:。
| 属性 | 示例(URL: https://www.example.com:8080/path) | 返回值 |
|---|---|---|
| hostname | 域名部分 | www.example.com |
| port | 端口号(默认时为空) | 8080 |
| host | 域名+端口 | www.example.com:8080 |
| protocol | 协议 | https: |
2 兼容性极强的document.domain(有限场景下)
document.domain可获取或设置当前域名,但仅适用于同源策略下的子域通信,且

无法获取端口号,已不推荐作为主方案。
3 使用URL构造函数解析任意链接
当需要解析非当前页面的URL时,可借助new URL():
const url = new URL('https://api.example.com:3000/data');
console.log(url.hostname); // api.example.com
console.log(url.port); // 3000
不同开发场景下的实战应用
1 单页应用(SPA)中的动态获取
在Vue或React项目中,常常需要根据域名和端口动态配置API请求基地址。
- Vue.js获取域名端口:在
main.js或组件中直接使用window.location.host,配合环境变量区分开发与生产环境,开发环境端口常为8080或3000,生产环境为443或80,需通过location.port判断是否拼接端口。 - React Native:移动端需通过
Platform模块读取设备信息,但域名获取仍依赖原生桥接,不直接使用window.location。
2 跨域场景下的安全处理
当页面嵌入iframe或与不同源通信时,window.location仅能读取当前页面的信息,无法直接获取父级或子级域名,此时需通过postMessage配合document.domain(同一主域)或服务端接口传递。
3 Node.js服务端如何获取域名和端口
服务端环境(Node.js)没有window对象,需通过http.createServer回调中的req.headers.host获取:
const http = require('http');
http.createServer((req, res) => {
const host = req.headers.host; // 包含端口,如 "localhost:3000"
const [hostname, port] = host.split(':');
}).listen(3000);

常见问题与最佳实践
1 端口号返回空字符串的处理
location.port在默认端口(HTTP 80,HTTPS 443)下返回空字符串,若业务需要始终显示端口号,可手动判断:
const port = location.port || (location.protocol === 'https:' ? '443' : '80');
2 安全性:避免暴露服务器内部端口
生产环境应避免将后端完整端口直接暴露在前端代码中,建议通过环境变量或代理转发,百度搜索资源平台曾多次强调前端安全规范,明确禁止在静态资源中硬编码内网IP或端口。
3 对比不同方法的优劣
| 方法 | 优点 | 缺点 |
|---|---|---|
window.location.host |
原生支持、兼容性极佳 | 仅限当前页面URL |
document.domain |
可跨子域 | 无法获取端口,已部分废弃 |
URL构造函数 |
可解析任意字符串 | 需手动创建对象,额外开销 |
在前端框架中的集成示例
1 Vue 3 + TypeScript 中推荐写法
const host = window.location.host;
const baseUrl = `${window.location.protocol}//${host}`;
在axios的baseURL配置中动态拼接,避免硬编码。
2 jQuery 环境下的获取
var hostname = window.location.hostname; var port = window.location.port || '80';
性能与兼容性
-

浏览器兼容性:
window.location从IE6起全面支持,2026年所有主流浏览器无任何差异。 - 性能开销:直接读取对象属性是微秒级操作,无需缓存优化,但若在循环中频繁调用,可提前存为变量。
获取域名和端口是前端开发的基础能力,优先使用window.location.host获取完整主机名,按需拆分hostname与port,在SPA、跨域、Node.js等场景中,需结合具体环境选择适配方案,并始终关注安全与兼容性,这一套方法组合已足够应对
常见问题与解答
Q1:如何获取当前页面的完整URL(包括协议、域名和端口)?
直接使用location.href即可,但若需分段获取,可用location.protocol + '//' + location.host。
Q2:在百度搜索资源平台中,前端获取域名端口有什么特殊要求吗?
百度官方建议,页面内的JavaScript应避免直接读取内网或私有IP地址,否则可能触发安全策略,推荐使用window.location.host并配合白名单校验。
Q3:获取的端口号类型是字符串,如何转换为数字?
使用Number(port)或parseInt(port, 10),注意空字符串会转为NaN,需先判断是否为空。
你平时在哪个场景下需要获取域名和端口?欢迎在评论区分享你的经验,一起交流最佳实践。
参考文献
- MDN Web Docs. Location: host property. 2026年1月更新.
- W3C. HTML Living Standard: The Location interface. 2026年4月版本.
- 百度开发者中心. 前端安全实践指南. 2026年3月.
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/634729.html


评论列表(2条)
读了这篇文章,我深有感触。作者对属性的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!
这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于属性的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!