CN105426474B - 统一资源定位符url匹配的方法及装置 - Google Patents
统一资源定位符url匹配的方法及装置 Download PDFInfo
- Publication number
- CN105426474B CN105426474B CN201510794164.0A CN201510794164A CN105426474B CN 105426474 B CN105426474 B CN 105426474B CN 201510794164 A CN201510794164 A CN 201510794164A CN 105426474 B CN105426474 B CN 105426474B
- Authority
- CN
- China
- Prior art keywords
- host
- path
- node
- substring
- matched
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/955—Retrieval from the web using information identifiers, e.g. uniform resource locators [URL]
- G06F16/9566—URL specific, e.g. using aliases, detecting broken or misspelled links
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明涉及通信技术领域,公开了统一资源定位符URL匹配的方法,该方法包括:接收待匹配的URL;根据主机域名Host匹配规则对接收的URL的Host进行匹配,查找到对应的资源路径Path匹配规则;根据查找到的Path匹配规则对URL的Path进行匹配,查找到对应的处理规则;将查找到的处理规则作为所述URL对应的处理规则进行输出。本发明能够实现精确匹配,并且能够减少匹配深度,在实现精确匹配的同时能够提高匹配速度。
Description
技术领域
本发明涉及通信技术领域,具体地,涉及一种统一资源定位符URL匹配的方法及装置。
背景技术
URL(统一资源定位符,Uniform Resource Locator)是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。URL中包括Host(主机域名)和资源路径(Path)以及参数三部分,其中参数为可选的。URL的Host可采用域名(Domain Name)或直接使用主机的IP地址表示,Path则表明资源在Host上存放的位置,结合这两部分,URL实现全网唯一标识资源。例如,如下URL“a.b.c/path/to/resource.suffix?para1=val1¶2=val2”中,“a.b.c”为Host部分,“/path/to/resource.suffix?”为path部分,“para1=val1¶2=val2”为参数部分。
Host域名中使用分隔符‘.’将其分成不同的块(label),从最右边向左的块依次表示顶级域名、二级域名、三级域名等等。顶级域名有两类:国际顶级域名(internationalTop-Level Domain names,简称iTLDs)和国家顶级域名(national Top-Level Domainnames,简称nTLDs)。国际顶级域名是使用最早也最广泛的域名,表示域名注册企业、注册人的类别,例如工商企业是com、非盈利组织org、网络提供商net等。国家顶级域名采用ISO3166国家、地区代码表示不同的国家或地区,例如,中国是cn、美国是us、香港是hk等。
对于不同的URL对应有不同的处理规则,例如进行屏蔽请求操作、统计信息操作、HTTP重定向等。如此,需要对URL进行匹配,以确定出对应的处理规则。现有技术中的URL匹配方法包括:布隆过滤器(Bloom filter)方法,被用来检测一个元素是否为集合中的一个成员。如果检测结果为是,该元素不一定在集合中;但如果检测结果为否,则该元素一定不在集合中。因为这些特性,使得布隆过滤器不能进行精确过滤。
发明内容
为解决上述问题,至少部分的解决上述问题,本发明提供了一种统一资源定位符URL匹配的方法及装置。
根据本发明的一方面,提供一种统一资源定位符URL匹配的方法,该方法包括:接收待匹配的URL;根据主机域名Host匹配规则对接收的URL的Host进行匹配,查找到对应的资源路径Path匹配规则;根据查找到的Path匹配规则对URL的Path进行匹配,查找到对应的处理规则;将查找到的处理规则作为所述URL对应的处理规则进行输出。
优选地,所述Host匹配规则表示为节点中包括特征匹配字符串的Host二叉树,所述根据主机域名Host匹配规则对接收的URL的Host进行匹配包括:根据第一分隔符对接收的URL的Host进行分割获得Host的子字符串,按照在Host中从右到左的顺序将Host的子字符串排序;在Host二叉树中,根据分割所得Host的子字符串和子字符串的排序进行匹配查找;将Host在Host二叉树中最后匹配的节点所携带的信息确定为URL对应的Path匹配规则。
优选地,所述Host二叉树的节点还包括位置序号;所述按照在Host中从右到左的顺序将Host的子字符串排序包括:按照在Host中从右到左的顺序将Host的子字符串编号使得子字符串具有对应的序号;所述在Host二叉树中,根据分割所得Host的子字符串和子字符串的排序进行匹配查找包括:当Host的子字符串和序号与Host二叉树中当前节点的特征匹配字符串和位置序号都匹配时,确定Host的子字符串和当前节点匹配;当Host的子字符串与当前节点匹配时,选择当前节点的孩子节点进行匹配,当Host的子字符串与当前节点不匹配时,选择当前节点的兄弟节点进行匹配。
优选地,所述在Host二叉树中,根据分割所得Host的子字符串和子字符串的排序进行匹配查找还包括:当Host的子字符串匹配的当前节点的孩子节点为空时,判断当前节点是否具有携带的信息,如果具有携带的信息,则将当前节点作为Host在Host二叉树中最后匹配的节点;如果不具有携带的信息,则将最后匹配的具有携带的信息的节点作为Host在Host二叉树中最后匹配的节点;当Host的子字符串不匹配的当前节点的兄弟节点为空时,将最后匹配的具有携带的信息的节点作为Host在Host二叉树中最后匹配的节点。
优选地,所述Host二叉树的根节点的孩子节点和/或根节点的兄弟节点的孩子节点中以哈希Hash散列表的形式存储多个特征匹配字符串;所述根据分割所得Host的子字符串和子字符串的排序进行匹配查找包括:当当前的节点为根节点的孩子节点和/或根节点的兄弟节点的孩子节点时,在Hash散列表中进行Hash散列查找。
优选地,所述根据第一分隔符对接收的URL的Host进行分割获得Host的子字符串包括:判断Host是否满足顶级域名为国家顶级域名且二级域名为类别符号;如果是,则将顶级域名和二级域名合并为一个子字符串,将二级域名之后部分从第一分隔符处进行分割得到子字符串;否则,将Host从第一分隔符处进行分割得到子字符串。
优选地,所述Path匹配规则表示为节点中包括特征匹配字符串的Path二叉树,所述根据查找到的Path匹配规则对URL的Path进行匹配包括:根据第二分隔符对接收的URL的Path进行分割获得Path的子字符串,按照在Path中从左到右的顺序将Path的子字符串排序;在Path二叉树中,根据分割所得Path的子字符串和子字符串的排序进行匹配查找;将Path在Path二叉树中最后匹配的节点所携带的信息确定为URL对应的处理规则。
优选地,所述Path二叉树的节点还包括位置序号;所述按照在Path中从左到右的顺序将Path的子字符串排序包括:按照在Path中从左到右的顺序将Path的子字符串编号使得子字符串具有对应的序号;所述在Path二叉树中,根据分割所得Path的子字符串和子字符串的排序进行匹配查找包括:当Path的子字符串和序号与Path二叉树中当前节点的特征匹配字符串和位置序号都匹配时,确定Path的子字符串和当前节点匹配;当Path的子字符串与当前节点匹配时,选择当前节点的孩子节点进行匹配,当Path的子字符串与当前节点不匹配时,选择当前节点的兄弟节点进行匹配。
优选地,所述在Path二叉树中,根据分割所得Path的子字符串和子字符串的排序进行匹配查找还包括:当Path的子字符串匹配的当前节点的孩子节点为空时,判断当前节点是否具有携带的信息,如果具有携带的信息,则将当前节点作为Path在Path二叉树中最后匹配的节点;如果不具有携带的信息,则将最后匹配的具有携带的信息的节点作为Path在Path二叉树中最后匹配的节点;当Path的子字符串不匹配的当前节点的兄弟节点为空时,将最后匹配的具有携带的信息的节点作为Path在Path二叉树中最后匹配的节点。
根据本发明的另一方面,提供了一种统一资源定位符URL匹配的装置,该装置包括:接收模块,用于接收待匹配的URL;Host匹配模块,用于根据主机域名Host匹配规则对接收的URL的Host进行匹配,查找到对应的资源路径Path匹配规则;Path匹配模块,用于根据查找到的Path匹配规则对URL的Path进行匹配,查找到对应的处理规则;输出模块,用于将查找到的处理规则作为所述URL对应的处理规则进行输出。
优选地,所述Host匹配规则表示为节点中包括特征匹配字符串的Host二叉树,所述Host匹配模块包括:第一分割子模块,用于根据第一分隔符对接收的URL的Host进行分割获得Host的子字符串,按照在Host中从右到左的顺序将Host的子字符串排序;
第一查找子模块,用于在Host二叉树中,根据分割所得Host的子字符串和子字符串的排序进行匹配查找;第一确定子模块,用于将Host在Host二叉树中最后匹配的节点所携带的信息确定为URL对应的Path匹配规则。
优选地,所述Host二叉树的节点还包括位置序号;所述第一分割子模块用于按照在Host中从右到左的顺序将Host的子字符串编号使得子字符串具有对应的序号;所述第一查找子模块用于当Host的子字符串和序号与Host二叉树中当前节点的特征匹配字符串和位置序号都匹配时,确定Host的子字符串和当前节点匹配;当Host的子字符串与当前节点匹配时,选择当前节点的孩子节点进行匹配,当Host的子字符串与当前节点不匹配时,选择当前节点的兄弟节点进行匹配。
优选地,所述第一查找子模块还用于当Host的子字符串匹配的当前节点的孩子节点为空时,判断当前节点是否具有携带的信息,如果具有携带的信息,则将当前节点作为Host在Host二叉树中最后匹配的节点;如果不具有携带的信息,则将最后匹配的具有携带的信息的节点作为Host在Host二叉树中最后匹配的节点;当Host的子字符串不匹配的当前节点的兄弟节点为空时,将最后匹配的具有携带的信息的节点作为Host在Host二叉树中最后匹配的节点。
优选地,所述Host二叉树的根节点的孩子节点和/或根节点的兄弟节点的孩子节点中以哈希Hash散列表的形式存储多个特征匹配字符串;所述第一查找子模块用于当当前的节点为根节点的孩子节点和/或根节点的兄弟节点的孩子节点时,在Hash散列表中进行Hash散列查找。
优选地,所述第一分割子模块用于判断Host是否满足顶级域名为国家顶级域名且二级域名为类别符号;如果是,则将顶级域名和二级域名合并为一个子字符串,将二级域名之后部分从第一分隔符处进行分割得到子字符串;否则,将Host从第一分隔符处进行分割得到子字符串。
优选地,所述Path匹配规则表示为节点中包括特征匹配字符串的Path二叉树,所述Path匹配模块包括:第二分割子模块,用于根据第二分隔符对接收的URL的Path进行分割获得Path的子字符串,按照在Path中从左到右的顺序将Path的子字符串排序;
第二查找子模块,用于在Path二叉树中,根据分割所得Path的子字符串和子字符串的排序进行匹配查找;第二确定子模块,用于将Path在Path二叉树中最后匹配的节点所携带的信息确定为URL对应的处理规则。
优选地,所述Path二叉树的节点还包括位置序号;所述第二分割子模块用于按照在Path中从左到右的顺序将Path的子字符串编号使得子字符串具有对应的序号;所述第二查找子模块用于当Path的子字符串和序号与Path二叉树中当前节点的特征匹配字符串和位置序号都匹配时,确定Path的子字符串和当前节点匹配;当Path的子字符串与当前节点匹配时,选择当前节点的孩子节点进行匹配,当Path的子字符串与当前节点不匹配时,选择当前节点的兄弟节点进行匹配。
优选地,所述第二查找子模块还用于当Path的子字符串匹配的当前节点的孩子节点为空时,判断当前节点是否具有携带的信息,如果具有携带的信息,则将当前节点作为Path在Path二叉树中最后匹配的节点;如果不具有携带的信息,则将最后匹配的具有携带的信息的节点作为Path在Path二叉树中最后匹配的节点;当Path的子字符串不匹配的当前节点的兄弟节点为空时,将最后匹配的具有携带的信息的节点作为Path在Path二叉树中最后匹配的节点。
通过上述技术方案,对URL进行Host和Path两级匹配,根据Host匹配规则对接收的URL的Host进行匹配,查找到对应的资源路径Path匹配规则,根据查找到的Path匹配规则对URL的Path进行匹配,查找到对应的处理规则,如此,能够实现精确匹配,并且能够减少匹配深度,在实现精确匹配的同时能够提高匹配速度。
本发明的其它特征和优点将在随后的具体实施方式部分予以详细说明。
附图说明
附图是用来提供对本发明的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本发明,但并不构成对本发明的限制。在附图中:
图1是根据本发明一实施例的URL匹配的方法的流程图;
图2是根据本发明一实施例的URL匹配的方法的示意图;
图3是根据本发明一实施例的Host匹配的过程的流程图;
图4是根据本发明一实施例的Host二叉树的示意图;
图5是根据本发明一实施例的Host二叉树的示意图;
图6是根据本发明一实施例的Host二叉树的示意图;
图7是根据本发明一实施例的Host二叉树的示意图;
图8是根据本发明一实施例的Host二叉树的示意图;
图9是根据本发明一实施例的Host二叉树的示意图;
图10是根据本发明一实施例的Path匹配的过程的流程图;
图11是根据本发明一实施例的Path二叉树的示意图;
图12是根据本发明一实施例的Path二叉树的示意图;
图13是根据本发明一实施例的URL匹配的装置的结构图;
图14是根据本发明一实施例的URL匹配的装置的结构图。
具体实施方式
以下结合附图对本发明的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明,并不用于限制本发明。
图1是根据本发明一实施例的URL匹配的方法的流程图。该方法适于各种设备,例如终端、服务器、网络设备(例如,交换机、路由器等),如图1所示,该方法包括如下步骤。
在步骤S110中,接收待匹配的URL。
在步骤S120中,根据主机域名Host匹配规则对接收的URL的Host进行匹配,查找到对应的资源路径Path匹配规则。
在步骤S130中,根据查找到的Path匹配规则对URL的Path进行匹配,查找到对应的处理规则。
在步骤S140中,将查找到的处理规则作为URL对应的处理规则进行输出。
举例而言,如图2所示,将URL的匹配过程分为两级,包括:匹配主机域名Host和匹配资源路径Path。URL中参数不参与URL的匹配。在第一级匹配,即Host匹配中,如果未找到相匹配的Host或者相匹配的Host没有携带Path匹配规则,则终止匹配操作,查找URL处理规则失败。否则,根据输出的Path匹配规则,进行第二级匹配操作。在第二级匹配,即Path匹配中,根据查找到的Path匹配规则对输入的Path进行匹配查找,查找到匹配的Path,从该匹配的Path携带的信息中得到URL的处理规则,如果未找到相匹配的Path或匹配的Path未携带信息,则查找URL处理规则失败。其中,Host匹配和Path匹配中分别进行字符串匹配。
在一实施例中,Host匹配规则可表示为节点中包括特征匹配字符串的Host二叉树。如图3所示,所述根据主机域名Host匹配规则对接收的URL的Host进行匹配可包括如下步骤。
在步骤S310中,根据第一分隔符对接收的URL的Host进行分割获得Host的子字符串,按照在Host中从右到左的顺序将Host的子字符串排序。
其中,所述按照在Host中从右到左的顺序将Host的子字符串排序可包括:按照在Host中从右到左的顺序将Host的子字符串编号使得子字符串具有对应的序号。例如,根据Host中分隔符“.”将URL的Host按从右向左的顺序分割成子字符串,并将子字符串按顺序编号为0,1,2,…依次递增。
进一步地,所述根据第一分隔符对接收的URL的Host进行分割获得Host的子字符串可包括:判断Host是否满足顶级域名为国家顶级域名且二级域名为类别符号;如果是,则将顶级域名和二级域名合并为一个子字符串,将二级域名之后部分从第一分隔符处进行分割得到子字符串;否则,将Host从第一分隔符处进行分割得到子字符串。
举例而言,当Host顶级域名是国际顶级域名时,根据分隔符‘.’将Host分成多个子字符串,从右向左依次将子字符串编号为0,1,2…递增。
当Host顶级域名是国家顶级域名时,如果Host二级域名是类别符号,例如表示域名注册企业、域名注册人(例如,com、edu、gov、net等)时,将Host顶级域名、Host二级域名和中间的分隔符‘.’作为Host一个子字符串,Host其余部分根据分隔符‘.’分成多个子字符串。将分割出的所有子字符串按从右向左依次编号为0,1,2…递增。
当Host顶级域名是国家顶级域名时,如果Host二级域名是除类别符号之外的其他内容,例如表示域名注册企业、域名注册人(例如ruijie、sipo等)时,根据分隔符‘.’将Host分成多个子字符串,按从右向左顺序依次将子字符串编号为0,1,2…递增。
例如,对于Host“sipo.gov.cn”,Host顶级域名“cn”是国家顶级域名,Host二级域名“gov”是类别符号,此时,将Host顶级域名“cn”、Host二级域名“gov”和中间的分隔符‘.’作为Host一个子字符串“gov.cn”,Host其余部分“sipo”为另一个子字符串。将分割出的所有子字符串按从右向左依次编号,从右向左依次为:“gov.cn”对应序号为0,“sipo”对应序号为1。
采用上述将国家顶级域名和二级域名合并的方法能够进一步减少Host二叉树中节点数量,节约存储空间,并且能够提高查找速度。
在步骤S320中,在Host二叉树中,根据分割所得Host的子字符串和子字符串的排序进行匹配查找。
在一实施例中,所述Host二叉树的节点还包括位置序号。所述在Host二叉树中,根据分割所得Host的子字符串和子字符串的排序进行匹配查找可包括:当Host的子字符串和序号与Host二叉树中当前节点的特征匹配字符串和位置序号都匹配时,确定Host的子字符串和当前节点匹配;当Host的子字符串与当前节点匹配时,选择当前节点的孩子节点进行匹配,当Host的子字符串与当前节点不匹配时,选择当前节点的兄弟节点进行匹配。
进一步地,所述在Host二叉树中,根据分割所得Host的子字符串和子字符串的排序进行匹配查找还可包括:当Host的子字符串匹配的当前节点的孩子节点为空时,判断当前节点是否具有携带的信息,该携带信息中包括对应的Path匹配规则。如果具有携带的信息,则将当前节点作为Host在Host二叉树中最后匹配的节点;如果不具有携带的信息,则将最后匹配的具有携带的信息的节点作为Host在Host二叉树中最后匹配的节点。当Host的子字符串不匹配的当前节点的兄弟节点为空时,将最后匹配的具有携带的信息的节点作为Host在Host二叉树中最后匹配的节点。例如,将图4中PR4改为节点org中携带的信息,叶子节点ietf不具有携带的信息。在此种情况下,Host:ietf.org虽然与叶子节点ietf匹配,但是叶子节点ietf不具有携带的信息,因此,认为与Host:ietf.org最后匹配的节点为节点org,节点org携带的信息PR4为Host:ietf.org对应的Path匹配规则。又例如,将图4中PR4改为节点org中携带的信息,将叶子节点ietf中特征匹配字符串改为ABC,即成为叶子节点ABC。在此种情况下,Host:ietf.org与叶子节点ABC不匹配,与Host:ietf.org最后匹配的节点为节点org,且节点org具有携带的信息,因此认为Host:ietf.org在Host二叉树中最后匹配的节点为节点org,对应的Path匹配规则为节点org中携带的信息PR4。
本实施方式中,Host匹配规则采用二叉树的形式,传统二叉树为字典树,每个节点中存储单个字母。本实施例中,节点中存储字符串,即特征匹配字符串,如此,既可以节约存储开销又可以降低查找深度,提高查找速度。
举例而言,可以依据Host匹配规则构建Host二叉树,Host二叉树的节点中存储特征匹配字符串和位置序号,一些节点还携带信息,即对应的Path匹配规则,兄弟节点间的位置序号相同。如下所示的4个Host具有对应Host匹配规则MR1-MR4,并且Host匹配规则分别具有对应的Path匹配规则PR1-PR4。
Host1:ruijie.com.cn;对应匹配规则MR1:0=“cn”,1=“com”,2=“ruijie”;对应Path匹配规则为PR1。
Host2:sipo.gov.cn;对应匹配规则MR2:0=“cn”,1=“gov”,2=“sipo”;对应Path匹配规则为PR2。
Host3:cctv.com;对应匹配规则MR3:0=“com”,1=“cctv”;对应Path匹配规则为PR3。
Host4:ietf.org;对应匹配规则MR4:0=“org”,1=“ietf”;对应Path匹配规则为PR4。
如图4所示,依据上述4个Host匹配规则建立的Host二叉树中,节点左侧为兄弟节点,节点右侧为孩子节点,图4中节点右上方标出节点对应位置序号,左上方标出节点携带的信息,即对应的Path匹配规则。图4中的深色的4个叶子节点分别对应上述4个Host匹配规则,其中Host1:ruijie.com.cn的Host匹配规则MR1内容为0=“cn”,1=“com”,2=“ruijie”。依次表示0号位置的特征匹配字符串为“cn”,1号位置的特征匹配字符串为“com”,2号位置的特征匹配字符串为“ruijie”。
在Host匹配过程中,如果一个URL的Host在0、1、2号位置的子字符串与MR1中对应位置的特征匹配字符串相同,则确定该URL的Host与MR1匹配,查找到对应的Path匹配规则PR1。对于www.ruijie.com.cn和ruijie.com.cn在图4的二叉树中进行查找,两者都与MR1匹配,其对应的Path匹配规则都为PR1。
当一个内容服务商部署有多台服务器或CDN(内容分发网络)时,上述方法能够节约存储空间提高匹配速度。例如某公司数据服务器有如下:
s0.company-data.com
s1.company-data.com
s2.company-data.com
…
s9.company-data.com
共10个数据服务器时,本方法中仅需指定一条Host匹配规则即可实现上述10个Host的匹配:0=“com”,1=“company-data”。
如果需要将上例中www.ruijie.com.cn和ruijie.com.cn分开,采用不同的处理规则,可再加入更加明细的Host:www.ruijie.com.cn及对应匹配规则MR5和Path匹配规则PR5:
Host5:www.ruijie.com.cn,对应匹配规则MR5:0=“cn”,1=“com”,2=“ruijie”,3=“www”,Path匹配规则PR5,将增加的Host匹配规则添加到Host二叉树中,获得如图5所示的Host二叉树。此时,查找“ruijie.com.cn”时会得到Path匹配规则PR1,而查找“www.ruijie.com.cn”时会得到Path匹配规则PR5。
在一实施例中,所述Host二叉树的根节点的孩子节点和/或根节点的兄弟节点的孩子节点中可以以Hash(哈希)散列表的形式存储多个特征匹配字符串。所述根据分割所得Host的子字符串和子字符串的排序进行匹配查找可包括:当当前的节点为根节点的孩子节点和/或根节点的兄弟节点的孩子节点时,在Hash散列表中进行Hash散列查找。
本发明中URL的匹配过程采用Host和Path两级匹配查找,由于网络中Host(网站)数量庞大(数以亿计),而一个Host下Path匹配规则数量相对较少(常见的几个至几十个不等),因此Host匹配查找是提高URL匹配速度的关键。例如,对如下Host进行匹配的Host匹配规则的Host二叉树如图6所示(图6中未示出位置序号和Path匹配规则)。
gdown.baidu.com
szdl.cmbchina.com
apk.lenovomm.com
market.mi-img.com
car0.autoimg.com
img.autohome.com
qh.dlservice.microsoft.com
图6中Host二叉树随着Host数量的增加会越来越深,导致匹配速度越来越慢。因此,Host的匹配中加入Hash散列查找算法进行优化。将1号位置的特征匹配字符串采用Hash散列表进行存储,Hash散列表中每个表项存储一个位置节点的特征匹配字符串,如果该1号位置的节点具有孩子节点,则该表项还对应存储孩子节点。
Host匹配中,在Hash散列表中进行1号位置子字符串匹配操作时,使用Hash散列方式查找到与Host的1号位置子字符串相匹配的Hash散列表的表项。如果未找到与Host的1号位置子字符串相匹配的Hash散列表的表项,则结束Host匹配操作,这种结束时返回最后一个相匹配且携带信息的节点携带的信息作为查找到的Path匹配规则。如果找到与Host的1号位置子字符串相匹配的Hash散列表的表项,继续选择该表项中保存的2号位置的特征匹配字符串进行比较。
举例而言,当在Host中域名包括公司、组织注册域名时,使用Hash散列表存储1号位置的特征匹配字符串。将图6中1号位置的节点采用Hash散列表进行存储,得到如图7所示的Host二叉树。
在公司、组织注册域名使用Hash查找,能显著减少查找中比较次数。作为对比,以对Host“qh.dlservice.microsoft.com”匹配为例,使用Hash优化之前至少需比较10次,使用Hash优化之后至少仅需比较4次。随着URL规则中Host的增加,在满足Hash表项预设足够多的情况下,Host匹配查找性能几乎不会随着规则库增大而降低,使用Hash优化的匹配性能提升越显著。
此外,使用Hash散列优化Host中公司、组织域名查找时,如果Host顶级域名是国家顶级域名且Host二级域名是类别符号(例如,域名注册企业、域名注册人等),则可将Host顶级域名和二级域名,以及之间的分隔符组合成一个子字符串,最终使得Host中公司、组织注册的域名是Host的第1号位置子字符串。例如,Host“sipo.gov.cn”分割后,“gov.cn”对应序号为0,“sipo”对应序号为1。采用此种方法,图4中Host二叉树可优化为如图8所示的Host二叉树。
将此处Host的顶级域名和二级域名合并与Hash散列表优化相结合,则可以得到如图9所示的Host二叉树。
以下对Host匹配进行举例说明。Host匹配操作,从Host二叉树的根节点开始比较。
Host二叉树中,轮到与当前节点比较时,根据当前节点的位置序号,从Host的子字符串中找到对应位置的子字符串,将对应位置的子字符串与当前节点的特征匹配字符串进行比较,长度和值完全相同时,则认为与当前节点相匹配,否则认为与当前节点不匹配。
Host二叉树中,一个节点具有一个直接相连的兄弟节点和一个直接连接的孩子节点,直接相连的兄弟节点的兄弟节点也为该节点的兄弟节点,但不为直接连接的兄弟节点,直接相连的孩子节点的兄弟节点也为该节点的孩子节点,但不为直接连接的孩子节点。如果节点没有兄弟节点,则称该节点的兄弟节点为空。如果节点没有孩子节点,则称该节点的孩子节点为空。
当Host与当前节点相匹配时,继续选择当前节点的孩子节点进行比较。
当Host与当前节点相匹配时,如果当前节点的孩子节点为空,则匹配操作结束。这种结束时,如果当前节点携带有信息,则返回当前节点携带的信息。这种结束时,如果当前节点未携带信息,则返回最后一个相匹配且携带信息的节点携带的信息。
当Host与当前节点不匹配时,继续选择当前节点的兄弟节点进行比较。
当Host与当前节点不匹配时,如果当前节点的兄弟节点为空,则匹配操作结束。这种结束时,返回最后一个相匹配且携带信息的节点携带的信息。
当Host在Host二叉树中,没有相匹配的节点,则返回空信息。
当Host在Host二叉树中,有相匹配的节点,但所有相匹配的节点都未携带信息,则返回空信息。
匹配Host时,Host二叉树中节点携带的信息是Path匹配规则,如果获得空信息,则未匹配到Host。
在经Hash散列表优化的Host二叉树中进行匹配查找。Host二叉树中,1号位置的特征匹配字符串的比较使用Hash散列进行了优化,其余位置特征匹配字符串仍采用二叉树实现比较。本发明对采用Hash散列的节点的位置没有限定,优选地,在Host二叉树中1号位置处采用Hash散列进行优化,因为在Host二叉树中1号位置的特征匹配字符串的数量最多,采用Hash散列进行优化能够显著提高性能。
使用的经Hash散列表优化的Host二叉树中,0号位置节点的孩子节点不是二叉树形式的节点,而是Hash散列表,该表中使用Hash散列方式保存有1号位置的特征匹配字符串。0号位置节点的兄弟仍然是二叉树的节点。
Host匹配中,所有0号位置特征匹配字符串相同的Host匹配规则,使用相同的0号位置节点。该节点的孩子节点为Hash散列表,在Hash散列表中保存这些Host匹配规则的所有1号位置特征匹配字符串。
Host匹配中,Hash散列表每个表项保存,一条Host匹配规则中1号位置特征匹配字符串,以及匹配时,待继续比较的2号位置节点(如果有的话),2号位置节点是二叉树节点。
Host匹配中,匹配操作从Host二叉树的根节点开始比较,即从0号位置节点开始匹配。当找到相匹配的0号位置节点时,选取该节点的孩子Hash散列表,继续1号位置子字符串匹配操作。之后,对匹配的1号位置节点的孩子节点进行匹配。
在步骤S330中,将Host在Host二叉树中最后匹配的节点所携带的信息确定为URL对应的Path匹配规则。
在一实施例中,Path匹配规则可表示为节点中包括特征匹配字符串的Path二叉树。如图10所示,所述根据查找到的Path匹配规则对URL的Path进行匹配包括如下步骤。
在步骤S1010中,根据第二分隔符对接收的URL的Path进行分割获得Path的子字符串,按照在Path中从左到右的顺序将Path的子字符串排序。
其中,所述按照在Path中从左到右的顺序将Path的子字符串排序可包括:按照在Path中从左到右的顺序将Path的子字符串编号使得子字符串具有对应的序号。
举例而言,根据分隔符‘/’将Path分为多个子字符串,从左向右依次规定这些子字符串位置编号为0,1,2…递增。Path中最右边的子字符串,即位置编号最大的子字符串,除了有位置编号外,再赋予特殊位置名称tail(尾部),即Path中位置编号最大的子字符串又被称为tail位置子字符串。Path中tail位置子字符串,如果有文件后缀名,则赋予文件后缀名子字符串特殊位置名称suffix(后缀),即Path中tail位置子字符串的文件后缀名被称为suffix位置子字符串。也就是,其尾部斜杠‘/’后面的字符串(最右边的字符串)赋予特殊位置编号tail。如果Path的tail子字符串有文件名后缀,则赋予特殊位置编号suffix。Path中tail位置子字符串,如果没有文件后缀名,则称Path没有suffix位置子字符串。Path匹配规则中定义了Path匹配中需要比较的一个或多个特征匹配字符串及其位置序号。
例如,对Path“/full/path/to/filename.suffix”根据分隔符“/”进行分割,并按从左到右的顺序标号,得到子字符串:“full”对应序号为0,“path”对应序号为1,“to”对应序号为2,“filename.suffix”对应序号为“3”,并且还被称为“tail”子字符串以及“suffix”子字符串。
在步骤S1020中,在Path二叉树中,根据分割所得Path的子字符串和子字符串的排序进行匹配查找。
在一实施例中,所述Path二叉树的节点还可包括位置序号;所述在Path二叉树中,根据分割所得Path的子字符串和子字符串的排序进行匹配查找可包括:当Path的子字符串和序号与Path二叉树中当前节点的特征匹配字符串和位置序号都匹配时,确定Path的子字符串和当前节点匹配;当Path的子字符串与当前节点匹配时,选择当前节点的孩子节点进行匹配,当Path的子字符串与当前节点不匹配时,选择当前节点的兄弟节点进行匹配。
进一步地,所述在Path二叉树中,根据分割所得Path的子字符串和子字符串的排序进行匹配查找还包括:当Path的子字符串匹配的当前节点的孩子节点为空时,判断当前节点是否具有携带的信息,如果具有携带的信息,则将当前节点作为Path在Path二叉树中最后匹配的节点;如果不具有携带的信息,则将最后匹配的具有携带的信息的节点作为Path在Path二叉树中最后匹配的节点;当Path的子字符串不匹配的当前节点的兄弟节点为空时,将最后匹配的具有携带的信息的节点作为Path在Path二叉树中最后匹配的节点。
举例而言,Path匹配规则中定义了Path匹配时需要比较的一个或多个特征匹配字符串和位置序号。例如download.windowsupdate.com服务器上有如下9条Path的匹配规则PR,并分别具有对应的处理规则AR。
Path1匹配规则PR1:0=“msdownload”,suffix=“cab”处理规则AR1
Path2匹配规则PR2:0=“msdownload”,suffix=“exe”处理规则AR2
Path3匹配规则PR3:0=“msdownload”,suffix=“msu”处理规则AR3
Path4匹配规则PR4:0=“msdownload”,suffix=“psf”处理规则AR4
Path5匹配规则PR5:1=“msdownload”,suffix=“cab”处理规则AR5
Path6匹配规则PR6:1=“msdownload”,suffix=“exe”处理规则AR6
Path7匹配规则PR7:1=“msdownload”,suffix=“msu”处理规则AR7
Path8匹配规则PR8:1=“msdownload”,suffix=“psf”处理规则AR8
Path9匹配规则PR9:0=“msdownload”,2=“”,suffix=“cab”处理规则AR9
依据上述9条Path匹配规则,生成如图11所述的Path二叉树。图11中,深色的9个节点分别对应上述9条Path的匹配规则,节点左上方表示对应的处理规则。在图11中,内容为字符“*”的节点表示通配符节点,与通配符节点匹配比较时,所有的非空子字符串都与其相匹配,即对于非空子字符串,继续与通配符节点的孩子节点进行比较。在Path5-8的匹配规则中,对0号位置的字符串没有要求,规定了1号位置和suffix位置的特征匹配字符串,在Path9的匹配规则中,对1号位置的字符串没有要求,规定了0号位置、2号位置和suffix位置的特征匹配字符串。可见,匹配规则中不需要规定所有位置的特征匹配字符串,因此在进行匹配比较时,既要比较字符串又要比较位置,两者都匹配时确定匹配成功。
图11中,内容为字符“[]”的节点为空内容节点,与空内容节点匹配比较时,当Path对应位置的子字符串为空时,与该节点相匹配。
Path1的匹配规则PR1内容为0=“msdownload”,suffix=“cab”。依次表示0号位置的特征匹配字符串为“msdownload”,suffix位置的特征匹配字符串(即文件名后缀)为“cab”。Path9的匹配规则PR9内容与PR1内容几乎相同,但PR9在PR1基础上还规定2号位置的特征匹配字符串为空,即path最多只有0号和1号位置的子字符串。
对如下Path在如图11所示的Path二叉树进行匹配查找。
path1:/msdownload/abc.cab
path2:/msdownload/no/matter/what/file.cab
可以确定Path1与PR9相匹配,Path2与PR1相匹配。
上例中,Path5的匹配规则PR5内容为1=“msdownload”,suffix=“cab”。依次表示1号位置的特征匹配字符串为“msdownload”,suffix位置(即文件名后缀)的特征匹配字符串为“cab”。在匹配查找Path时,通过通配符节点跳过0号位置子字符串比较,当Path的1号位置和文件后缀子字符串与PR5中对应特征匹配字符串相同,确定Path与PR5相匹配,获得处理规则AR5,AR5为匹配的叶子节点中携带的URL处理规则。
对如下Path在如图11所示的Path二叉树进行匹配查找,确定这些Path都与PR5相匹配。
/au/msdownload/abc.cab
/whatever/msdownload/abc.cab
/xx/msdownload/no/matter/what/file.cab
在另一举例中,如果去掉上述8条Path匹配规则的前4条和最后1条,剩下如下4条Path匹配规则和处理规则:
Path5匹配规则PR5:1=“msdownload”,suffix=“cab”处理规则AR5
Path6匹配规则PR6:1=“msdownload”,suffix=“exe”处理规则AR6
Path7匹配规则PR7:1=“msdownload”,suffix=“msu”处理规则AR7
Path8匹配规则PR8:1=“msdownload”,suffix=“psf”处理规则AR8
依据上述4条Path匹配规则,生成如图12所述的Path二叉树。在此Path二叉树中没有包括通配符节点。
不同匹配规则采用不同位置的特征匹配字符串时,可能需要通配符节点进行衔接。
上述Path匹配过程与Host匹配过程相似,具体说明请参见Host匹配过程的举例,在此不再赘述。
在步骤S1030中,将Path在Path二叉树中最后匹配的节点所携带的信息确定为URL对应的处理规则。
在本发明中,将URL匹配分为Host匹配和Path匹配,当Host没有匹配成功时,则不需进行Path匹配查找,能够提高查找速度;在Host二叉树和Path二叉树的节点中存储字符串能够节约存储空间;将Host二叉树中1号位置的特征匹配字符串以Hash散列表的形式存储,并进行Hash查找能够进一步节约存储空间,提高查找速度;当Host满足顶级域名为国家顶级域名且二级域名为类别符号时,顶级域名和二级域名合并为一个子字符串,能够进一步减少匹配查找深度,提高匹配查找速度。
此外,经测试,使用本发明的URL匹配方法,当URL匹配规则(URL匹配规则包括Host匹配规则和Path匹配规则)为4条规则时,平均消耗1KB内存,相同情况下现有技术中的平均消耗为9KB;当URL匹配规则为40K条规则时(例如,每个服务器平均40条规则,支持1K个服务器,对应常见的互联网场景),内存开销10MB左右,相同情况下现有技术中的内存开销为90KM左右。进一步证明采用本发明中技术方案,能够减少内存开销。
图13是根据本发明一实施例的URL匹配的装置的结构图;如图13所示,该装置包括如下模块。
接收模块1310,用于接收待匹配的URL;
Host匹配模块1320,用于根据主机域名Host匹配规则对接收的URL的Host进行匹配,查找到对应的资源路径Path匹配规则;
Path匹配模块1330,用于根据查找到的Path匹配规则对URL的Path进行匹配,查找到对应的处理规则;
输出模块1340,用于将查找到的处理规则作为所述URL对应的处理规则进行输出。
在一实施例中,所述Host匹配规则表示为节点中包括特征匹配字符串的Host二叉树,如图14所示,Host匹配模块1320包括如下子模块。
第一分割子模块1322,用于根据第一分隔符对接收的URL的Host进行分割获得Host的子字符串,按照在Host中从右到左的顺序将Host的子字符串排序;
第一查找子模块1324,用于在Host二叉树中,根据分割所得Host的子字符串和子字符串的排序进行匹配查找;
第一确定子模块1326,用于将Host在Host二叉树中最后匹配的节点所携带的信息确定为URL对应的Path匹配规则。
在一实施例中,所述Host二叉树的节点还包括位置序号;
所述第一分割子模块1322用于按照在Host中从右到左的顺序将Host的子字符串编号使得子字符串具有对应的序号;
所述第一查找子模块1324用于当Host的子字符串和序号与Host二叉树中当前节点的特征匹配字符串和位置序号都匹配时,确定Host的子字符串和当前节点匹配;当Host的子字符串与当前节点匹配时,选择当前节点的孩子节点进行匹配,当Host的子字符串与当前节点不匹配时,选择当前节点的兄弟节点进行匹配。
在一实施例中,所述第一查找子模块1324还用于当Host的子字符串匹配的当前节点的孩子节点为空时,判断当前节点是否具有携带的信息,如果具有携带的信息,则将当前节点作为Host在Host二叉树中最后匹配的节点;如果不具有携带的信息,则将最后匹配的具有携带的信息的节点作为Host在Host二叉树中最后匹配的节点;当Host的子字符串不匹配的当前节点的兄弟节点为空时,将最后匹配的具有携带的信息的节点作为Host在Host二叉树中最后匹配的节点。
在一实施例中,所述Host二叉树的根节点的孩子节点和/或根节点的兄弟节点的孩子节点中以哈希Hash散列表的形式存储多个特征匹配字符串;
所述第一查找子模块1324用于当当前的节点为根节点的孩子节点和/或根节点的兄弟节点的孩子节点时,在Hash散列表中进行Hash散列查找。
在一实施例中,所述第一分割子模块1322用于判断Host是否满足顶级域名为国家顶级域名且二级域名为类别符号;如果是,则将顶级域名和二级域名合并为一个子字符串,将二级域名之后部分从第一分隔符处进行分割得到子字符串;否则,将Host从第一分隔符处进行分割得到子字符串。
在一实施例中,所述Path匹配规则表示为节点中包括特征匹配字符串的Path二叉树,如图14所示,所述Path匹配模块1330包括:
第二分割子模块1332,用于根据第二分隔符对接收的URL的Path进行分割获得Path的子字符串,按照在Path中从左到右的顺序将Path的子字符串排序;
第二查找子模块1334,用于在Path二叉树中,根据分割所得Path的子字符串和子字符串的排序进行匹配查找;
第二确定子模块1336,用于将Path在Path二叉树中最后匹配的节点所携带的信息确定为URL对应的处理规则。
在一实施例中,所述Path二叉树的节点还包括位置序号;
所述第二分割子模块1332用于按照在Path中从左到右的顺序将Path的子字符串编号使得子字符串具有对应的序号;
所述第二查找子模块1334用于当Path的子字符串和序号与Path二叉树中当前节点的特征匹配字符串和位置序号都匹配时,确定Path的子字符串和当前节点匹配;当Path的子字符串与当前节点匹配时,选择当前节点的孩子节点进行匹配,当Path的子字符串与当前节点不匹配时,选择当前节点的兄弟节点进行匹配。
在一实施例中,所述第二查找子模块1334还用于当Path的子字符串匹配的当前节点的孩子节点为空时,判断当前节点是否具有携带的信息,如果具有携带的信息,则将当前节点作为Path在Path二叉树中最后匹配的节点;如果不具有携带的信息,则将最后匹配的具有携带的信息的节点作为Path在Path二叉树中最后匹配的节点;当Path的子字符串不匹配的当前节点的兄弟节点为空时,将最后匹配的具有携带的信息的节点作为Path在Path二叉树中最后匹配的节点。
上述装置与前述方法对应,对于装置的详细描述请参见方法中对应部分,在此不再赘述。
在本发明中,将URL匹配分为Host匹配和Path匹配,当Host没有匹配成功时,则不需进行Path匹配查找,能够提高查找速度;在Host二叉树和Path二叉树的节点中存储字符串能够节约存储空间;将Host二叉树中1号位置的特征匹配字符串以Hash散列表的形式存储,并进行Hash查找能够进一步节约存储空间,提高查找速度;当Host满足顶级域名为国家顶级域名且二级域名为类别符号时,顶级域名和二级域名合并为一个子字符串,能够进一步减少匹配查找深度,提高匹配查找速度。
以上结合附图详细描述了本发明的优选实施方式,但是,本发明并不限于上述实施方式中的具体细节,在本发明的技术构思范围内,可以对本发明的技术方案进行多种简单变型,这些简单变型均属于本发明的保护范围。
另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合,为了避免不必要的重复,本发明对各种可能的组合方式不再另行说明。
此外,本发明的各种不同的实施方式之间也可以进行任意组合,只要其不违背本发明的思想,其同样应当视为本发明所公开的内容。
Claims (14)
1.一种统一资源定位符URL匹配的方法,该方法包括:
接收待匹配的URL;
根据主机域名Host匹配规则对接收的URL的Host进行匹配,查找到对应的资源路径Path匹配规则;
根据查找到的Path匹配规则对URL的Path进行匹配,查找到对应的处理规则;
将查找到的处理规则作为所述URL对应的处理规则进行输出;
其中,所述Host匹配规则表示为节点中包括特征匹配字符串的Host二叉树,
所述根据主机域名Host匹配规则对接收的URL的Host进行匹配包括:
根据第一分隔符对接收的URL的Host进行分割获得Host的子字符串,按照在Host中从右到左的顺序将Host的子字符串排序;
在Host二叉树中,根据分割所得Host的子字符串和子字符串的排序进行匹配查找;
将Host在Host二叉树中最后匹配的节点所携带的信息确定为URL对应的Path匹配规则;
所述Host二叉树的节点还包括位置序号;
所述按照在Host中从右到左的顺序将Host的子字符串排序包括:
按照在Host中从右到左的顺序将Host的子字符串编号使得子字符串具有对应的序号;
所述在Host二叉树中,根据分割所得Host的子字符串和子字符串的排序进行匹配查找包括:
当Host的子字符串和序号与Host二叉树中当前节点的特征匹配字符串和位置序号都匹配时,确定Host的子字符串和当前节点匹配;
当Host的子字符串与当前节点匹配时,选择当前节点的孩子节点进行匹配,当Host的子字符串与当前节点不匹配时,选择当前节点的兄弟节点进行匹配。
2.根据权利要求1所述的方法,其特征在于,所述在Host二叉树中,根据分割所得Host的子字符串和子字符串的排序进行匹配查找还包括:
当Host的子字符串匹配的当前节点的孩子节点为空时,判断当前节点是否具有携带的信息,如果具有携带的信息,则将当前节点作为Host在Host二叉树中最后匹配的节点;如果不具有携带的信息,则将最后匹配的具有携带的信息的节点作为Host在Host二叉树中最后匹配的节点;
当Host的子字符串不匹配的当前节点的兄弟节点为空时,将最后匹配的具有携带的信息的节点作为Host在Host二叉树中最后匹配的节点。
3.根据权利要求1至2任一所述的方法,其特征在于,所述Host二叉树的根节点的孩子节点和/或根节点的兄弟节点的孩子节点中以哈希Hash散列表的形式存储多个特征匹配字符串;
所述根据分割所得Host的子字符串和子字符串的排序进行匹配查找包括:
当当前的节点为根节点的孩子节点和/或根节点的兄弟节点的孩子节点时,在Hash散列表中进行Hash散列查找。
4.根据权利要求1至2任一所述的方法,其特征在于,所述根据第一分隔符对接收的URL的Host进行分割获得Host的子字符串包括:
判断Host是否满足顶级域名为国家顶级域名且二级域名为类别符号;
如果是,则将顶级域名和二级域名合并为一个子字符串,将二级域名之后部分从第一分隔符处进行分割得到子字符串;
否则,将Host从第一分隔符处进行分割得到子字符串。
5.根据权利要求1所述的方法,其特征在于,所述Path匹配规则表示为节点中包括特征匹配字符串的Path二叉树,
所述根据查找到的Path匹配规则对URL的Path进行匹配包括:
根据第二分隔符对接收的URL的Path进行分割获得Path的子字符串,按照在Path中从左到右的顺序将Path的子字符串排序;
在Path二叉树中,根据分割所得Path的子字符串和子字符串的排序进行匹配查找;
将Path在Path二叉树中最后匹配的节点所携带的信息确定为URL对应的处理规则。
6.根据权利要求5所述的方法,其特征在于,所述Path二叉树的节点还包括位置序号;
所述按照在Path中从左到右的顺序将Path的子字符串排序包括:
按照在Path中从左到右的顺序将Path的子字符串编号使得子字符串具有对应的序号;
所述在Path二叉树中,根据分割所得Path的子字符串和子字符串的排序进行匹配查找包括:
当Path的子字符串和序号与Path二叉树中当前节点的特征匹配字符串和位置序号都匹配时,确定Path的子字符串和当前节点匹配;
当Path的子字符串与当前节点匹配时,选择当前节点的孩子节点进行匹配,当Path的子字符串与当前节点不匹配时,选择当前节点的兄弟节点进行匹配。
7.根据权利要求6所述的方法,其特征在于,所述在Path二叉树中,根据分割所得Path的子字符串和子字符串的排序进行匹配查找还包括:
当Path的子字符串匹配的当前节点的孩子节点为空时,判断当前节点是否具有携带的信息,如果具有携带的信息,则将当前节点作为Path在Path二叉树中最后匹配的节点;如果不具有携带的信息,则将最后匹配的具有携带的信息的节点作为Path在Path二叉树中最后匹配的节点;
当Path的子字符串不匹配的当前节点的兄弟节点为空时,将最后匹配的具有携带的信息的节点作为Path在Path二叉树中最后匹配的节点。
8.一种统一资源定位符URL匹配的装置,该装置包括:
接收模块,用于接收待匹配的URL;
Host匹配模块,用于根据主机域名Host匹配规则对接收的URL的Host进行匹配,查找到对应的资源路径Path匹配规则;
Path匹配模块,用于根据查找到的Path匹配规则对URL的Path进行匹配,查找到对应的处理规则;
输出模块,用于将查找到的处理规则作为所述URL对应的处理规则进行输出;
其中,所述Host匹配规则表示为节点中包括特征匹配字符串的Host二叉树,
所述Host匹配模块包括:
第一分割子模块,用于根据第一分隔符对接收的URL的Host进行分割获得Host的子字符串,按照在Host中从右到左的顺序将Host的子字符串排序;
第一查找子模块,用于在Host二叉树中,根据分割所得Host的子字符串和子字符串的排序进行匹配查找;
第一确定子模块,用于将Host在Host二叉树中最后匹配的节点所携带的信息确定为URL对应的Path匹配规则;
所述Host二叉树的节点还包括位置序号;
所述第一分割子模块用于按照在Host中从右到左的顺序将Host的子字符串编号使得子字符串具有对应的序号;
所述第一查找子模块用于当Host的子字符串和序号与Host二叉树中当前节点的特征匹配字符串和位置序号都匹配时,确定Host的子字符串和当前节点匹配;当Host的子字符串与当前节点匹配时,选择当前节点的孩子节点进行匹配,当Host的子字符串与当前节点不匹配时,选择当前节点的兄弟节点进行匹配。
9.根据权利要求8所述的装置,其特征在于,所述第一查找子模块还用于当Host的子字符串匹配的当前节点的孩子节点为空时,判断当前节点是否具有携带的信息,如果具有携带的信息,则将当前节点作为Host在Host二叉树中最后匹配的节点;如果不具有携带的信息,则将最后匹配的具有携带的信息的节点作为Host在Host二叉树中最后匹配的节点;当Host的子字符串不匹配的当前节点的兄弟节点为空时,将最后匹配的具有携带的信息的节点作为Host在Host二叉树中最后匹配的节点。
10.根据权利要求8至9任一所述的装置,其特征在于,所述Host二叉树的根节点的孩子节点和/或根节点的兄弟节点的孩子节点中以哈希Hash散列表的形式存储多个特征匹配字符串;
所述第一查找子模块用于当当前的节点为根节点的孩子节点和/或根节点的兄弟节点的孩子节点时,在Hash散列表中进行Hash散列查找。
11.根据权利要求8至9任一所述的装置,其特征在于,所述第一分割子模块用于判断Host是否满足顶级域名为国家顶级域名且二级域名为类别符号;如果是,则将顶级域名和二级域名合并为一个子字符串,将二级域名之后部分从第一分隔符处进行分割得到子字符串;否则,将Host从第一分隔符处进行分割得到子字符串。
12.根据权利要求8所述的装置,其特征在于,所述Path匹配规则表示为节点中包括特征匹配字符串的Path二叉树,
所述Path匹配模块包括:
第二分割子模块,用于根据第二分隔符对接收的URL的Path进行分割获得Path的子字符串,按照在Path中从左到右的顺序将Path的子字符串排序;
第二查找子模块,用于在Path二叉树中,根据分割所得Path的子字符串和子字符串的排序进行匹配查找;
第二确定子模块,用于将Path在Path二叉树中最后匹配的节点所携带的信息确定为URL对应的处理规则。
13.根据权利要求12所述的装置,其特征在于,所述Path二叉树的节点还包括位置序号;
所述第二分割子模块用于按照在Path中从左到右的顺序将Path的子字符串编号使得子字符串具有对应的序号;
所述第二查找子模块用于当Path的子字符串和序号与Path二叉树中当前节点的特征匹配字符串和位置序号都匹配时,确定Path的子字符串和当前节点匹配;当Path的子字符串与当前节点匹配时,选择当前节点的孩子节点进行匹配,当Path的子字符串与当前节点不匹配时,选择当前节点的兄弟节点进行匹配。
14.根据权利要求13所述的装置,其特征在于,所述第二查找子模块还用于当Path的子字符串匹配的当前节点的孩子节点为空时,判断当前节点是否具有携带的信息,如果具有携带的信息,则将当前节点作为Path在Path二叉树中最后匹配的节点;如果不具有携带的信息,则将最后匹配的具有携带的信息的节点作为Path在Path二叉树中最后匹配的节点;当Path的子字符串不匹配的当前节点的兄弟节点为空时,将最后匹配的具有携带的信息的节点作为Path在Path二叉树中最后匹配的节点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510794164.0A CN105426474B (zh) | 2015-11-18 | 2015-11-18 | 统一资源定位符url匹配的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510794164.0A CN105426474B (zh) | 2015-11-18 | 2015-11-18 | 统一资源定位符url匹配的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105426474A CN105426474A (zh) | 2016-03-23 |
CN105426474B true CN105426474B (zh) | 2019-03-01 |
Family
ID=55504686
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510794164.0A Active CN105426474B (zh) | 2015-11-18 | 2015-11-18 | 统一资源定位符url匹配的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105426474B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107659535A (zh) * | 2016-07-25 | 2018-02-02 | 中国移动通信集团上海有限公司 | 一种规则识别方法及装置 |
CN111046938B (zh) * | 2019-12-06 | 2020-12-01 | 邑客得(上海)信息技术有限公司 | 基于字符串多模式匹配的网络流量分类识别方法和设备 |
CN111061972B (zh) * | 2019-12-25 | 2023-05-16 | 武汉绿色网络信息服务有限责任公司 | 一种用于url路径匹配的ac查找优化方法和装置 |
CN112804373B (zh) * | 2020-12-30 | 2022-10-14 | 微医云(杭州)控股有限公司 | 接口域名确定方法、装置、电子设备及存储介质 |
CN113722621B (zh) * | 2021-08-30 | 2023-11-14 | 康键信息技术(深圳)有限公司 | 基于url的业务处理方法、设备、存储介质 |
CN114157648B (zh) * | 2021-11-30 | 2023-11-28 | 北京知道创宇信息技术股份有限公司 | 请求匹配规则生成方法及装置、网站服务器和存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102110132A (zh) * | 2010-12-08 | 2011-06-29 | 北京星网锐捷网络技术有限公司 | 统一资源定位符匹配查找方法、装置和网络侧设备 |
CN103077208A (zh) * | 2012-12-28 | 2013-05-01 | 华为技术有限公司 | 统一资源定位符匹配处理方法及装置 |
CN103164411A (zh) * | 2011-12-12 | 2013-06-19 | 深圳市金蝶中间件有限公司 | 浏览器的网页加载方法 |
CN103870606A (zh) * | 2014-04-08 | 2014-06-18 | 上海语天信息技术有限公司 | 一种网页信息提取系统及提取方法 |
CN103914479A (zh) * | 2013-01-06 | 2014-07-09 | 北京金山安全软件有限公司 | 资源请求的匹配方法和装置 |
CN104537107A (zh) * | 2015-01-15 | 2015-04-22 | 中国联合网络通信集团有限公司 | 一种网址存储匹配方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006221294A (ja) * | 2005-02-09 | 2006-08-24 | Nec Engineering Ltd | Url検索方法及び検索装置 |
US8122129B2 (en) * | 2008-09-09 | 2012-02-21 | Actiance, Inc. | Hash-based resource matching |
-
2015
- 2015-11-18 CN CN201510794164.0A patent/CN105426474B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102110132A (zh) * | 2010-12-08 | 2011-06-29 | 北京星网锐捷网络技术有限公司 | 统一资源定位符匹配查找方法、装置和网络侧设备 |
CN103164411A (zh) * | 2011-12-12 | 2013-06-19 | 深圳市金蝶中间件有限公司 | 浏览器的网页加载方法 |
CN103077208A (zh) * | 2012-12-28 | 2013-05-01 | 华为技术有限公司 | 统一资源定位符匹配处理方法及装置 |
CN103914479A (zh) * | 2013-01-06 | 2014-07-09 | 北京金山安全软件有限公司 | 资源请求的匹配方法和装置 |
CN103870606A (zh) * | 2014-04-08 | 2014-06-18 | 上海语天信息技术有限公司 | 一种网页信息提取系统及提取方法 |
CN104537107A (zh) * | 2015-01-15 | 2015-04-22 | 中国联合网络通信集团有限公司 | 一种网址存储匹配方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN105426474A (zh) | 2016-03-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105426474B (zh) | 统一资源定位符url匹配的方法及装置 | |
US6614789B1 (en) | Method of and apparatus for matching strings of different lengths | |
US6792423B1 (en) | Hybrid longest prefix match and fixed match searches | |
JP4452183B2 (ja) | プログラマブル状態マシンのデータ構造を作成して入力単語連鎖を構文解析する方法、プログラマブル状態マシンのデータ構造を使用して入力単語連鎖に対応する結果として得られた値を検索する方法、ワイヤスピードのディープ・パケット処理を行う方法、ディープ・パケット処理のための装置、チップ埋め込み装置、およびプログラミング・コード命令を含むコンピュータ・プログラム(ディープ・パケット処理のための方法および装置) | |
US6934252B2 (en) | Methods and systems for fast binary network address lookups using parent node information stored in routing table entries | |
KR100586461B1 (ko) | 파이프라인 이진 트리를 이용한 ip 어드레스 검색 방법,하드웨어 구조 및 기록매체 | |
CA2520769A1 (en) | A bounded index extensible hash-based ipv6 address lookup method | |
CN108399176A (zh) | 一种基于规则的数据处理方法及规则引擎装置 | |
US20030174717A1 (en) | System and method for longest prefix match for internet protocol lookup | |
EP1436936A2 (en) | High speed data stream pattern recognition | |
GB2452760A (en) | Storing and searching data in a database tree structure for use in data packet routing applications. | |
CN101160930A (zh) | 一种e.164号码域名存储和查询方法 | |
WO2007088397A2 (en) | A method of filtering high data rate traffic | |
KR100999408B1 (ko) | 해시트리를 이용한 url 검색방법 | |
EP2122503B1 (en) | A method of filtering sections of a data stream | |
KR100662254B1 (ko) | 라우팅 시스템에서의 패킷 분류 장치 및 이를 위한 룰 구축 방법 | |
US6711661B1 (en) | Method and apparatus for performing hierarchical address translation | |
Yazdani et al. | Prefix trees: new efficient data structures for matching strings of different lengths | |
US11770463B2 (en) | Packet filtering using binary search trees | |
Yazdani et al. | DMP-tree: A dynamic M-way prefix tree data structure for strings matching | |
CN109194574B (zh) | 一种IPv6路由查找方法 | |
KR100378599B1 (ko) | 주소 메모리 블록의 간섭 인덱싱에 기반한 라우팅 테이블검색 방법 | |
Ke et al. | The analysis and design of fast route lookup algorithms for high performance router | |
KR20010098110A (ko) | 비트-벡터 테이블을 이용한 ip 주소 검색방법 | |
Pao et al. | An encoding scheme for TCAM-based packet classification |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder | ||
CP01 | Change in the name or title of a patent holder |
Address after: Floor 19, juyuanzhou Industrial Park, 618 Jinshan Avenue, Cangshan District, Fuzhou City, Fujian Province 350008 Patentee after: RUIJIE NETWORKS Co.,Ltd. Address before: Floor 19, juyuanzhou Industrial Park, 618 Jinshan Avenue, Cangshan District, Fuzhou City, Fujian Province 350008 Patentee before: Beijing Star-Net Ruijie Networks Co.,Ltd. |