2012-10-28 10 views
5

Sinatra ist camel-casing alle Header-Namen, Probleme mit "P3P". Code:Wie kann ich Sinatra davon abhalten, meine Header-Namen neu zu schreiben?

require 'rubygems' 
require 'sinatra' 

configure :production do 
    # Configure stuff here you'll want to 
    # only be run at Heroku at boot 

    # TIP: You can get you database information 
    #  from ENV['DATABASE_URI'] (see /env route below) 
end 

# Quick test 
get '/track' do 
    #response.headers['Cache-Control'] = 'public, max-age=300' 
    response.set_cookie("visited",1) 
    response['this-that'] = "CP=\"CAO DSP COR CURa ADMa DEVa OUR IND PHY ONL UNI COM NAV INT DEM PRE\"" 
    response['P3P'] = "CP=\"CAO DSP COR CURa ADMa DEVa OUR IND PHY ONL UNI COM NAV INT DEM PRE\"" 
    "SUCCESS" 
end 

gib mir

* About to connect() to localhost port 9393 (#0) 
* Trying 127.0.0.1... connected 
> GET /track HTTP/1.1 
> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3 
> Host: localhost:9393 
> Accept: */* 
> 
< HTTP/1.1 200 OK 
< X-Frame-Options: sameorigin 
< X-Xss-Protection: 1; mode=block 
< Content-Type: text/html;charset=utf-8 
< This-That: CP="CAO DSP COR CURa ADMa DEVa OUR IND PHY ONL UNI COM NAV INT DEM PRE" 
< P3p: CP="CAO DSP COR CURa ADMa DEVa OUR IND PHY ONL UNI COM NAV INT DEM PRE" 
< Content-Length: 7 
< Server: WEBrick/1.3.1 (Ruby/1.9.2/2012-04-20) 
< Date: Sun, 28 Oct 2012 16:26:47 GMT 
< Connection: Keep-Alive 
< Set-Cookie: visited=1 
< 
* Connection #0 to host localhost left intact 
* Closing connection #0 
SUCCESS 

wie Sie this-that wird neu geschrieben This-That und P3P wird neu geschrieben P3p sehen können. Hier ist mein Juwel Liste:

* LOCAL GEMS *

addressable (2.3.2) 
bundler (1.2.1) 
excon (0.16.7) 
heroku (2.32.14) 
heroku-api (0.3.5) 
launchy (2.1.2) 
mime-types (1.19) 
netrc (0.7.7) 
rack (1.4.1) 
rack-protection (1.2.0) 
rake (0.9.2.2) 
rest-client (1.6.7) 
rubygems-bundler (1.1.0) 
rubyzip (0.9.9) 
rvm (1.11.3.5) 
shotgun (0.9) 
sinatra (1.3.3) 
tilt (1.3.3) 

Wie verhindere ich, sinatra aus dem Cookie-Namen neu zu schreiben. Gibt es einen Affen-Patch, den ich machen kann?

Antwort

5

HTTP header names should be case insensitive, so sollte dies in der Theorie kein Problem sein - P3p sollte genauso gut funktionieren wie P3P.

In Ihrem Fall sind die Header altered by the Webrick server, nicht Sinatra. Der Wechsel zu einem anderen Server wie Thin (der die Header nicht verändert) wäre die einfachste Lösung (es gibt noch weitere Vorteile bei der Verwendung von Thin über Webrick).

Wenn Sie den Webrick wirklich weiterverwenden müssen, können Sie in Patching WEBrick::HTTPResponse suchen. Sie müssen vorsichtig sein, da Wirrick die Header-Namen abwertet, um Duplikate zu verarbeiten, so dass Sie dies möglicherweise berücksichtigen müssen.