如何确定域名和URL资源之间的区别?

时间:2018-02-15 11:20:26

标签: c++ web http-headers

我正在编写需要使用Location标头响应html重定向的代码。大多数情况下,它可以找到,但是,在某些情况下,标题只是简单地说要重定向到某个资源,可能是在同一主机上,例如

Location: main.html

在其他情况下,它只会提供一个新域名,例如

Location: abc.example.com

现在,我如何判断重定向是否需要以给定部分URL为前缀的现有主机域,而不必检查字符串后缀中的所有可能的顶级域?我唯一能想到的就是尝试一个结果URL,如果失败,则尝试另一个URL。

有没有人有过聪明的解决方案或者之前遇到过这个问题?

2 个答案:

答案 0 :(得分:1)

根据RFC 2616第14.30节,TitleName = "Title Name"标题必须指定 absoluteURI 。 RFC 2616从RFC 2396借用(参见第3.2.1节) absoluteURI 的规范,RFC 2396的第3部分清楚地表明 absoluteURI 是,好吧,绝对的URI。

任何其他类型的URI(例如您获得的示例回复)都违反了RFC 2616.这些回复无效,并且没有对它们的有效解释。

答案 1 :(得分:0)

首先,您似乎没有获得有效的位置标头。位置标题必须包含绝对URL(以说明符开头(例如" http:")或相对URL(以" //主机名"或" /开头) "(对于路径)。(请参阅https://en.wikipedia.org/wiki/HTTP_locationhttps://tools.ietf.org/html/rfc3986#section-4.2)。

话虽如此,如果您遇到服务器发送破坏的位置标头,您可以尝试一些启发式方法来猜测它是否以主机名开头。明显的包括它是以公共文件格式扩展名(例如.html,.txt,.pdf)还是常见的TLD后缀(例如.com,.org,.net)结尾。这不是万无一失的,因为TLD的爆炸式增长可能与文件扩展重叠,理论上,文件可以以任何形式结束(例如,某些文件可以以。 COM)。但它可能会让你98%的方式 - 然后你可以尝试两个,看看哪个给你一个答案。

总有可能两者都给你答案,在这种情况下它只是一个难题(tm)。这就是为什么规范就是这样 - 避免这种模糊性。