用户代理中URL前面的加号


10

我运行了一个小型Web搜寻器,必须决定要使用哪个用户代理。 搜寻器代理以及Wikipedia的列表建议采用以下格式:

 examplebot/1.2 (+http://www.example.com/bot.html)

但是,某些漫游器会省略URL前面的加号。我首先想知道这是什么意思,但找不到任何解释。 RFC 2616认为括号中的所有内容均为注释,并且不限制其格式。但是,对于浏览器来说,在注释中使用分号分隔的标记列表是很常见的,这些标记可以宣传浏览器的版本和功能。除了大多数浏览器以类似的方式格式化外,我认为这没有任何标准化的方法。而且我在评论中找不到任何有关URL的信息。

我的问题是:为什么加号?我需要吗?

Answers:


6

我可以找到的第一个用法是使用Heritrix搜寻。在本手册文档中,我发现了以下内容:

6.3.1.3.2。用户代理程序首次启动heritrix时看到的初始用户代理程序模板如下所示:

Mozilla / 5.0(兼容; heritrix / 0.11.0 + PROJECT_URL_HERE

您必须至少更改PROJECT_URL_HERE并建立一个网站,网站管理员可以访问该网站来查看有关组织或进行爬网的人员的信息。

用户代理字符串必须遵循以下格式:

[可选文本]([可选文本] + PROJECT_URL [可选文本])[可选文本]

必须在URL之前加上括号和加号。有效用户代理的其他示例包括:

我的heritrix搜寻器(+ http://mywebsite.com

Mozilla / 5.0(兼容; bush-crawler + http://whitehouse.gov

Mozilla / 5.0(兼容;http://loc.gov代表国会图书馆的os-heritrix / 0.11.0 + )


5

我从http://www.user-agents.org/下载了所有用户代理,并运行了一个脚本以计算使用+样式链接与普通链接的数量。我排除了与RFC 2616不匹配的“非标准”用户代理字符串。

结果如下:

Total: 2471
Standard: 2064
Non-standard: 407
No link: 1391
With link: 673
Plus link: 145
Plain link: 528
Plus link only: 86
Plain link only: 174

因此,在673个包含链接的用户代理中,只有21%包含正号。在260个具有链接注释的用户代理中,只有33%包含加号。

根据此分析,加号很常见,但是大多数用户代理选择不使用它。可以省略它,但是将它包含进来也很常见。

如果您想自己运行它,这是执行此分析的Perl脚本。

#!/usr/bin/perl

use strict;

my $doc="";

while(my $line = <>){
    $doc.=$line;
}

my @agents = $doc =~ /\<td class\=\"left\"\>[ \t\r\n]+(.*?)\&nbsp\;/gs;

my $total = 0;
my $standard = 0;
my $nonStandard = 0;
my $noHttp = 0;
my $http = 0;
my $plusHttp = 0;
my $noPlusHttp = 0;
my $linkOnly = 0;
my $plusLinkOnly = 0;

for my $agent (@agents){
    $total++;
    if ($agent =~ /^(?:[a-zA-Z0-9\.\-\_]+(?:\/[a-zA-Z0-9\.\-\_]+)?(?: \([^\)]+\))?[ ]*)+$/){
        print "Standard: $agent\n";
        $standard++;
        if ($agent =~ /http/i){
            print "With link: $agent\n";
            $http++;
            if ($agent =~ /\+http/i){
                print "Plus link: $agent\n";
                $plusHttp++;
            } else {
                print "Plain link: $agent\n";
                $noPlusHttp++;
            }
            if ($agent =~ /\(http[^ ]+\)/i){
                print "Plain link only: $agent\n";
                $linkOnly++;
            } elsif ($agent =~ /\(\+http[^ ]+\)/i){
                print "Plus link only: $agent\n";
                $plusLinkOnly++;
            }
        } else {
            print "No link: $agent\n";
            $noHttp++;
        }
    } else {
        print "Non-standard: $agent\n";
        $nonStandard++;
    }
}

print "
Total: $total
Standard: $standard
Non-standard: $nonStandard
No link: $noHttp
With link: $http
Plus link: $plusHttp
Plain link: $noPlusHttp
Plus link only: $plusLinkOnly
Plain link only: $linkOnly
";

很好的答案!我以为加号比较常见,但显然我弄错了。这回答了我是否需要它的问题,但还不是我来自哪里。
jlh 2013年

我的猜测是,一些非常活跃的蜘蛛(例如Googlebot)开始这样做,其他开发人员也复制了这种格式。Googlebot肯定会使用它,但可能不是第一个这样做的人。
斯蒂芬Ostermiller

很棒的评论-感谢统计和分析
NetConstructor.com 2013年

但是,您没有回答问题。
尔根·保罗
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.