Architecture

    HTTP/2 & HTTP/3

    Mis à jour le 1 février 2026

    Définition

    HTTP/2 introduit le multiplexage (plusieurs requêtes sur une connexion), la compression des headers et le server push. HTTP/3 utilise QUIC au lieu de TCP, réduisant la latence et améliorant la résilience réseau. Ces protocoles impactent les performances de crawling et la détection des bots.

    Deep Dive

    HTTP/2 et HTTP/3 : révolution pour le crawling

    Évolution des protocoles

    **HTTP/1.1 (1997)**

  1. Une requête par connexion
  2. Limite de 6 connexions parallèles par domaine
  3. Headers en clair, répétés à chaque requête
  4. **HTTP/2 (2015)**

  5. Multiplexage : plusieurs requêtes sur une connexion
  6. Compression HPACK des headers
  7. Server Push (peu utilisé en pratique)
  8. **HTTP/3 (2022)**

  9. QUIC remplace TCP (basé sur UDP)
  10. 0-RTT : connexion quasi-instantanée
  11. Meilleure gestion de la perte de paquets
  12. Impact sur le web scraping

    **Avantages**

  13. Moins de connexions TCP à établir
  14. Headers compressés = moins de bande passante
  15. Latence réduite pour les crawls internationaux
  16. **Défis**

  17. Les bibliothèques doivent supporter ces protocoles
  18. HTTP/3 encore mal supporté (httpx, curl récent)
  19. Le TLS fingerprinting change avec QUIC
  20. Code Playground

    Scraping HTTP/2 multiplexé avec httpx et détection du support HTTP/3

    python
    # Scraping HTTP/2 performant avec httpx
    import httpx
    import asyncio
    from typing import List
    
    async def parallel_scrape_h2(urls: List[str]) -> List[dict]:
        """
        Scraping parallèle exploitant le multiplexage HTTP/2
        Une seule connexion par domaine, multiples requêtes
        """
        results = []
        
        # Configuration HTTP/2 optimisée
        limits = httpx.Limits(
            max_connections=100,
            max_keepalive_connections=20,
            keepalive_expiry=30
        )
        
        async with httpx.AsyncClient(
            http2=True,  # Activer HTTP/2
            limits=limits,
            timeout=httpx.Timeout(30.0),
            follow_redirects=True
        ) as client:
            # Semaphore pour limiter la concurrence
            semaphore = asyncio.Semaphore(50)
            
            async def fetch_one(url: str):
                async with semaphore:
                    try:
                        response = await client.get(url)
                        return {
                            'url': url,
                            'status': response.status_code,
                            'http_version': response.http_version,
                            'size': len(response.content),
                            'headers': dict(response.headers)
                        }
                    except Exception as e:
                        return {'url': url, 'error': str(e)}
            
            # Lancer toutes les requêtes en parallèle
            tasks = [fetch_one(url) for url in urls]
            results = await asyncio.gather(*tasks)
        
        return results
    
    # Vérifier le support HTTP/2 d'un serveur
    async def check_h2_support(url: str) -> dict:
        async with httpx.AsyncClient(http2=True) as client:
            response = await client.get(url)
            return {
                'url': url,
                'http_version': response.http_version,
                'supports_h2': response.http_version == 'HTTP/2',
                'alt_svc': response.headers.get('alt-svc', 'None')  # HTTP/3 advertised here
            }
    
    # HTTP/3 avec curl (si disponible)
    import subprocess
    
    def check_h3_support(url: str) -> bool:
        """Vérifie le support HTTP/3 avec curl"""
        try:
            result = subprocess.run(
                ['curl', '--http3', '-I', '-s', url],
                capture_output=True,
                text=True,
                timeout=10
            )
            return 'HTTP/3' in result.stdout
        except:
            return False

    Avis d'Expert 2026

    HTTP/3 devient mainstream en 2026 avec son adoption par les CDN majeurs (Cloudflare, Fastly). Pour le scraping, HTTP/2 offre déjà d'excellentes performances. Le vrai enjeu est la compatibilité des bibliothèques : curl_cffi supporte HTTP/3, httpx reste en HTTP/2. Le QUIC fingerprinting pourrait devenir un nouveau vecteur de détection.

    Besoin d'aide sur HTTP/2 & HTTP/3 ?

    Nos experts peuvent vous accompagner sur vos projets de crawling et d'optimisation GEO.

    Contactez l'expert Crawlers.fr
    4.6/5 (73 avis d'experts)