Tag: http headers

nginx剥离最后修改和if-modified-since标头,但我的rails应用程序需要它们

我的Rails 3.2应用程序使用 – 通过#stale? – If-Modified-Since请求中的HTTP头和响应中的Last-Modified头决定是否应该动态生成一些数据。 这在开发中非常有效(无论是使用webrick还是unicorn_rails),因为curl -D headers.txt显示如果提供了正确的If-Modified-Since值,则发送304响应,而Last-Modified标头另外发送请求数据。 不幸的是,一旦部署在nginx之后, If-Modified-Since (提供正确的头部值)都不会传递给unicorn – 因此Rails应用程序 – 也不会Last-Modified传播到客户端:无条件地生成请求并且响应永远不会包含合适的标题。

将自定义标题传递给Capybara的Selenium

我们使用自定义标头来validation我们的网络应用。 http代理服务拦截请求,确认用户的真实性,然后将自定义标头注入请求。 为了测试应用程序,我需要在请求到达ApplicationController方法之前将这些标头写入请求。 现在,当前的hack适用于我所有的非JavaScript测试: # in hooks.rb Before do require ‘capybara/driver/rack_test_driver’ module Capybara::Driver class Authentic “foo”) end end end Capybara.register_driver(:authentic) do |app| Capybara::Driver::Authentic.new(app) end Capybara.default_driver = :authentic end #in the controller class ApplicationController File.join(Rails.root, “public”, “403.html”) unless request.env.keys.include?(‘foo’) end end 任何我不想被认证的请求,我可以使用标签来使用常规的rack_test驱动程序: Feature: Authentication Valid users should be authenticated. Invalid users should be redirected to the […]

如何支持向后兼容Rails 2.3.4中Accept头处理的更改

在Rails 2.3.4中,处理Accept标头的方式已经改变: http://github.com/rails/rails/commit/1310231c15742bf7d99e2f143d88b383c32782d3 我们不会接受它 Rails处理传入Accept头的方式已更新。 这主要是因为网络浏览器似乎并不总是知道他们想要什么……更不用说能够始终如一地表达它。 因此,Accept标头现在仅用于XHR请求或单个项目标头 – 这意味着它们不会请求所有内容。 如果失败,我们会回到使用params [:format]。 值得注意的是,对于您只声明XML模板的操作的请求将不再自动呈现为HTML请求(浏览器请求)。 这在以前有效,不一定是设计,但是因为大多数浏览器都发送了一个包含全部的Accept标头(“ / ”)。 因此,如果要直接向浏览器提供XML,请确保提供:xml格式或显式指定XML模板(呈现“template.xml”)。 我有一个活动的API,许多客户端都使用它们同时发送Content-Type和Accept头,两者都设置为application/xml 。 这工作正常,但我在Rails 2.3.4下的测试表明这不再有效 – 我得到了403 Unauthorized响应。 删除Accept标头并仅发送Content-Type工作,但这显然不是一个可接受的解决方案,因为它将要求我的所有客户端重新编码他们的应用程序。 如果我继续部署到Rails 2.3.4,那么使用API​​的所有客户端应用程序都将中断。 如何修改我的Rails应用程序,以便我可以继续在Rails 2.3.4上提供现有API请求而无需客户端更改其代码?

有关HTTP身份validation方案的建议(使用请求标头)

我在Heroku上托管了一个rails应用程序,它限制了使用代理服务的访问权限。 外部服务器充当所有请求的中介并处理用户身份validation。 用户通过身份validation后,服务器(我认为LDAP)会将用户名添加到请求标头中,并将其重定向到我的应用程序。 我想使用请求标头中的用户名来validation我的应用中的用户。 基本上,如果用户不存在,我会创建一个用户名(不需要密码),如果不是,我只会登录。我将把用户存储在我的应用程序的数据库中。 我该怎么做? 为此可以使用Devise吗? 编辑 :我使用Devise /自定义Warden策略,如下所示: # config/initializers/my_strategy.rb Warden::Strategies.add(:my_strategy) do def valid? true end def authenticate! if !request.headers[“my_key”] fail!(“You are not authorized to view this site.”) redirect!(“proxy_url”) else username = request.headers[“my_key”] user = User.find_by_username(username) if user.nil? user = User.create(:username => username) end success!(user) end end end #config/initializers/devise.rb config.warden do |manager| manager.default_strategies(:scope […]

允许来自特定站点的X-Frame-Options ALLOW-FROM

我正在使用rails应用程序来从abc.com提供页面。 在其中,我在应用程序控制器中设置响应头(对于通过before_filter的每个请求),以便只能通过iframe从特定站点(xyz.com)访问它,通过以下代码: def set_x_frame_options response.headers[“X-Frame-Options”] = “ALLOW-FROM http://www.xyz.com” end 问题是,我不仅可以从xyz上的abc.com访问该页面,还可以访问任何其他网站。 我想限制只访问xyz.com。 当我在chrome控制台中检查响应头时,我可以看到正确传递了X-Frame-Options。 所有浏览器都会发生这种情况。 我错过了什么吗?

