HTTP/2 & HTTP/3
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)**
**HTTP/2 (2015)**
**HTTP/3 (2022)**
Impact sur le web scraping
**Avantages**
**Défis**
Code Playground
Scraping HTTP/2 multiplexé avec httpx et détection du support HTTP/3
# 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 FalseAvis 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