java中校验协议头应使用string.startswith()配合小写转换和完整前缀(如"http://"),先判空/空白再校验,封装为工具方法提升健壮性与复用性。
在 java 中,用 string.startswith() 校验协议头(如 "http://"、"https://"、"ws://"、"wss://")是否符合 api 规范,核心是**明确允许的协议前缀列表,并严格区分大小写与完整匹配逻辑**。它不负责解析 url,只做前缀判断,因此需配合业务规则使用。
明确支持的协议前缀并统一小写处理
API 规范通常要求协议头为小写(如 "https://" 而非 "HTTPS://")。建议先将输入字符串转为小写再校验,避免大小写导致误判:
- 定义合法前缀集合:
Set<string> validPrefixes = Set.of("http://", "https://", "ws://", "wss://");</string> - 对传入变量调用
toLowerCase()后再检查:input.toLowerCase().startsWith(prefix) - 注意:若规范强制区分大小写(极少见),则跳过转小写,但需在文档中明确说明
避免只校验协议名而忽略斜杠和冒号
仅检查 "http" 或 "https" 是不安全的——像 "httpsomething://" 或 "httpX://" 会误通过。必须校验完整协议头格式:
- ✅ 正确:用
"https://"而非"https" - ❌ 错误:用
str.startsWith("https")—— 无法拦截"httpsX://example.com" - 额外建议:校验后可结合
java.net.URL或正则进一步验证结构(如是否含有效域名),但startsWith()只管前缀
处理空值、空白字符串和 null 安全
startsWith() 对 null 会抛 NullPointerException,对空字符串 "" 返回 false,但业务上常需提前拦截:
- 使用
Objects.requireNonNull(input, "protocol header must not be null")明确拒绝 null - 用
StringUtils.isBlank(input)(Apache Commons)或input == null || input.trim().isEmpty()过滤空白 - 校验逻辑应放在空/无效检查之后,避免 NPE 并提升错误信息可读性
封装成可复用的工具方法
把协议校验逻辑提取为静态方法,便于测试和复用:
public static boolean isValidProtocolHeader(String header) {
if (header == null || header.trim().isEmpty()) {
return false;
}
String lower = header.trim().toLowerCase();
return lower.startsWith("http://") ||
lower.startsWith("https://") ||
lower.startsWith("ws://") ||
lower.startsWith("wss://");
}
调用时直接 if (!isValidProtocolHeader(input)) { throw new IllegalArgumentException("Invalid protocol header"); },语义清晰,不易遗漏边界情况。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











