gpt4 book ai didi

java - Apache UrlValidator 认为 URL 无效

转载 作者:行者123 更新时间:2023-12-01 21:17:35 25 4
gpt4 key购买 nike

问题是我们的前端认为这个网址有效,而后端认为它无效。网址是http://pyxlmedia.com/pc/talk=now&o=http://mobile.tmall.com/mobile .

您可以看到单词 pc 后面是一个“/”而不是“?”。

如果我将“/”更改为“?”然后两次都通过,即

http://pyxlmedia.com/pc?talk=now&o=http://mobile.tmall.com/mobile 双方均认为有效 org.apache.commons.validator.routines.UrlValidator (1.5.1) 和网站 http://formvalidation.io/validators/uri/

测试代码为

@Test
public void test() {
UrlValidator urlValidator = new UrlValidator(new String[] {"http", "https"});
assertTrue(urlValidator.isValid("http://pyxlmedia.com/pc/talk=now&o=http://mobile.tmall.com/mobile"));
}

首先我想知道是前端还是后端哪个错了?那么如何让他们的行为保持一致呢?

最佳答案

我在分析这个问题时来回了好几次,但我确信你的前端在技术上是正确的,可以接受该 URL。然而,这个棘手的 URL 可能并不意味着您认为的意思,因此您的后端可能会通过标记它来帮您一个忙。

这里的相关标准由RFC 3986提供。 (对“http”URI 方案的 RFC 7230 指定了对语法的轻微修改,但这些不会改变给定 URL 的分析。)根据通用 URI 语法,输入 URL 分为如下组件:

方案:http

(分隔符)://

权威机构:pyxlmedia.com

路径:/pc/talk=now&o=http://mobile.tmall.com/mobile

请特别注意,该 URL 不包含查询组件,这与您提供的两个 validator 都接受的变体不同。

路径组件包含五个段,您的后端 validator 可能会遇到该组件的以下异常特征之一:

  • 有一个段为空
  • 第二段包含未转义字符“=”和“&”,URI 语法将其归类为“子分隔符”
  • 第二段包含未转义的“:”字符,URI 语法将其归类为“gen-delim”

但是,对路径组件语法的分析(RFC 3986 的第 3.3 节)表明绝对路径中除第一个之外的段允许为空,并且“:”字符和所有子定界符允许在路径段中出现未转义的情况。 (RFC 7230 也允许绝对路径的第一段为空。)

但是,从“我认为这并不意味着你认为的意思”部门来看,我想强调这条路径分为以下几个部分:

pc
talk=now&o=http:
(empty)
mobile.tmall.com
mobile

特别注意路径中的明显 URL 如何分成四个路径段。

<小时/>

至于如何让行为一致,就看你真正想要哪种行为了。

Apache UrlValidator 没有很多配置选项,但它有一个ALLOW_2_SLASHES,它允许在路径组件中使用双斜杠网址。我不确定打开该选项是否足以使其接受给定的 URL,但禁用它肯定会导致拒绝该 URL。如果这还不够,并且您想接受该 URL,那么您似乎需要选择或编写一个不同的 validator 。

就其本身而言,http://formvalidation.io/validators/uri/ 上的 validator 似乎有一组同样小但不同的配置选项,而且我没有看到一个其中,我希望调整其对相关 URL 的评估。因此,如果您想在前端拒绝麻烦的 URL,那么您需要找到或编写一个不同的 validator 。

关于java - Apache UrlValidator 认为 URL 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39709609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com