A method of propagating tracing across a distributed software application, the method comprising: logging tracing data for a web page from an original server, the web page executed by a web browser; determining, at the web browser, that the web page from the original server requires a request to an external server outside a domain of the original server; searching a deny list, at the web browser, for whether the external server disallows tracing headers in requests from the original server, wherein a deny list includes destination servers that did not accept requests with injected tracing headers; if the external server is not on the deny list, searching an allow list, at the web browser, for whether the external server allows tracing headers in requests from the original server, wherein an allow list includes destination servers that did accept requests with injected tracing headers; if the external server is not on the allow list, interrogating the external server to determine whether the external server allows tracing headers in requests; determining, from the result of the interrogation, whether tracing headers are supported by the external server; if tracing headers are supported by the external server, updating the allow list, at the web browser, to indicate that the external server allows tracing headers in requests from the original server; injecting a tracing header in the request based on the determination that the external server supports tracing headers; and sending, from the web browser to the external server, the request with the tracing header, the external server configured to log tracing data based on the tracing header. logging tracing data for a web page from an original server, the web page executed by a web browser; determining, at the web browser, that the web page from the original server requires a request to an external server outside a domain of the original server; searching a deny list, at the web browser, for whether the external server disallows tracing headers in requests from the original server, wherein a deny list includes destination servers that did not accept requests with injected tracing headers; if the external server is not on the deny list, searching an allow list, at the web browser, for whether the external server allows tracing headers in requests from the original server, wherein an allow list includes destination servers that did accept requests with injected tracing headers; if the external server is not on the allow list, interrogating the external server to determine whether the external server allows tracing headers in requests; determining, from the result of the interrogation, whether tracing headers are supported by the external server; if tracing headers are supported by the external server, updating the allow list, at the web browser, to indicate that the external server allows tracing headers in requests from the original server; injecting a tracing header in the request based on the determination that the external server supports tracing headers; and sending, from the web browser to the external server, the request with the tracing header, the external server configured to log tracing data based on the tracing header.