当前位置:首页 > 运维技术 > 正文

如何使用JS获取当前域名和端口号?js获取域名端口方法

在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():

如何使用JS获取当前域名和端口号?js获取域名端口方法 第1张

不同开发场景下的实战应用

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);

如何使用JS获取当前域名和端口号?js获取域名端口方法 第2张

常见问题与最佳实践

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';

性能与兼容性

  • 如何使用JS获取当前域名和端口号?js获取域名端口方法 第3张

    浏览器兼容性: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,需先判断是否为空。

    你平时在哪个场景下需要获取域名和端口?欢迎在评论区分享你的经验,一起交流最佳实践。

    参考文献

    1. MDN Web Docs. Location: host property. 2026年1月更新.
    2. W3C. HTML Living Standard: The Location interface. 2026年4月版本.
    3. 百度开发者中心. 前端安全实践指南. 2026年3月.

0