Are HTTP headers case-sensitive?
HTTP header names are case-insensitive. RFC 9110 §5.1 states this directly, so Content-Type, content-type, and CONTENT-TYPE all refer to the same header and a compliant server must treat them identically. HTTP/2 goes further and requires names to be sent in lowercase on the wire, but standard libraries handle that for you. Header values are a different matter and are case-sensitive unless the value’s own specification says otherwise. ETags, cookie values, and credentials like Authorization: Bearer <token> must be transmitted exactly as issued, while values defined as tokens by RFC 9110 (for example, keep-alive or text/html) are case-insensitive. One practical caveat for scraping: some anti-bot fingerprinting systems flag requests whose header casing does not match the browser they claim to be, so let your HTTP client emit its default casing instead of overriding it.
Related articles
All articles →Web Scraping Without Getting Blocked
Twelve techniques that keep a Python scraper off block lists, each with code, and real JA3, JA4 and HTTP/2 fingerprint checks for requests, curl_cffi and Chrome.
Axios vs fetch in Node.js
Axios vs the Node.js built-in fetch for web scraping. Covers proxy configuration, retry logic, timeout handling, header control, and behavior under concurrent requests.
Best Web Scraping APIs for 2026: Features, Speed, Price
Explore the best web scraping APIs for 2026. Compare performance, key features, and pricing to choose the ideal solution for your data needs.
Stop tuning headers by hand
HasData rotates headers, cookies, and TLS fingerprints behind one scraping call.