在Rails 2.2+中测试HTTP Basic Auth

作为我正在构建的API的一部分,有一种用户身份validation方法,成功时返回有用的用户信息,API令牌等的有效负载。 在为处理此问题的控制器编写function测试时,我遇到了测试HTTP Basic auth的问题; 我发现很多博客提到以下代码应该用于欺骗标头以进行身份​​validation尝试: @request.env[‘HTTP_AUTHORIZATION’] = ActionController::HttpAuthentication::Basic.encode_credentials(email, pass) 问题是这没有效果; authenticate_with_http_basic看不到标题,因此即使存在有效凭据也会返回false。 我错过了什么吗? 请注意,如果在回答中有用,应用程序将被冻结到Rails 2.2.2。

如何在用户注销后清除浏览器缓存,以防止通过“后退”按钮访问私人信息

用户退出后,如果他们点击后退按钮,他们可以在退出之前返回到他们所在的最后一页。 我正在处理的应用程序通常用于公共计算机(例如图书馆或计算机实验室),我想阻止用户查看以前用户会话中的任何内容。 我正在使用Rails 3和Devise,顺便说一下,虽然看起来这个问题会出现任何框架或登录机制。 解决方案是使用标头/元标记来禁用浏览器缓存吗? 有人知道解决这个问题的gem或教程吗? 期待您的建议。

在HTTP Basic Auth用户名中损坏了UTF-8字符

我正在尝试使用Ruby on Rails构建Web服务。 用户通过HTTP Basic Auth进行身份validation。 我想在用户名和密码中允许任何有效的UTF-8字符。 问题是浏览器在将它们发送到我的服务之前会破坏Basic Auth凭证中的字符。 为了测试,我使用’カタカナカタカナカタカナカタカナカタカナカタカナカタカナカタカナカタカナカタカナ’作为我的用户名(不知道它是什么意思 – AFAIK它是我们的QA家伙想出的一些随机字符 – 请原谅我,如果它是某种方式令人反感)。 如果我把它看作一个字符串,并做username.unpack(“H *”)将其转换为hex,我得到:“3e28ba3e28fb3e28ba3e38a83e28ba3e28fb3e28ba3e38a83e28ba3e28fb3e28ba3e38a83e28ba3e28fb3e28ba3e38a83e28ba3e28fb3e28ba3e38a83e28ba3e28fb3e28ba3e38a83e28ba3e28fb3e28ba3e38a83e28ba3e28fb3e28ba3e38a8”这似乎是对适合32个汉字字符(3个字节元/ 6个hex数字)。 如果我使用通过HTTP Basic auth进入的用户名执行相同的操作,我会得到:’bafbbaacbafbbaacbafbbaacbafbbaacbafbbaacbafbbaacbafbbaacbafbbaac’。 它显然要短得多。 使用Firefox Live HTTP Headers插件,这是发送的实际标头: Authorization: Basic q7+ryqu/q8qrv6vKq7+ryqu/q8qrv6vKq7+ryqu/q8o6q7+ryqu/q8qrv6vKq7+ryqu/q8qrv6vKq7+ryqu/q8o= 看起来像’bafbba …’字符串,交换了高低字节(至少当我将其粘贴到Emacs中时,基本64解码,然后切换到hexl模式)。 这可能是用户名的UTF16表示,但我没有任何东西可以将它显示为除了胡言乱语之外的任何东西。 Rails将内容类型标头设置为UTF-8,因此浏览器应该以该编码发送。 我获得了表单提交的正确数据。 问题出现在Firefox 3.0.8和IE 7中。 那么…是否有一些神奇的function让网络浏览器通过HTTP Basic Auth发送UTF-8字符? 我在接收端处理错误了吗? HTTP Basic Auth是否不适用于非ASCII字符?

rails media file stream通过send_data或send_file方法接受字节范围请求

我有以下问题。 声音在公共文件夹中隐藏,因为只有某些用户应该有权访问声音文件。 所以我做了一个特定的方法,它就像一个声音url,但首先计算,是否允许当前用户访问该文件。 该文件由send_data方法发送。 问题是,如果它的工作原理我工作得很慢……我用来播放声音的jplayer插件的开发者告诉我,我应该能够接受字节范围请求以使其正常工作… 如何通过send_data或send_file发送文件在rails控制器中执行此操作? 谢谢,马库斯

恢复Ruby中的文件下载,范围标题问题

在Ruby 1.8.7中设置范围标题时,会添加一个额外的“X-REMOVED:Range”标题,这(看似)会阻止下载恢复工作。 size = File.size(local_file) Net::HTTP.start(domain) do |http| headers = { ‘Range’ => “bytes=#{size}-” } resp = http.get(remote_file, headers) open(local_file, “wb”) do |file| file.write(resp.body) end end 标题已发送: GET /test.zip HTTP/1.1..Host: 192.168.50.1..Accept: */*..X-REMOVED: Range..Range: bytes=481-…. 我也尝试过使用相同结果的set_range。