<div dir="ltr">Tom,<div><br></div><div>Request headers key names are case-insensitive, so X-Real-Ip and X-REAL-IP would both work. I could not repeat your issue using Python 3.6:</div><div><br></div><span style="font-family:monospace,monospace">from flask import Flask, jsonify, request</span><br><font face="monospace, monospace"><br></font><span style="font-family:monospace,monospace">app = Flask(__name__)</span><br><font face="monospace, monospace"><br></font><span style="font-family:monospace,monospace">@app.route('/')</span><br><span style="font-family:monospace,monospace">def hello_world():</span><br><span style="font-family:monospace,monospace">    print(request.headers)</span><br><span style="font-family:monospace,monospace">    print(request.headers.get('Accept', 'No Accept'))</span><br><span style="font-family:monospace,monospace">    print(request.headers.get('X-Real-Ip', 'No X-Real-Ip'))</span><br><span style="font-family:monospace,monospace">    print(request.headers.get('X-REAL-IP', 'No X-Real-Ip'))</span><br><span style="font-family:monospace,monospace">    return jsonify(dict(request.headers))</span><br><font face="monospace, monospace"><br></font><span style="font-family:monospace,monospace">app.run()</span><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace"><br><div><font face="monospace, monospace">$ curl --header "X-Real-Ip: 8.8.8.8" <a href="http://127.0.0.1:5000/">http://127.0.0.1:5000/</a></font></div></font><font face="monospace, monospace"><div>{</div><div>  "Accept": "*/*", </div><div>  "Host": "<a href="http://127.0.0.1:5000">127.0.0.1:5000</a>", </div><div>  "User-Agent": "curl/7.54.1", </div><div>  "X-Real-Ip": "8.8.8.8"</div><div>}</div><div><br><br></div><div><div>127.0.0.1 - - [27/Jul/2017 15:12:18] "GET / HTTP/1.1" 200 -</div><div>Host: <a href="http://127.0.0.1:5000">127.0.0.1:5000</a></div><div>User-Agent: curl/7.54.1</div><div>Accept: */*</div><div>X-Real-Ip: 8.8.8.8</div><div><br></div><div><br></div><div>*/*</div><div>8.8.8.8</div><div>8.8.8.8</div></div><div><br></div></font><div><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jul 27, 2017 at 11:53 AM, Tom Vaughan <span dir="ltr"><<a href="mailto:thomas.david.vaughan@gmail.com" target="_blank">thomas.david.vaughan@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Thu, Jul 27, 2017 at 12:51 AM, Tom Vaughan<br>
<<a href="mailto:thomas.david.vaughan@gmail.com">thomas.david.vaughan@gmail.<wbr>com</a>> wrote:<br>
> Hi,<br>
><br>
> Why would this:<br>
><br>
>     print(request.headers)<br>
>     print(request.headers.get('<wbr>Accept', 'No Accept'))<br>
>     print(request.headers.get('X-<wbr>Real-Ip', 'No X-Real-Ip'))<br>
><br>
> cause this output:<br>
><br>
>     Accept: text/html,application/xhtml+<wbr>xml,application/xml;q=0.9,*/*;<wbr>q=0.8<br>
>     Connection: keep-alive<br>
>     X-Real-Ip: 172.17.0.1<br>
>     [...]<br>
><br>
>     text/html,application/xhtml+<wbr>xml,application/xml;q=0.9,*/*;<wbr>q=0.8<br>
>     No X-Real-Ip<br>
><br>
> ?<br>
<br>
</span>So the problem is:<br>
<br>
    File "/usr/local/lib/python3.5/<wbr>dist-packages/werkzeug/<wbr>datastructures.py",<br>
line 1349, in __getitem__<br>
<br>
        key = key.upper().replace('-', '_')<br>
        if key in ('CONTENT_TYPE', 'CONTENT_LENGTH'):<br>
            return _unicodify_header_value(self.<wbr>environ[key])<br>
        return _unicodify_header_value(self.<wbr>environ['HTTP_' + key])<br>
<br>
The problem is that the custom header values (those that start with<br>
X-) are not capitalized in self.environ, everything else is. For<br>
example in self.environ, Accept exists as HTTP_ACCEPT, but X-Real-Ip<br>
exists as HTTP_X_Real_IP. But why?<br>
<div class="HOEnZb"><div class="h5">______________________________<wbr>_________________<br>
Flask mailing list<br>
<a href="mailto:Flask@python.org">Flask@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/flask" rel="noreferrer" target="_blank">https://mail.python.org/<wbr>mailman/listinfo/flask</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div>Scott Werner<br><a href="mailto:scott.werner.vt@gmail.com" target="_blank">scott.werner.vt@gmail.com</a><br></div></div></div>
</div>