标准 URL 规范化 - Java

Posted

技术标签:

【中文标题】标准 URL 规范化 - Java【英文标题】:Standard URL Normalization - Java 【发布时间】:2011-03-22 20:54:50 【问题描述】:

我想问是否有任何Java包或库具有标准的URL规范化?

URL 表示的 5 个组成部分

http://www[dot]example[dot]com:8040/folder/exist?name=sky#head

    方案:http 授权:www.example.com:8040 路径:/文件夹/存在 查询:?name=sky 片段:#head

标准 URL 规范化的 3 种类型

基于语​​法的规范化

大小写规范化 - 将方案和权限组件中的所有字母转换为小写 百分比编码规范化 - 解码与未保留字符相对应的任何百分比编码八位字节,例如用于连字符的 %2D 和用于下划线的 %5 路径段规范化 - 从路径组件中删除点段,例如“.”和“..”

基于方案的规范化

在 URL 的权限组件后添加尾随“/” 删除默认端口号,例如http方案的80 截断 URL 片段

基于协议的规范化

仅当访问资源的结果相等时才适用 例如,example.com/data 被源服务器定向到 example.com/data/

【问题讨论】:

【参考方案1】:

正如其他人所提到的,java.net.URL 和/或java.net.URI 是一些明显的起点。

这里有一些其他选项:

    Galimatias(西班牙语为“胡言乱语”)似乎是一个固执己见且相对流行的 Java URL 规范化库。源代码可以在github.com/smola/galimatias找到。

    galimatias 开始对 java.net.URL 和 java.net.URI 感到沮丧。他们两个都很好 用于基本用例,但对其他用例严重损坏

    github.com/sentric/url-normalization 库提供了另一种(我认为不寻常的)方法,它反转域部分;例如“com.***”而不是“***.com”。

您可以在 Github 上找到其他变体,有时使用 Python、Ruby 和 php 等语言实现。

【讨论】:

【参考方案2】:
URI uri = URI.create("http://www.example.com:8040/folder/exist?name=sky#head");
String scheme = uri.getScheme();
String authority = uri.getAuthority();
// ...

https://docs.oracle.com/javase/1.5.0/docs/api/java/net/URI.html

【讨论】:

【参考方案3】:

java.net.URLset()呢?

【讨论】:

以上是关于标准 URL 规范化 - Java的主要内容,如果未能解决你的问题,请参考以下文章

规范化字符串以在 Java 中创建安全的 URL

《PHP PSR 标准规范》

RESTful 规范

CheckStyle,定制自己的Java编码规范

Java编码规范《阿里巴巴Java开发手册(正式版)》发布!

Java 图像规范化