application_layer_protocol_negotiation

TLS Extension Code: 16

Extension Details

Extension Name
application_layer_protocol_negotiation
Extension Code (Decimal)
16
Extension Code (Hex)
0x0010
RFC Reference

What 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

How This Extension Affects 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

Technical References