2012-10-28 24 views
5

Sinatra là vỏ lạc đà tất cả các tên tiêu đề, gây ra các vấn đề với 'P3P'. Mã số:làm cách nào để ngăn chặn Sinatra ghi lại tên tiêu đề của tôi?

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 

cho tôi

* 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 

như bạn có thể nhìn thấy this-that được viết lại để This-ThatP3P được viết lại để P3p. Dưới đây là danh sách đá quý của tôi:

* GEMS ĐỊA PHƯƠNG *

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) 

Làm thế nào để ngăn chặn Sinatra từ viết lại tên cookie. Có miếng vá khỉ mà tôi có thể làm không?

Trả lời

5

HTTP header names should be case insensitive, do đó, về mặt lý thuyết, điều này không phải là vấn đề - P3p sẽ hoạt động cũng như P3P.

Trong trường hợp của bạn, tiêu đề là altered by the Webrick server, không phải Sinatra. Thay đổi sang một máy chủ khác như Thin (không thay đổi tiêu đề) sẽ là bản sửa lỗi dễ nhất (cũng có những lợi ích khác khi sử dụng Thin over Webrick).

Nếu bạn thực sự cần tiếp tục sử dụng Webrick, bạn có thể xem xét vá WEBrick::HTTPResponse. Bạn phải cẩn thận, vì Webrick làm giảm các tên tiêu đề để xử lý các bản sao nên bạn có thể phải tính đến điều đó.

Các vấn đề liên quan