Apache 2.4 Unrecognized header format %

8,886

You need to be using Apache v2.4.10 or above and as Ubuntu 14.04 LTS ships with v2.4.7 this is most likely what you are using. The documentation mentions this briefly at the start of the Header directive docs:

Compatibility: SetIfEmpty available in 2.4.7 and later, expr=value available in 2.4.10 and later

I ran up a couple of servers to confirm this works

Apache v2.4.12:

root@ubuntu-server:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 15.10
Release:    15.10
Codename:   wily

root@ubuntu-server:~# cat /etc/apache2/sites-enabled/000-default.conf 
<VirtualHost *:80>
Header set foo-checksum "expr=%{md5:foo}"
</VirtualHost>

root@ubuntu-server:~# apachectl -v
Server version: Apache/2.4.12 (Ubuntu)
Server built:   Jul 24 2015 15:59:00

root@ubuntu-server:~# service apache2 reload

root@ubuntu-server:~# curl -I localhost
HTTP/1.1 200 OK
Date: Mon, 07 Mar 2016 21:15:38 GMT
Server: Apache/2.4.12 (Ubuntu)
Last-Modified: Mon, 07 Mar 2016 20:57:04 GMT
ETag: "2c39-52d7bb502f118"
Accept-Ranges: bytes
Content-Length: 11321
Vary: Accept-Encoding
foo-checksum: acbd18db4cc2f85cedef654fccc4a4d8
Content-Type: text/html

but not on Apache v2.4.7:

root@ubuntu-server:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.4 LTS
Release:    14.04
Codename:   trusty

root@ubuntu-server:~# cat /etc/apache2/sites-enabled/000-default.conf 
<VirtualHost *:80>
Header set foo-checksum "expr=%{md5:foo}"
</VirtualHost>

root@ubuntu-server:~# apachectl -v
Server version: Apache/2.4.7 (Ubuntu)
Server built:   Jan 14 2016 17:45:23

root@ubuntu-server:~# service apache2 reload
 * Reloading web server apache2                                                                                                                   * 
 * The apache2 configtest failed. Not doing anything.
Output of config test was:
AH00526: Syntax error on line 2 of /etc/apache2/sites-enabled/000-default.conf:
Unrecognized header format %
Action 'configtest' failed.
The Apache error log may have more information.
Share:
8,886

Related videos on Youtube

TheBritishAreComing
Author by

TheBritishAreComing

I'm James, a plucky fullstack (and mobile) software engineer with a wealth of experience in different languages, stacks and ecosystems! I like to make random stuff to solve problems, recently I launched a Browser extension called SuperAgree to help people get more control over their LinkedIn I'm also building a Social network called SoSa (https://sosa.net) aimed at helping people make new friends online in a fun way. Drop me a message if you have any questions :)

Updated on September 18, 2022

Comments

  • TheBritishAreComing
    TheBritishAreComing almost 2 years

    Using Apache 2.4 and followed the examples here https://httpd.apache.org/docs/2.4/expr.html

    Here is my code

    <If "!%{REQUEST_URI} =~ m#files/cache/static/[A-Za-z_\-0-9]+.cache#"> 
        Header set foo-checksum "expr=%{md5:foo}"
    </If>
    

    I'm just playing at the moment but as soon as I use

        Header set foo-checksum "expr=%{md5:foo}"
    

    As per their example - I get

    AH00526: Syntax error on line 130 of /etc/httpd/conf/httpd.conf:
    httpd[19459]: Unrecognized header format %
    httpd.service: main process exited, code=exited, status=1/FAILURE
    

    On apache start. Any ideas? I've tried it outside of an expression as well and it gives the same error

    Other expressions work.

  • Marc
    Marc almost 3 years
    We're on httpd 2.4.48 (CentOS 7) and still getting this error.