Mọi tài nguyên được sử dụng trên internet đều có một loại phương tiện, còn được gọi là loại MIME, viết tắt của Multipurpose Internet Mail Extension. Thông tin này cần thiết cho các giao dịch giữa máy chủ và máy khách.
Trình duyệt cần biết loại phương tiện của tài nguyên được gửi đến để có thể xử lý chúng đúng cách.
Đối với máy chủ cũng vậy. Nó cần biết loại tài nguyên được gửi đến nó để phân tích cú pháp và xử lý chính xác.
Loại Nội dung được khai báo ở đâu?
Loại phương tiện của bất kỳ tài nguyên nào được khai báo trong Content-Type
thuộc tính của tiêu đề yêu cầu (trên máy khách, khi đưa ra yêu cầu tới máy chủ) hoặc trong tiêu đề phản hồi (trên máy chủ, khi gửi phản hồi).
Nếu không khai báo rõ ràng loại nội dung của tài nguyên, máy khách có thể cố gắng tự động phát hiện loại, nhưng kết quả có thể không chính xác. Đây là lý do tại sao điều quan trọng là phải khai báo nó một cách rõ ràng.
Loại phương tiện
Các loại phương tiện truyền thông tồn tại dưới nhiều hình thức khác nhau. Chúng được phân loại thành nhiều nhóm khác nhau:
- ứng dụng
- âm thanh
- phông chữ
- ví dụ
- hình ảnh
- tin nhắn
- mô hình
- nhiều phần
- văn bản
- và video
Các danh mục này cũng có các loại của chúng. Ví dụ:application/json
là một loại dưới application
và text/html
là một loại dưới text
.
Bạn có thể tìm thấy danh sách đầy đủ các loại phương tiện trong IANA (cơ quan điều phối một số yếu tố chính trên internet) các loại phương tiện.
Tất cả các loại này bao gồm các loại dữ liệu khác nhau như văn bản, âm thanh, hình ảnh, HTML và nhiều loại khác được sử dụng trên internet.
Trình duyệt cần biết loại phương tiện của tài nguyên
Như tôi đã đề cập ở trên, trình duyệt cần biết loại nội dung mà nó nhận được. Đây là một ví dụ để minh họa điều đó.
Mã sau là máy chủ Node phục vụ tệp HTML:
const http = require("http");
const fs = require("fs");
const path = require("path");
const server = http.createServer(function (req, res) {
const filePath = path.join(__dirname, "index.html");
var stat = fs.statSync(filePath);
res.writeHead(200, {
"Content-Type": "text/css",
"Content-Length": stat.size,
});
const readStream = fs.createReadStream(filePath);
readStream.pipe(res);
});
server.listen(5000);
console.log("Node.js web server at port 5000 is running..");
Đừng lo lắng về các chi tiết cụ thể của mã. Tất cả những gì bạn quan tâm là index.htm
tệp chúng tôi đang cung cấp và Content-Type
là text/css
.
Đây là nội dung của index.html
:
<h1>Homepage</h1>
Tất nhiên, một tài liệu HTML khác với một tệp CSS. Đây là kết quả trên localhost:5000
khi máy chủ được khởi động:
Bạn cũng có thể xác nhận phản hồi nhận được bằng cách kiểm tra các tiêu đề trong tab mạng của DevTools.
Đây là kết quả trên trình duyệt Chrome:
Do đó, trình duyệt nhận nội dung dưới dạng một loại CSS, do đó, nó đã thử coi nó là CSS.
Ngoài ra, hãy lưu ý rằng kiến thức đầy đủ về loại nội dung mà trình duyệt nhận được cũng làm giảm các lỗ hổng bảo mật vì trình duyệt biết các tiêu chuẩn bảo mật để áp dụng cho dữ liệu đó.
Bây giờ bạn đã hiểu khái niệm về các loại MIME và tầm quan trọng của chúng, hãy chuyển sang JSON.
Loại Nội dung Chính xác cho JSON
JSON phải được trình duyệt diễn giải chính xác để được sử dụng một cách thích hợp. text/plain
thường được sử dụng cho JSON, nhưng theo IANA, kiểu MIME chính thức cho JSON là application/json
.
Điều này có nghĩa là khi bạn đang gửi JSON đến máy chủ hoặc nhận JSON từ máy chủ, bạn phải luôn khai báo Content-Type
của tiêu đề dưới dạng application/json
vì đây là tiêu chuẩn mà máy khách và máy chủ hiểu.
Kết luận
Như đã nêu ở trên, máy chủ (cũng giống như trình duyệt) cần biết loại dữ liệu được gửi đến nó, chẳng hạn như trong một yêu cầu POST. Đó là lý do forms
với các tệp thường chứa enctype
thuộc tính có giá trị multipart/form-data
.
Nếu không mã hóa yêu cầu theo cách này, yêu cầu ĐĂNG sẽ không hoạt động. Ngoài ra, một khi máy chủ biết loại dữ liệu mà nó đã nhận, sau đó nó sẽ biết cách phân tích dữ liệu được mã hóa.
Trong bài viết này, chúng tôi đã xem xét các loại MIME là gì và mục đích của chúng. Ngoài ra, chúng tôi đã xem xét loại nội dung chính thức cho JSON. Tôi hy vọng bây giờ bạn biết lý do tại sao việc khai báo các loại tài nguyên khi được sử dụng trên internet lại quan trọng.