Follow these recommendations to check content structure and verify that content compression is not interfering.
If you are expecting to see the browser agent added automatically but do not, check whether any of these restrictions might apply.
Content-Typefor the HTML response must be
Content-Encodingresponse header cannot be set.
Content-Dispositionresponse header cannot mark the response as an attachment.
Content-Dispositionspecified in an
http-equivmeta tag within the HTML
<head>element cannot mark the response as an attachment.
<body>element of the HTML response must appear within the first 64 kbytes.
If you are generating HTML page responses and using the
application/xhtml+xml, you can override the allowed content types to list both this content type and
text/htmlin your agent configuration file.browser_monitoring.content_type = text/html application/xhtml+xml
Make sure the
browser_monitoring.content_typeis a space-separated list of content types.
application/xhtml+xmlas an allowed content type for automatic instrumentation, be aware that the resulting page will no longer validate correctly as
application/xhtml+xml, although the page should still be loaded and rendered correctly by browsers.
To resolve issues with the other content limitations, use manual instrumentation.
If you are using a WSGI or web framework middleware or a plugin that encodes the response content, such as when doing response compression, automatic instrumentation may not work. The Python agent provides specific support for Django
Flask-Compress with auto-instrumentation. However, currently this is not supported for
paste.gzipper, because it contains a bug which makes it unusable in conjunction with the agent's WSGI middleware that adds the browser monitoring instrumentation.
If you encounter this problem, use manual instrumentation, or switch to using your web server or front-end proxy to compress the response content, rather than performing compression within your web application. The latter solution may also offer performance benefits.
When inspecting your page source, you see the browser agent inserted incorrectly inside a conditional block.
This can happen because the Python agent does not check for these conditional blocks when deciding to place the browser agent. Consider using manual instrumentation in this case.