Retrofit配置带443端口的BASE URL不生效该如何解决
Retrofit 配置带443端口BASE URL的解决方案
首先明确核心前提:443是行业通用的HTTPS协议默认端口,绝大多数服务端的443端口只会监听HTTPS请求,使用HTTP协议访问443端口时,服务端会直接拒绝请求或返回协议不兼容错误,这是该问题最常见的诱因。
按照以下步骤依次排查配置即可解决:
1. 确认服务端443端口支持的协议
- 如果服务端443端口仅支持HTTPS,直接修改BASE URL的协议头为
https即可,正确格式为https://xxx.xxx.xx.xxx:443/。Retrofit会自动识别443为HTTPS默认端口,你也可以省略端口号直接写https://xxx.xxx.xx.xxx/,两种写法效果完全一致。 - 若确认服务端443端口确实开放了HTTP服务(仅见于特殊自定义配置的内网服务),再继续往下排查。
2. 校验Retrofit BASE URL写法合规性
Retrofit对BASE URL格式有严格要求,带端口的写法必须满足两个规则:
- 必须以斜杠
/结尾,正确示例:http://192.168.0.100:443/,如果缺少末尾的斜杠,Retrofit拼接接口路径时会出现异常。 - 接口注解上的路径不要以斜杠开头,比如BASE URL为
http://xxx:443/api/v1/时,接口注解应写为@GET("user/info"),不要写@GET("/user/info"),否则会直接覆盖BASE URL的路径部分。
3. 排查OkHttp配置冲突
如果确认要使用HTTP访问443端口,检查OkHttp的自定义配置:
- 有没有配置全局拦截器,自动将443端口的HTTP请求强制转换为HTTPS请求
- 有没有配置SSL相关规则,强制443端口走HTTPS证书校验,若有对应规则删除即可。
提醒:HTTP协议访问443端口属于非常规操作,生产环境不推荐使用,容易出现防火墙拦截、运营商限流、协议兼容等各类不可预知的问题。
内容的提问来源于stack exchange,提问作者Richa Shah
相关产品推荐
相关产品推荐

