我的目标是验证“请求行”的http请求,例如 GET http://www.ics.uci.edu/pub/ietf/uri/#Related HTTP/1.1
. 目前,我正在验证“请求目标”
我的参考号是rfc7230。遗憾的是,rfc7230没有指定 absolute-form
,文档中的一个新术语,原因令人困惑,因为文档中还说明 absolute-form = absolute-uri
. 因此,我不确定这是否有效 request-line
.
我正在使用正则表达式验证请求目标。
static void parse(String requestTarget) throws HttpParsingException {
Pattern pattern = Pattern.compile("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(requestTarget);
if (!matcher.matches()) {
throw new HttpParsingException(HttpStatusCode.CLIENT_ERROR_400_BAD_REQUEST);
}
}
请求目标值为(预期成功)
GET http://www.ics.uci.edu/pub/ietf/uri/#Related HTTP/1.1
GET / HTTP/1.1
GET /where
GET /where?q=now
请求目标值为(预计将失败)
GET // HTTP/1.1
GET HTTP/1.1
正则表达式来自[rfc3896]的附录b
1条答案
按热度按时间kx7yvsdv1#
请求目标为带有查询和片段的代理的http请求是有效的http请求吗?
这是无效的。
http消息语法和消息路由rfc要求
request-target
http请求消息中的url是absolute-uri
. (我看你已经明白了……)如果你跟踪
absolute-uri
返回到uri rfc中定义的术语,您将看到它意味着不允许使用片段。uri rfc说:4.3. 绝对uri
一些协议元素只允许uri的绝对形式,而不允许片段标识符。例如,定义一个基本uri以供以后由相对引用使用,需要一个不允许片段的绝对uri语法规则。
注意:该语法不允许
fragment
.我不打算讨论编写正则表达式来进行uri解析的问题。。。除了建议另一种选择是使用标准JavaSE之外
URI
班级。