ทรัพยากรทุกอย่างที่ใช้บนอินเทอร์เน็ตมีประเภทสื่อหรือที่เรียกว่าประเภท MIME ซึ่งย่อมาจาก Multipurpose Internet Mail Extension ข้อมูลนี้จำเป็นสำหรับการทำธุรกรรมระหว่างเซิร์ฟเวอร์และไคลเอนต์
เบราว์เซอร์จำเป็นต้องทราบประเภทสื่อของทรัพยากรที่ส่งไปเพื่อให้สามารถจัดการได้อย่างถูกต้อง
เช่นเดียวกับเซิร์ฟเวอร์ จำเป็นต้องทราบประเภทของทรัพยากรที่ส่งไปเพื่อการแยกวิเคราะห์และประมวลผลที่แม่นยำ
ประเภทเนื้อหาประกาศที่ไหน
ประเภทสื่อของทรัพยากรใด ๆ ถูกประกาศใน Content-Type
คุณสมบัติของส่วนหัวคำขอ (บนไคลเอนต์ เมื่อส่งคำขอไปยังเซิร์ฟเวอร์) หรือในส่วนหัวการตอบกลับ (บนเซิร์ฟเวอร์ เมื่อส่งการตอบกลับ)
หากไม่มีการประกาศประเภทเนื้อหาของทรัพยากรอย่างชัดเจน ไคลเอ็นต์อาจพยายามตรวจหาประเภทโดยอัตโนมัติ แต่ผลลัพธ์อาจไม่ถูกต้อง ด้วยเหตุนี้จึงเป็นสิ่งสำคัญที่จะต้องประกาศอย่างชัดเจน
ประเภทสื่อ
ประเภทสื่อมีอยู่ในรูปแบบต่างๆ แบ่งออกเป็นกลุ่มต่างๆ:
- แอพพลิเคชั่น
- เสียง
- แบบอักษร
- ตัวอย่าง
- ภาพ
- ข้อความ
- รุ่น
- หลายส่วน
- ข้อความ
- และวิดีโอ
หมวดหมู่เหล่านี้ยังมีประเภทของพวกเขา ตัวอย่างเช่น application/json
เป็นประเภทภายใต้ application
และ text/html
เป็นประเภทภายใต้ text
.
คุณสามารถค้นหารายการประเภทสื่อทั้งหมดได้ในประเภทสื่อ IANA (เนื้อหาที่ประสานองค์ประกอบสำคัญบางอย่างบนอินเทอร์เน็ต)
ทุกประเภทเหล่านี้ครอบคลุมประเภทข้อมูลต่างๆ เช่น ข้อความ เสียง รูปภาพ HTML และอื่นๆ อีกมากมายที่ใช้บนอินเทอร์เน็ต
เบราว์เซอร์จำเป็นต้องทราบประเภทสื่อของทรัพยากร
ดังที่ได้กล่าวไว้ข้างต้น เบราว์เซอร์จำเป็นต้องรู้ว่าได้รับเนื้อหาประเภทใด นี่คือตัวอย่างที่แสดงให้เห็นว่า
รหัสต่อไปนี้เป็นเซิร์ฟเวอร์โหนดที่ให้บริการไฟล์ 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..");
ไม่ต้องกังวลเกี่ยวกับลักษณะเฉพาะของรหัส สิ่งที่คุณกังวลคือ index.htm
ไฟล์ที่เราให้บริการและ Content-Type
คือ text/css
.
นี่คือเนื้อหาของ index.html
:
<h1>Homepage</h1>
แน่นอน เอกสาร HTML ต่างจากไฟล์ CSS นี่คือผลลัพธ์ใน localhost:5000
เมื่อเซิร์ฟเวอร์เริ่มทำงาน:
คุณยังยืนยันคำตอบที่ได้รับได้โดยตรวจสอบส่วนหัวในแท็บเครือข่ายของ DevTools
นี่คือผลลัพธ์ในเบราว์เซอร์ Chrome:
เบราว์เซอร์ได้รับเนื้อหาเป็นประเภท CSS ดังนั้นจึงพยายามถือว่าเป็น CSS
นอกจากนี้ โปรดทราบว่าความรู้อย่างครบถ้วนเกี่ยวกับประเภทของเนื้อหาที่ได้รับจากเบราว์เซอร์ยังช่วยลดช่องโหว่ด้านความปลอดภัย เนื่องจากเบราว์เซอร์รู้มาตรฐานความปลอดภัยสำหรับข้อมูลนั้น
เมื่อคุณเข้าใจแนวคิดของประเภท MIME และความสำคัญแล้ว ไปที่ JSON กัน
ประเภทเนื้อหาที่ถูกต้องสำหรับ JSON
เบราว์เซอร์ต้องตีความ JSON อย่างถูกต้องจึงจะใช้งานได้อย่างเหมาะสม text/plain
โดยทั่วไปใช้สำหรับ JSON แต่ตาม IANA ประเภท MIME อย่างเป็นทางการสำหรับ JSON คือ application/json
.
ซึ่งหมายความว่าเมื่อคุณส่ง JSON ไปยังเซิร์ฟเวอร์หรือรับ JSON จากเซิร์ฟเวอร์ คุณควรประกาศ Content-Type
เสมอ ของส่วนหัวเป็น application/json
เนื่องจากเป็นมาตรฐานที่ลูกค้าและเซิร์ฟเวอร์เข้าใจ
บทสรุป
ตามที่ระบุไว้ข้างต้น เซิร์ฟเวอร์ (เช่นเดียวกับเบราว์เซอร์) จำเป็นต้องทราบประเภทของข้อมูลที่ส่งไปยังเซิร์ฟเวอร์ เช่น ในคำขอ POST นั่นเป็นเหตุผล forms
โดยไฟล์มักจะมี enctype
แอตทริบิวต์ที่มีค่า multipart/form-data
.
หากไม่มีการเข้ารหัสคำขอด้วยวิธีนี้ คำขอ POST จะไม่ทำงาน นอกจากนี้ เมื่อเซิร์ฟเวอร์ทราบประเภทข้อมูลที่ได้รับ เซิร์ฟเวอร์จะทราบวิธีแยกวิเคราะห์ข้อมูลที่เข้ารหัส
ในบทความนี้ เรามาดูกันว่า MIME คืออะไรและมีวัตถุประสงค์อะไร นอกจากนี้เรายังดูประเภทเนื้อหาอย่างเป็นทางการสำหรับ JSON ฉันหวังว่าคุณจะรู้ว่าเหตุใดการประกาศประเภททรัพยากรเมื่อใช้บนอินเทอร์เน็ตจึงสำคัญ