• [^] # Re: origine

    Posté par . En réponse à la dépêche Un nouveau reverse-proxy cache pour les images externes sur LinuxFr.org. Évalué à 5.

    Comme tu travailles en ruby tu peux utiliser la méthode urlsafe_encode64() http://ruby-doc.org/stdlib-1.9.3/libdoc/base64/rdoc/Base64.html :

    require 'base64'
    puts Base64.urlsafe_encode64(ARGV[0])
    # equivalent à 
    puts [ARGV[0]].pack('m0').tr('+/', '-_');
    
    

    Cette discussion m'a permis de découvrir la page http://en.wikipedia.org/wiki/Base64 qui est très intéressante (surtout la partie "Variants summary table")

    L'avantage de hex et de base64 c'est qu'elles sont bijectives. Les raccourcisseurs d'URL te file juste un identifiant encodé pour ne pas être séquentiel si je ne m'abuse.

    Après il faut se poser la question de savoir à quoi sert la bijection dans ce genre de cas (je pense qu'il n'y aura pas plus de monde à vouloir décoder les liens en hexa/base64 que de personne à essayer de dépasser la longueur maximale autorisée dans les navigateurs/serveurs ;) ? Le seul risque serait une collision sur 2 images différentes mais avec un md5 ou un sha-1 il faut vraiment le vouloir (ou pas avoir de chance du tout).

    Sinon dernière bidouille pour gagner quelques octets : compresser en gzip l'URL avant de la mettre en base64 :

    use Compress::Zlib;
    use MIME::Base64;
    print encode_base64(compress($ARGV[0]))."\n"