envoyproxy / envoyproxy/envoy-mobile
Cronvoy: support some QUIC experimental feature parameters
- Dominant language
- Java
- Stars
- 566
- Forks
- 85
- PR merge metrics
- No merged PRs in 30d
Description
Cronet support couple of experimental feature parameters. Most of them won't be needed - this needs to be determined. Here is the list:
Experiment Name: "QUIC"
Experiment Value: a JSON object with key value pairs that is defined as follows
- "connection_options"
Value: String
- A comma separated connection options, e.g "TIME,TBBR,TLPR"
- Each connection option should not be more than 4 characters.
- See a full list at net/quic/core/crypto/crypto_protocol.h
- "store_server_configs_in_properties"
- Value: boolean
- If true, QUIC server crypto config record will be stored in net::HttpServerProperties and persisted in local_prefs.json under the storage path set using CronetEngine.Builder.setStoragePath() instead of in Disk Cache.
- "max_server_configs_stored_in_properties"
- Value: int
- If "store_server_configs_in_properties" is enabled, the default value is 5, unless specified here.
- This depends how many different host/port pairs that the client would like to do 0-RTT on. rtenneti@ chose the default value of 5, based on the Net.CountOfAlternateProtocolServers.Memory in AGSA. They were accessing around 20 different host/port pairs to speak QUIC.
- "idle_connection_timeout_seconds"
- Value: int
- Specifies QUIC idle connection state lifetime.
- "host_whitelist" (Removed in https://codereview.chromium.org/2814363005/, added back in https://chromium-review.googlesource.com/c/chromium/src/+/772826)
- Value: string
- Comma separated host strings. Eg. "test.example.com,testhost.com"
- List of hosts for which QUIC is explicitly whitelisted.
- If not specified or empty, then QUIC can be spoken to any host.
- "goaway_sessions_on_ip_change" (available for 69.0.3448.0 and above)
- Value: boolean
- If true, all existing sessions will be marked as going away when any local IP address changes. Requests started on the old sessions can finish, while new requests will be sent on new connections.
- Recommend for iOS as iOS platform doesn't kill old connections immediately when switching networks.
- Note that "goaway_sessions_on_ip_change" and "close_sessions_on_ip_change" should not be simultaneously set.
- "close_sessions_on_ip_change"
- Value: boolean
- If true, all QUIC sessions are closed when any local IP address changes. Request started on the old sessions will fail with NETWORK_CHANGED.
- Note that "goaway_sessions_on_ip_change" and "close_sessions_on_ip_change"/"migrate_sessions_on_network_change" should not be simultaneously set.
- "user_agent_id"
- Value: string
- User agent description to send in the QUIC handshake.
- "migrate_sessions_on_network_change_v2"
- Make sure you read go/quic-cmv2-config-options before experimenting.
- Value: boolean
- If true, active QUIC sessions may be migrated onto a new network when the platform indicates that the default network is changing.
- "migrate_sessions_early_v2"
- Make sure you read go/quic-cmv2-config-options before experimenting.
- Value: boolean
- If true, active QUIC sessions experiencing poor connectivity may be migrated onto a new network.
- "quic_disable_bidirectional_streams"
- Only applicable to Cronet is used for both normal HTTP requests and in gRPC.
- Value: boolean
- If true, disable QUIC for gRPC requests.
- "race_cert_verification"
- Value: boolean
- If true, cert verification will be raced with host resolution if a server config is available. We don’t wait until host resolution comes back before doing the cert verification.
- "max_server_configs_stored_in_properties" also needs to be set so that server configs are persisted in HttpServerProperties. Suggested value is 20.
- "max_time_before_crypto_handshake"
- Value: int
- Maximum time the session can be alive before crypto handshake is finished.
- "max_idle_time_before_crypto_handshake"
- Value: int
- Maximum idle time before the crypto handshake has completed.
- "enable_socket_recv_optimization"
- Value: boolean
- Enables experimental optimization for reading data from QUIC UDP sockets. Specifically, it replaces the recvmsg() system call with read(). By default, the optimization is switched off.
Contributor guide
Assessment
This issue has not been assessed yet.