Znak plus przed adresami URL w klientach użytkownika

10

Prowadzę mały przeszukiwacz sieci i musiałem zdecydować, jakiego klienta użytkownika użyć. Listy agentów przeszukiwaczy oraz Wikipedia sugerują następujący format:

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

Jednak niektóre boty pomijają znak plus przed adresem URL. Zastanawiam się, co to w ogóle znaczy, ale nie mogłem znaleźć żadnego wyjaśnienia. RFC 2616 traktuje wszystko w nawiasie jako komentarz i nie ogranicza jego formatu. Jednak przeglądarki często mają w tekście oddzieloną średnikami listę tokenów, które reklamują wersję i możliwości przeglądarki. Nie sądzę, że jest to ustandaryzowane w jakikolwiek inny sposób niż większość przeglądarek formatujących go podobnie. I nie mogłem znaleźć w komentarzu nic dotyczącego adresów URL.

Moje pytanie brzmi: dlaczego znak plus? Czy potrzebuję tego?

jlh
źródło

Odpowiedzi:

6

Pierwsze użycie tego, jakie udało mi się znaleźć, dotyczyło przeszukiwacza Heritrix . W tym podręczniku znalazłem:

6.3.1.3.2. user-agent Początkowy szablon user-agent, który zobaczysz przy pierwszym uruchomieniu heritrix, będzie wyglądał następująco:

Mozilla / 5.0 (kompatybilny; heritrix / 0.11.0 + PROJECT_URL_HERE

Musisz zmienić przynajmniej PROJECT_URL_HERE i założyć witrynę, do której webmasterzy mogą przejść, aby wyświetlić informacje o organizacji lub osobie prowadzącej indeksowanie.

Ciąg klienta użytkownika musi być zgodny z następującym formatem:

[tekst opcjonalny] ([tekst opcjonalny] + PROJECT_URL [tekst opcjonalny]) [tekst opcjonalny]

Musi być obecny nawias i znak plus przed adresem URL. Inne przykłady prawidłowych programów użytkownika obejmują:

robot my-heritrix-crawler (+ http://mywebsite.com)

Mozilla / 5.0 (kompatybilny; bush-crawler + http://whitehouse.gov)

Mozilla / 5.0 (kompatybilny; os-heritrix / 0.11.0 + http://loc.govw imieniu Biblioteki Kongresu)

Brendon
źródło
5

Pobrałem wszystkie programy użytkownika z http://www.user-agents.org/ i uruchomiłem skrypt, aby policzyć liczbę tych, którzy korzystali z +łączy stylów w porównaniu do zwykłych łączy. Wyłączyłem „niestandardowe” ciągi agenta użytkownika, które nie pasują do RFC 2616.

Oto wyniki:

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

Tak więc spośród 673 programów użytkownika, które zawierają link, tylko 21% zawiera plus. Spośród 260 programów użytkownika, które mają komentarz, który jest tylko linkiem, tylko 33% zawiera plus.

Na podstawie tej analizy plus jest powszechny, ale większość programów klienckich decyduje się go nie używać. Można to pominąć, ale jest na tyle powszechne, że można również to uwzględnić.

Oto skrypt Perla, który przeprowadził tę analizę, jeśli chcesz ją uruchomić samodzielnie.

#!/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
";
Stephen Ostermiller
źródło
Bardzo ładna odpowiedź! Myślałem, że plus jest bardziej powszechny, ale najwyraźniej się myliłem. To odpowiada na pytanie, czy go potrzebuję, ale jeszcze nie skąd pochodzi.
jlh
Domyślam się, że jakiś bardzo aktywny pająk, taki jak Googlebot, zaczął to robić, a inni programiści skopiowali ten format. Googlebot z pewnością go używa, ale być może nie był to pierwszy.
Stephen Ostermiller
świetny komentarz - dzięki za statystyki i analizę
NetConstructor.com
ale nie odpowiedziałeś na pytanie.
Jürgen Paul