ในโลกของการพัฒนาเว็บสมัยใหม่ โดยเฉพาะอย่างยิ่งเมื่อเรากำลังสร้างระบบที่ใช้สถาปัตยกรรมแบบ Microservices หรือ Single Page Applications (SPA) การสื่อสารระหว่างไคลเอนต์ (Client เช่น Web Browser, React App, Mobile App) และเซิร์ฟเวอร์ (Server ที่รัน PHP) ไม่ได้มีเพียงแค่การส่งข้อมูลเนื้อหา (Body Content) เท่านั้น แต่ยังรวมถึงชุดข้อมูลเมตาที่เรียกว่า HTTP Headers ด้วย
💡 HTTP Headers คืออะไร?
HTTP Header คือคู่ของ Key-Value Pair ที่ถูกส่งไปพร้อมกับการตอบกลับ (Response) ของเซิร์ฟเวอร์ มันทำหน้าที่เป็น “ป้ายบอกทาง” หรือ “คำสั่ง” ให้กับไคลเอนต์รู้ว่า เนื้อหาที่กำลังจะได้รับมีรูปแบบอย่างไร ควรจัดการอย่างไร และมีการกำหนดข้อจำกัดการเข้าถึงใดบ้าง
💻 PHP จัดการ Headers อย่างไร?
PHP ใช้ฟังก์ชัน header() ในการส่ง HTTP Header เหล่านี้ออกไปยังไคลเอนต์โดยตรง การทำงานของมันจะเกิดขึ้นก่อนที่ส่วนเนื้อหา (Body) ของหน้าเว็บจะถูก Stream ออกไป ดังนั้นจึงเป็นสิ่งสำคัญอย่างยิ่งที่เราต้องเรียกใช้ฟังก์ชันนี้ในจุดเริ่มต้นของการประมวลผลเสมอ
🌐 ความสำคัญของ Headers ที่ถูกต้อง
- Content-Type
กำหนดว่า Body Content คืออะไร เช่น หากเราส่งข้อมูล JSON ไปให้ไคลเอนต์ต้องระบุว่าเป็นapplication/jsonมิฉะนั้นเบราว์เซอร์อาจตีความผิดพลาดเป็น HTML ทำให้เกิดปัญหาในการอ่านข้อมูล (Parsing) - CORS (Cross-Origin Resource Sharing)
ในโลกของ API, Frontend มักจะรันอยู่บนโดเมนหนึ่ง แต่ต้องการเรียกข้อมูลจาก Backend PHP ที่อยู่คนละโดเมน การตั้งค่า CORS Headers (โดยเฉพาะAccess-Control-Allow-Origin) เป็นสิ่งจำเป็นเพื่อให้เบราว์เซอร์อนุญาตให้เกิดการสื่อสารข้ามต้นกำเนิดได้ - Caching & Security
เช่น Header อย่างCache-Controlใช้กำหนดว่าไคลเอนต์หรือ Proxy ควรเก็บข้อมูลชิ้นนี้ไว้นานแค่ไหน หรือ Headers ความปลอดภัยอย่างX-Content-Type-Optionsช่วยป้องกันการโจมตีประเภทต่างๆ
ตัวอย่างการใช้งานและรูปแบบโค้ด (Code Examples)
เราจะยกตัวอย่างสถานการณ์ที่พบบ่อยที่สุด คือการสร้าง API Endpoint ที่ส่งข้อมูลในรูปแบบ JSON ซึ่งเป็น Best Practice สำหรับ Backend ในยุคปัจจุบัน
🎯 ตัวอย่างที่ 1: การตอบกลับด้วย JSON และจัดการ CORS
โค้ดนี้แสดงถึงการตั้งค่า HTTP Headers อย่างครบถ้วน ทั้ง Content-Type, Status Code, และ CORS เพื่อให้ API สามารถถูกเรียกใช้ได้อย่างถูกต้องจากโดเมนภายนอก
PHP
<?php
// 1. ตั้งค่า Headers สำหรับการตอบกลับ API
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Origin: *"); // อนุญาตให้ทุกโดเมนเรียกใช้ API
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With");
// กำหนด HTTP Response Status Code เป็น 200 OK
http_response_code(200);
// 2. จัดเตรียมข้อมูลที่ต้องการส่งออก
$data = [
'status' => 'success',
'message' => 'User data retrieved successfully.',
'user' => [
'id' => 1,
'name' => 'Expert PHP Dev'
]
];
// 3. ส่ง JSON Data ออกไป และปิดสคริปต์ทันที
echo json_encode($data);
exit; // สำคัญมาก: ต้อง exit เสมอเมื่อส่ง Response เสร็จแล้ว
?>