Crates.io | mime_classifier |
lib.rs | mime_classifier |
version | 0.0.1 |
source | src |
created_at | 2022-04-11 09:33:16.718202 |
updated_at | 2022-04-11 09:33:16.718202 |
description | Servo's MIME Classifier / Media Type sniffer as a Rust library |
homepage | |
repository | https://github.com/demurgos/mime_classifier |
max_upload_size | |
id | 565547 |
size | 80,907 |
This crate exposes the MIME Classifier from the Servo web engine as a standalone library.
It implements the WHATWG MIME Sniffing
standard to guess the Media Type
(also known as MIME type) of a resource from its content. It enables browsers
to properly interpret a server response even when the Content-Type
header is
missing or invalid.
The current version of the library was extracted at the date 2022-04-11 from
the commit 8d684eff7d6f8815422cb4c30b43df0035c5069a
.
If you are a member of the Servo and wish to maintain this library yourself,
I'd be glad to transfer ownership of the crate: please open a GitHub issue or
send me an email.
use mime_classifier::{ApacheBugFlag, LoadContext, MimeClassifier, NoSniffFlag};
pub fn main() {
// Create a classifier using default configuration
let classifier = MimeClassifier::new();
// Select the context, this is used to help the classifier based on where
// the resource is loaded from. `Browsing` corresponds to simply typing
// the URL in the address bar.
let context = LoadContext::Browsing;
// Flag indicating that sniffing should be avoided. This usually corresponds
// to the server sending the header value `X-Content-Type-Options = "nosniff"`
// but may also be applied automatically by the browser (e.g. `fetch` API)
let no_sniff_flag = NoSniffFlag::Off;
// Enable workaround for an Apache bug when server incorrectly sends a
// `text/plain` or similar `Content-Type`.
// See <https://mimesniff.spec.whatwg.org/#ref-for-check-for-apache-bug-flag>
let apache_bug_flag = ApacheBugFlag::Off;
// `Content-Type` set by the server, if any
let supplied_type: Option<mime::Mime> = None;
// Response body to classify
let body: &[u8] = include_bytes!("../servo_logo.png");
let computed_type = classifier.classify(context, no_sniff_flag, apache_bug_flag, &supplied_type, body);
assert_eq!(computed_type, mime::IMAGE_PNG);
}
Code in this crate retains its original Mozilla Public License, version 2.0 (MPL-2.0) license from the Servo project.