Ruby on rails Rails自定义图像标题

Ruby on rails Rails自定义图像标题,ruby-on-rails,ruby-on-rails-3,image,http-headers,Ruby On Rails,Ruby On Rails 3,Image,Http Headers,当有人请求图像时,是否可以修改Rails 3中的标题?例如: http://localhost:3000/assets/myimg.png 我想在标题中添加Access Control Allow Origin:“*”,这样我就可以通过JavaScript远程下载图像文件 更新1 我有办法更改资产文件夹下图像的标题,但现在我还需要对公共图像执行同样的操作。我尝试了下面同样的方法,但没有成功 示例url是 http://localhost:3000/images/stuff.png 我尝试了R

当有人请求图像时,是否可以修改Rails 3中的标题?例如:

http://localhost:3000/assets/myimg.png
我想在标题中添加Access Control Allow Origin:“*”,这样我就可以通过JavaScript远程下载图像文件

更新1

我有办法更改资产文件夹下图像的标题,但现在我还需要对公共图像执行同样的操作。我尝试了下面同样的方法,但没有成功

示例url是

http://localhost:3000/images/stuff.png
我尝试了Rack中间件,但它在转到公共映像时不运行call方法。我还尝试了LocationMatch(在生产环境中),同样没有运气

我如何尝试让公共图像结束时更改标题

更新2

所以,我确实设法通过LocationMatch使其工作,但图像无法缓存。有没有办法通过apache禁用图像缓存?

资源将被“编译”并由web服务器(Nginx/apache)直接提供服务,因此Rails不会在生产中提供服务。您需要修改web服务器的配置以添加标题

在Apache中类似于此

<LocationMatch "^/assets/.*$">
  Header add Access-Control-Allow-Origin "*"
  ...
</LocationMatch>
有关预编译资产的更多详细信息,请参阅


更新:如果需要在开发环境中应用头文件,可以使用一些自定义机架中间件。请参阅以获取示例。

您将在哪里托管应用程序?如何实现这一点取决于您的生产环境,即静态文件的服务器。生产将通过Apache完成,开发是WEBRICK。在开发模式下,很难获得任何服务头(进行合理的代码更改),因为文件是通过ActionDispatch::static(而不是Apache)提供的。我不知道以Ryan在Apache中描述的方式更改配置有多困难,但您需要复制生产设置以获取头文件(当Apache提供文件时),或者在生产环境中测试它。这将涵盖生产方面。谢谢如何在开发模式下修改WEBRICK,以便通过Javascript在Phonegap中测试缓存图像。现在它一直告诉我原产地不允许。。。。在我修复开发端之前。或者我必须停止使用WEBRICK并开始使用其他允许更改标题的开发系统吗?这是个好问题。我不知道如何配置Sprocket在服务于资产管道时使用的标头。可能有一种方法,但也可以使用config/environments/development.rb中的自定义机架中间件。它可以修改发送回资产请求的头。顺便说一句,出于好奇,Sprocket::Server模块是处理资产响应的模块。我看不到在那里配置标题的方法:谢谢@ryanb的帮助!
location ~ ^/assets/ {
  add_header Access-Control-Allow-Origin *;
  ...
}