وب سرور مینیمالیستی برای فایل های استاتیک با کریستال

مسئله
یک وب سرور کراس پلتفرم بسازید تا فایل های ثابت را در پوشه محلی ارائه دهد.
فایل های محلی HTML، CSS و JS را بدون خطای CORS آزمایش کنید1.
بسیاری از مرورگرها، از جمله فایرفاکس و کروم، اکنون همه فایل های محلی را به عنوان منشأ مبهم (به طور پیش فرض) در نظر می گیرند. در نتیجه، بارگیری یک فایل محلی با منابع محلی شامل خطاهای CORS منجر می شود.
راه حل ها
کتابخانه استاندارد کریستال به سرور HTTP اجازه می دهد تا درخواست ها را پردازش کند2.
استاندارد
یک سرور را اجرا کنید http://127.0.0.1:8080
برای ارائه فایل ها از دایرکتوری محلی.
# server.cr
require "http/server"
def run(host="127.0.0.1", port=8080, local=".")
server = HTTP::Server.new([
HTTP::ErrorHandler.new,
HTTP::LogHandler.new,
HTTP::CompressHandler.new,
HTTP::StaticFileHandler.new(local),
])
address = server.bind_tcp host, port
puts "Listening on http://#{address}"
server.listen
end
run
$ crystal run server.cr
Listening on http://127.0.0.1:8080
مینیمالیست
البته، شما می خواهید آن را در همه جا بدون ایجاد فایل های اضافی اجرا کنید:
$ crystal eval -p 'require "http/server"; HTTP::Server.new([HTTP::StaticFileHandler.new(".")]).listen(8080)'
منابع
-
دلیل: درخواست CORS نه HTTP: در حال بارگیری یک فایل محلی ↩
-
کریستال: کلاس HTTP::سرور ↩