** (Middleware) - Automatically sets headers in each request, so you don't have to!
** Only non-existing header values are set, leaving any existing values untouched. This means you can use sticky 
** headers to set default values and manually override them for individual requests.
class StickyHeadersMiddleware : ButterMiddleware {

    ** The header values set in every request 
    HttpRequestHeaders headers  := HttpRequestHeaders()
    @NoDoc @Deprecated { msg="Use 'headers' instead" }
    HttpRequestHeaders stickyHeaders()  { headers }
    override ButterResponse sendRequest(Butter butter, ButterRequest req) {     
        headers.val.each |val, key| {
            if (!req.headers.containsKey(key))
                req.headers[key] = val
        return butter.sendRequest(req)
    ** Getter for sticky header values.
    Str? get(Str key) {

    ** Setter for sticky header values.
    ** Setting a 'null' value removes the value from the map.
    Void set(Str key, Str? val) {
        headers[key] = val