application_layer_protocol_negotiation
TLS Extension Code: 16
Extension Details
application_layer_protocol_negotiation160x0010What is application_layer_protocol_negotiation?
ALPN (Application-Layer Protocol Negotiation) allows the client and server to negotiate which application protocol (HTTP/1.1, HTTP/2, HTTP/3) will be used over the TLS connection. This eliminates an extra round trip compared to NPN (Next Protocol Negotiation). Common ALPN values include "h2" (HTTP/2), "http/1.1", and "h3" (HTTP/3). Browsers typically advertise multiple protocols in order of preference: h2, http/1.1. ALPN is defined in RFC 7301 and is essential for modern web performance. ALPN values are also used in TLS fingerprinting to identify clients.
Role in JA3 Fingerprinting
The application_layer_protocol_negotiation extension is part of the TLS Client Hello packet that JA3 analyzes to create a unique fingerprint of your browser or HTTP client.
JA3 Construction: JA3 concatenates TLS parameters including extensions in a specific format:
TLS_VERSION,CIPHERS,EXTENSIONS,CURVES,POINT_FORMATS
Different browsers and HTTP clients support different sets of TLS extensions, making this a key differentiator in fingerprinting. The presence, absence, or order of extensions like application_layer_protocol_negotiation can reveal:
- Browser type and version (Chrome, Firefox, Safari, Edge)
- Operating system (Windows, macOS, Linux, Android, iOS)
- HTTP library (curl, Python requests, Go http.Client, Node.js)
- Bot detection - automated tools often have distinctive extension sets
Test Your TLS Configuration
See if your browser or HTTP client includes the application_layer_protocol_negotiation extension in its TLS handshake:
The JA3 tool will show all TLS extensions your client advertises, including application_layer_protocol_negotiation.
Browser & Client Support
Modern Browser Support:
- Chrome/Edge: Full support for application_layer_protocol_negotiation
- Firefox: Full support for application_layer_protocol_negotiation
- Safari: Full support for application_layer_protocol_negotiation
HTTP Client Libraries:
- curl: Support varies by OpenSSL/LibreSSL version
- Python requests: Limited TLS extension control
- curl_cffi: Can mimic browser TLS configurations
- Scrapfly API: Automatically matches real browser TLS fingerprints
Related TLS Resources
TLS Extensions
Testing Tools
Technical References
- RFC Specification: RFC 7301 - TLS Extensions
- IANA Registry: TLS ExtensionType Values
- JA3 Project: JA3 - TLS Client Fingerprinting