-
Notifications
You must be signed in to change notification settings - Fork 180
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix MIME-type for css files #238
Conversation
… css files correctly.
I had to revert this change since it was causing the lighttpd service to fail. |
It would be interesting to know the error... it didnt cause the lighttpd service to fail on my pi. mimetype.assign += (".css" => "text/css") |
I have tried the |
Thanks for trying. These messages dont give me any good idea, and I cannot really test anything since it is working for me.
Well, sorry for the trouble! It would just be nice to fix it, since the beautiful GUI is not very usable without the CSS - like when my browsers blocks these without the MIME type set properly. Well, for myself I can obviously just keep the change locally, but I thought others might run into the same issue…. Possibly you could actually see in the HTML headers when the browser requests the .css files whether they are marked as text/css for you.
…
I have tried the += but it still didn't work for me.
Here's a thread with users reporting the error #247 <#247>
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub <#238 (comment)>, or unsubscribe <https://github.com/notifications/unsubscribe-auth/ACFUSMQOX3EBP7RBSC3HRYLSC2VFJANCNFSM4QIE4W2A>.
|
@joxda the CSS mime type is already listed in /usr/share/lighttpd/create-mime.conf.pl so I think that should take care of it.
The CSS files are recognized properly on Chrome. |
Ok great, then I'll just need to see why it wasn't in my installation. Thanks again! |
Just for the record:
on my installation the corresponding file is called
/usr/share/lighttpd/create-mime.assign.pl
so that it was not loaded by the configuration that is installed… I guess this depends on the version of the system or lighttpd...
… @joxda <https://github.com/joxda> the CSS mime type is already listed in /usr/share/lighttpd/create-mime.conf.pl so I think that should take care of it.
#!/usr/bin/perl -w
# Based on create-mime.assign.pl in debian lighttpd (1.4.x) package
# Creates an example mime.conf from /etc/mime.types
use strict;
# text/* subtypes to serve as "text/...; charset=utf-8"
# text/html IS NOT INCLUDED: html has its own method for defining charset
# (<meta>), but the standards specify that content-type in HTTP wins over
# the setting in the html document.
# text/markdown doesn't have an official default charset, but requires
# one being specified - it seems reasonable to hardcode it to UTF-8
my %text_utf8 = map { $_ => 1 } qw(
css
csv
markdown
plain
x-bibtex
x-boo
x-c++hdr
x-c++src
x-chdr
x-csh
x-csrc
x-dsrc
x-diff
x-haskell
x-java
x-lilypond
x-literate-haskell
x-makefile
x-moc
x-pascal
x-perl
x-python
x-scala
x-sh
x-tcl
x-tex
);
# map extension to hash which maps types to the type they should be replaced with
my %manual_conflicts_resolve = (
'.ra' => {
'audio/x-pn-realaudio' => 'audio/x-realaudio',
},
# use font media types from iana registry
'.otf' => {
'application/font-sfnt' => 'font/ttf',
'font/sfnt' => 'font/ttf',
'font/ttf' => 'font/ttf',
},
'.ttf' => {
'application/font-sfnt' => 'font/ttf',
'font/otf' => 'font/ttf',
'font/sfnt' => 'font/ttf',
},
'.woff' => {
'application/font-woff' => 'font/woff',
},
# end of fonts
'.asn' => {
'chemical/x-ncbi-asn1-spec' => 'application/octet-stream',
},
'.ent' => {
'chemical/x-ncbi-asn1-ascii' => 'application/octet-stream',
},
);
open MIMETYPES, "/etc/mime.types" or die "Can't open /etc/mime.types: $!";
my %extensions;
sub set {
my ($extension, $mimetype) = @_;
$extensions{$extension} = $mimetype;
}
sub add {
my ($extension, $mimetype) = @_;
my $have = $extensions{$extension};
my $r = $manual_conflicts_resolve{$extension};
# update @_ too for calls to set
$_[1] = $mimetype = $r->{$mimetype} if $r && $r->{$mimetype};
# mime.types can have same extension for different mime types
if ($have) {
# application/octet-stream means we couldn't resolve another conflict
return if $have eq $mimetype || $have eq 'application/octet-stream';
my ($have_type, $have_subtype) = split /\//, $have, 2;
my ($type, $subtype) = split /\//, $mimetype, 2;
my $have_x = ($have_type =~ /^x-/ || $have_subtype =~ /^x-/);
my $x = ($type =~ /^x-/ || $subtype =~ /^x-/);
# entries without x- prefix in type/subtype win:
if ($have_x && !$x) {
return set @_; # overwrite
} elsif ($x && !$have_x) {
return; # ignore
}
# text/ wins over application/ for same subtype
if ($subtype eq $have_subtype) {
if ($type eq "text" && $have_type eq "application") {
return set @_; # overwrite
} elsif ($have_type eq "text" && $type eq "application") {
return; # ignore
}
}
print STDERR "Duplicate mimetype: '${extension}' => '${mimetype}' (already have '${have}'), merging to 'application/octet-stream'\n";
set ($extension, 'application/octet-stream');
} else {
set @_;
}
}
sub print_type {
my ($extension, $mimetype) = @_;
if ($mimetype =~ /^text\/(.*)$/) {
$mimetype .= "; charset=utf-8" if $text_utf8{$1};
}
print "\t\"${extension}\" => \"${mimetype}\",\n";
}
while (<MIMETYPES>) {
chomp;
s/\#.*//;
next if /^\w*$/;
if (/^([a-z0-9\/+-.]+)\s+((?:[a-z0-9.+-]+[ ]?)+)$/i) {
my $mimetype = $1;
my @extensions = split / /, $2;
foreach my $ext ***@***.***) {
add(".${ext}", $mimetype);
}
}
}
# missing in /etc/mime.types;
# from http://www.iana.org/assignments/media-types/media-types.xhtml
add(".dtd", "application/xml-dtd");
# other useful mappings
my %useful = (
".tar.gz" => "application/x-gtar-compressed",
".gz" => "application/x-gzip",
".tbz" => "application/x-gtar-compressed",
".tar.bz2" => "application/x-gtar-compressed",
".bz2" => "application/x-bzip",
".log" => "text/plain",
".conf" => "text/plain",
".spec" => "text/plain",
"README" => "text/plain",
"Makefile" => "text/x-makefile",
);
while (my ($ext, $mimetype) = each %useful) {
add($ext, $mimetype) unless $extensions{$ext};
}
print <<EOF;
# created by create-mime.conf.pl
#######################################################################
##
## MimeType handling
## -------------------
##
## https://redmine.lighttpd.net/projects/lighttpd/wiki/Mimetype_assignDetails
##
## mimetype.xattr-name
## Set the extended file attribute name used to obtain mime type
## (must also set mimetype.use-xattr = "enable")
##
## Default value is "Content-Type"
##
## freedesktop.org Shared MIME-info Database specification suggests
## user-defined value ("user.mime_type") as name for extended file attribute
#mimetype.xattr-name = "user.mime_type"
##
## Use extended attribute named in mimetype.xattr-name (default "Content-Type")
## to obtain mime type if possible
##
## Disabled by default
##
#mimetype.use-xattr = "enable"
##
## mimetype ("Content-Type" HTTP header) mapping for static file handling
##
## The first matching suffix is used. If no mapping is found
## 'application/octet-stream' is used, and caching (etag/last-modified handling)
## is disabled to prevent clients from caching "unknown" mime types.
##
## Therefore the last mapping is:
## "" => "application/octet-stream"
## This matches all extensions and acts as default mime type, and enables
## caching for those.
mimetype.assign = (
EOF
# sort "x-" and "vnd." prefixed names after everything else
sub mimecmpvalue {
my ($mimetype) = @_;
$mimetype =~ s/(^|\/)(x-|vnd\.)/~$1$2/g;
return $mimetype;
}
sub countdots {
my ($s) = @_;
return scalar(() = $s =~ /\./g);
}
# the first matching suffix wins, so we have to sort by "length"
# as all extensions start with "." we use the number of "."s as length
# the exceptions are "README" and "Makefile" which are assumed not to conflict
# (i.e. are not a suffix of any other extension)
for my $ext (sort { countdots($b) <=> countdots($a) || mimecmpvalue($extensions{$a}) cmp mimecmpvalue($extensions{$b}) || $a cmp $b } keys(%extensions)) {
print_type($ext, $extensions{$ext});
}
print <<EOF;
# enable caching for unknown mime types:
"" => "application/octet-stream"
)
EOF
The CSS files are recognized properly on Chrome.
<https://user-images.githubusercontent.com/3053094/91485588-edf4c500-e85f-11ea-895c-3979a8ab5fbb.png>
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub <#238 (comment)>, or unsubscribe <https://github.com/notifications/unsubscribe-auth/ACFUSMRHBFGQ2J7S34E3CHLSC2XGNANCNFSM4QIE4W2A>.
|
Fixes lighttpd.conf so that the server transmits the MIME type of the css files correctly.
Some browsers will otherwise not load the css files and the webpage will not be displayed correctly.