PHP内置服务器无法访问hosts配置的自定义域名本地站点
问题原因
核心触发点是*.dev属于Chromium内核浏览器(Chrome、Edge等)HSTS预加载列表内的强制HTTPS域名:
- 只要访问.dev后缀的域名,不管你手动输入的是HTTP还是HTTPS地址,浏览器都会在本地自动将请求跳转到HTTPS 443端口,不会向80端口发送明文HTTP请求。
- PHP内置Web服务器默认仅支持HTTP协议,没有配置SSL能力,接收到浏览器发来的HTTPS加密请求时无法解析,就会抛出
Unsupported SSL request错误。
几个测试现象的对应解释:
- curl能正常访问:curl不会读取浏览器的HSTS预加载规则,请求HTTP地址时会正常发送明文请求到对应端口,所以可以拿到响应。
- ping指定端口无法连通:ping基于ICMP协议,本身就不支持端口参数,加端口属于命令用法错误,和服务是否正常运行无关。
解决方案
- 优先选最省事的方案:更换本地测试域名后缀。不要使用.dev、.app这类已经被纳入公网HSTS预加载列表的顶级域,改用专门保留给本地开发的后缀,比如
.test、.localhost、.local。修改hosts对应解析记录后,执行php -S 0.0.0.0:80启动服务,浏览器访问对应HTTP地址即可正常打开。 - 如果必须使用.dev后缀:给PHP内置服务器配置SSL支持。首先本地生成自签名SSL证书与私钥,编写简单的PHP脚本指定证书路径,启动服务时加载该SSL配置,监听443端口,同时将自签名证书加入系统信任列表,避免浏览器报连接不安全。注意不要尝试通过清除浏览器缓存、手动输入HTTP地址的方式绕过跳转,.dev的HSTS规则是硬编码在浏览器内核里的,本地操作无法跳过强制HTTPS逻辑。
内容的提问来源于stack exchange,提问作者astrononeko
相关产品推荐
相关产品推荐

