Action Dispatch FileHandler
此端点使用 Rack::Files
从磁盘提供静态文件。
URL 路径根据预期的约定与静态文件匹配:path
、path
.html、path
/index.html。
首先检查这些文件的预压缩版本。支持 Brotli (.br) 和 gzip (.gz) 文件。如果存在 path
.br,则此端点返回该文件,并带有 content-encoding: br
标头。
如果找不到匹配的文件,则此端点响应 404 Not Found
。
传递要搜索匹配文件的 root
目录,可选的 index: "index"
用于更改默认的 path
/index.html,以及可选的附加响应标头。
方法
常量
PRECOMPRESSED | = | { "br" => ".br", "gzip" => ".gz", "identity" => nil } |
|
类公共方法
new(root, index: "index", headers: {}, precompressed: %i[ br gzip ], compressible_content_types: /\A(?:text\/|application\/javascript|image\/svg\+xml)/) 链接
来源:显示 | 在 GitHub 上
# File actionpack/lib/action_dispatch/middleware/static.rb, line 55 def initialize(root, index: "index", headers: {}, precompressed: %i[ br gzip ], compressible_content_types: /\A(?:text\/|application\/javascript|image\/svg\+xml)/) @root = root.chomp("/").b @index = index @precompressed = Array(precompressed).map(&:to_s) | %w[ identity ] @compressible_content_types = compressible_content_types @file_server = ::Rack::Files.new(@root, headers) end
实例公共方法
attempt(env) 链接
来源:显示 | 在 GitHub 上
# File actionpack/lib/action_dispatch/middleware/static.rb, line 69 def attempt(env) request = Rack::Request.new env if request.get? || request.head? if found = find_file(request.path_info, accept_encoding: request.accept_encoding) serve request, *found end end end
call(env) 链接
来源:显示 | 在 GitHub 上
# File actionpack/lib/action_dispatch/middleware/static.rb, line 65 def call(env) attempt(env) || @file_server.call(env) end