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

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

URL 表示的 5 个组成部分

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

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

标准 URL 规范化的 3 种类型

基于语​​法的规范化

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

基于方案的规范化

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

基于协议的规范化

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

【问题讨论】:

    标签: java url normalization


    【解决方案1】:

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

    这里有一些其他选项:

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

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

    2. github.com/sentric/url-normalization 库提供了另一种(我认为不寻常的)方法,它反转域部分;例如“com.stackoverflow”而不是“stackoverflow.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()呢?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-05-22
          • 2016-02-04
          • 2012-04-04
          • 2011-02-28
          • 2023-01-20
          • 1970-01-01
          相关资源
          最近更新 更多