Computer >> Hướng Dẫn Máy Tính >  >> Kết Nối Mạng >> Internet

Chọn Content-Type Header Đúng Cho JSON Request: Hướng Dẫn Thực Tế

Mọi tài nguyên trên Internet đều có loại phương tiện (media type), còn gọi là MIME type (Multipurpose Internet Mail Extensions). Thông tin này cần thiết cho giao dịch giữa server và client.

Trình duyệt cần biết media type của tài nguyên nhận được để xử lý đúng cách. Server cũng cần biết loại tài nguyên nhận được để parse và xử lý chính xác.

Content-Type Được Khai Báo Ở Đâu?

Media type của tài nguyên được khai báo trong thuộc tính Content-Type của:

  • Request header (phía client, khi gửi request đến server)
  • Response header (phía server, khi gửi phản hồi)

Nếu không khai báo rõ ràng content type, client có thể tự động đoán type, nhưng kết quả có thể không chính xác. Vì vậy nên khai báo tường minh.

Các Loại Media Type

Media type tồn tại dưới nhiều dạng, phân nhóm:

  • application
  • audio
  • font
  • example
  • image
  • message
  • model
  • multipart
  • text
  • video

Mỗi nhóm có các type con. Ví dụ: application/json thuộc nhóm application, text/html thuộc nhóm text.

Danh sách đầy đủ media type tại IANA (tổ chức điều phối các yếu tố then chốt Internet).

Trình Duyệt Cần Biết Media Type Của Tài Nguyên

Như đã nói, trình duyệt cần biết loại nội dung nhận được. Ví dụ minh họa:

Code Node server phục vụ file 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",  // <-- SAI: khai báo CSS nhưng file là HTML
    "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..");

File index.html nội dung:

<h1>Homepage</h1>

Kết quả trên localhost:5000 khi chạy server:

Chọn Content-Type Header Đúng Cho JSON Request: Hướng Dẫn Thực Tế

Kiểm tra header response trong DevTools Network tab:

Chọn Content-Type Header Đúng Cho JSON Request: Hướng Dẫn Thực Tế

Trình duyệt nhận content là CSS → cố gắng xử lý như CSS → hiển thị mã HTML thô thay vì render.

Khai báo đúng type cũng giảm lỗ hổng bảo mật vì trình duyệt biết tiêu chuẩn bảo mật cho loại dữ liệu đó.

Content-Type Đúng Cho JSON

JSON cần được trình duyệt hiểu đúng để dùng đúng. Trước đây thường dùng text/plain cho JSON, nhưng theo IANA, MIME type chính thức cho JSON là application/json.

Điều này nghĩa là: khi gửi JSON đến server hoặc nhận JSON từ server, luôn khai báo Content-Type: application/json trong header - đây là tiêu chuẩn client và server cùng hiểu.

Kết Luận

Như đã nói, server (giống trình duyệt) cần biết loại dữ liệu gửi đến, ví dụ trong POST request. Đó là lý do form upload file thường có thuộc tính enctype="multipart/form-data".

Nếu không encode request đúng cách, POST request sẽ không hoạt động. Khi server biết loại dữ liệu, nó mới biết cách parse dữ liệu đã encode.

Bài viết đã xem: MIME type là gì, mục đích, và content type chính thức cho JSON. Hy vọng bạn hiểu tại sao phải khai báo loại tài nguyên khi dùng trên Internet.