代码之家  ›  专栏  ›  技术社区  ›  Kyle Rosendo

HTML页面中的哪些内容是唯一的?

  •  1
  • Kyle Rosendo  · 技术社区  · 15 年前

    我的问题是更多的是验证。可以使用什么来确定HTML文档中的唯一性?(文档可以具有一定程度的动态性。)

    可以使用或生成什么来识别页面是正确的页面,准确率为99%,考虑到您可以存储您正在验证的页面类型的“指纹”?


    为了清晰起见,这是加密/https等的额外功能。此页面可以并且将根据特定用户的动态内容进行更改,但是指纹也可以,但是由于动态内容的性质,单个指纹无法100%匹配100%的用户。因此,哈希不能在这里工作,至少不能以简单的形式工作。

    6 回复  |  直到 15 年前
        1
  •  2
  •   Pekka    15 年前

    一个HTML页面的独特指纹很容易计算。从以下项生成哈希:

    • 协议:HTTP或HTTPS
    • URL:域+URI
    • 查询字符串
    • 精确到一个字节的页面内容

    可选部分标题:

    • Server
    • Content-Type 这很重要
    • Content-encoding 这可能也是
    • 更多的想法?请随意编辑它们。

    这假设您没有向页面发布任何数据。

        2
  •  1
  •   oneat    15 年前

    如果不检查主机的IP,您甚至不能确定1%。 接下来是加密。(如果没有这一点,你就可能成为ARP中毒的受害者(仅限于局域网)。

    HTTPS中的密钥必须始终相同。

    如果更改,则表示有人在作弊或密钥得到更新(密钥具有到期日期)。

        3
  •  1
  •   Byron Whitlock    15 年前

    页面的指纹是主机名、端口和路径。这是唯一能保证在网络上独一无二的东西。我想您还可以包括缓存头(最后修改的)来查看它是否发生了变化。

    除此之外,如果对HTML进行哈希处理,即使最后修改的标题发生了更改,也可以看到它是否发生了更改。

        4
  •  1
  •   Dan McGrath    15 年前

    假设您想存储HTML页面的“指纹”,以便以后识别它 确切地 匹配,只需使用HTML页面的简单哈希摘要。

    除非您更清楚地阐明这个问题,否则我看不出为什么它应该与HTML或它所在的浏览器有关。

    但是,这不会告诉您页面是否在同一位置。为此,您需要存储其他详细信息,如主机/IP和路径。

        5
  •  1
  •   Brandan    15 年前

    如果你能得到这两个页面的文本版本,你就可以对它们进行区分。您可以确定页面差异可接受的最大范围。

    有一个Unix实用程序(称为diff)。这个工具的win32版本也在网络上浮动。维基百科有一篇关于diff的文章: http://en.wikipedia.org/wiki/Diff .

    wiki文章列出了免费的文件比较工具,“另请参阅”部分提供了指向讨论文件比较工具和增量编码的其他文章的链接。

    “Levenshtein距离度量”也可能是一种有趣的方法。

    代码项目中有一个不错的C差分引擎。由于我的缺点,我不能发布另一个链接,但文章标题是:“C中的通用、可重用的diff算法”。

        6
  •  1
  •   Amy    15 年前

    即使您有确切的主机名、端口和路径,如果有一个应用服务器为网页提供服务,或者Web服务器正在插入广告内容,那么内容仍然可能不同。

    如果您能够可靠地识别HTML中动态的部分(如保持更新的广告或时间戳),那么我将首先规范化数据。我会去掉所有空格字符(空格、制表符、换行符),然后对这些内容进行散列。

    我愿意 在哈希中包含主机名端口路径,因为这不会给“指纹”添加任何内容。(该信息在以后需要重新查询Web服务器以比较HTML时很有用。)