Overview
| Comment: | Serve index.html files correctly. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA3-256: |
87b77ab4de07524cbd4ee291570b7b46 |
| User & Date: | marka on 2025-08-15 07:04:49.792 |
| Other Links: | manifest | tags |
Context
|
2025-08-15
| ||
| 13:44 | Use Crystal MIME library for determining content-type. check-in: e81f9f06dd user: marka tags: trunk | |
| 07:04 | Serve index.html files correctly. check-in: 87b77ab4de user: marka tags: trunk | |
| 02:26 | First checkin. check-in: 0ec0ee863c user: marka tags: trunk | |
Changes
Modified src/fs.cr
from [ce44d3a1f8]
to [ff1867bb3f].
| ︙ | ︙ | |||
87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
end
# Simple HTTP server for static files.
class Server
def initialize(config : Config)
@config = config
@server = uninitialized HTTP::Server
end
def process_request(context : HTTP::Server::Context)
request = context.request
request_path = request.path
method = request.method
| > < | > | > > | > > > > | | | 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
end
# Simple HTTP server for static files.
class Server
def initialize(config : Config)
@config = config
@root = config.root
@server = uninitialized HTTP::Server
end
def process_request(context : HTTP::Server::Context)
request = context.request
request_path = request.path
method = request.method
MyLog.debug "process_request: got path #{request_path}, method #{method}"
path = File.join(@root, request_path)
if Dir.exists?(path)
path = File.join(path, "index.html")
end
if File.exists?(path)
content_type = `file -b --mime-type #{path}`.strip
context.response.content_type = content_type
MyLog.info "Serving #{path}, content type #{content_type}"
File.open(path) { |file| IO.copy(file, context.response) }
else
MyLog.error "No such file #{path}"
context.response.respond_with_status(404, "No such file #{request_path}")
end
end
def start
@server = HTTP::Server.new([
HTTP::ErrorHandler.new,
HTTP::LogHandler.new,
HTTP::StaticFileHandler.new(@root, directory_listing: false)
]) do |context|
process_request(context)
end
if @server
address = @server.bind_tcp @config.host, @config.port
puts "Listening on http://#{address}"
# If SSL is specified, set that up. If you have Apache
# available, it's probably better to NOT let fs handle
|
| ︙ | ︙ |