The hx-headers attribute allows you to add to the headers that will be submitted with an AJAX request.
By default, the value of this attribute is a list of name-expression values in JSON (JavaScript Object Notation) format.
Syntax
<div hx-get="/data" hx-headers='{"myHeader": "My Value"}'>Get Data</div>
If you wish for hx-headers to evaluate the values given, you can prefix the values with javascript: or js:.
<div hx-get="/example" hx-headers='{"myHeader": "My Value"}'>Get Some HTML, Including A Custom Header in the Request</div> <div hx-get="/example" hx-headers='js:{myVal: calculateValue()}'>Get Some HTML, Including a Dynamic Custom Header from Javascript in the Request</div>
Inheritance
By default, hx-headers does not inherit to child elements. Use the :inherited modifier to apply headers to all htmx requests within a subtree. This is useful for propagating a CSRF token across a section of the page:
<div hx-headers:inherited='js:{"X-CSRF-Token": getCsrfToken()}'> <button hx-post="/transfer">Submit</button> <button hx-delete="/item/1">Delete</button> </div>
A child declaration of a header overrides a parent declaration.
Security Considerations
-
By default, the value of
hx-headersmust be valid JSON. It is not dynamically computed. If you use thejavascript:prefix, be aware that you are introducing security considerations, especially when dealing with user input such as query strings or user-generated content, which could introduce a Cross-Site Scripting (XSS) vulnerability. -
Whilst far from being a foolproof solution to Cross-Site Request Forgery, the
hx-headersattribute can support backend services to provide CSRF prevention. For more information see the CSRF Prevention section.