Chào tất cả các bạn, nghe mấy cái header hay footer chắc các bạn cũng hình dung ra được ít nhiều mấy cái hay gọi là “đầu” với “đuôi” gì gì đó. Thì HTTP Header cũng tương tự như vậy. Bạn có thể xem HTTP Header là phần đầu của HTTP.
Vậy HTTP là cái gì? HTTP là viết tắt của cụm HyperText Transfer Protocol có nghĩa là một giao thức truyền tải siêu văn bản. Tương tự như vậy HTTPS là viết tắt của cụm HyperText Transfer Protocol Secure, tức là nó cũng như HTTP nhưng bảo mật hơn. Bởi HTTPS là bao gồm kết hợp giữa HTTP cùng với một giao thức bảo mật là SSL hoặc TLS. Trong thời đại thông tin ngày nay, giao thức HTTP/HTTPS trở nên phổ biến và cực kỳ quan trọng, bởi nó làm thay đổi bộ mặt của Internet. Nếu các bạn không tin, thì hãy cứ thử nghĩ lại những lần bạn tìm kiếm thứ gì đó trên mạng, lên YouTube để xem Video hay vào Facebook để nhắn tin với bạn bè thì các bạn hầu hết đang kết nối qua giao thức http/https. Giao thức HTTP/HTTPS giúp truyền tải siêu văn bản (là loại văn bản tích hợp nhiều dạng dữ liệu khác nhau như văn bản hình ảnh, âm thanh, video,… hoặc các siêu liên kết tới các văn bản khác.) Do đó nó hoạt động theo mô hình Server/Client. Server là các máy chủ lưu trữ hay Web-server chứa đựng siêu văn bản và phục vụ các Request (yêu cầu) từ Client (trình khách). Tất nhiên là có sự trao đổi thông tin qua lại giữa Server/Client để chúng có thể giao tiếp và server có thể phục vụ Client, HTTP sử dụng Port 80 và HTTPS sử dụng Port 443.
Vì thế nên HTTP Header như một lá thư ngắn chứa các thông tin cần thiết để client gửi đến server và nhận lại phản hồi từ server. Để tiếp tục nói thêm thì mình xin lấy một chút thông tin từ HTTP Header, mời bạn xem hình dưới:
Nhìn vào hình bên trên bạn sẽ thấy có phần Request Headers và cả Response Headers.
Request Headers là phần HTTP/HTTPS header từ Client gửi đến Server.
Response Headers là phần HTTP/HTTPS header từ Server gửi đến Client
Trong trường hợp này mình sử dụng trình duyệt Chrome để truy cập vào trang VnGeek.com. Như vậy trình duyệt Chrome đóng vai trò là Client còn máy chủ của trang VnGeek.com sẽ là server.
Các bạn sẽ thấy các thông tin như trong hình như:
Request Headers: Accept, Accept-Encoding, Accept-Language, Cookie, User-Agent
Có nghĩa là trình duyệt sẽ chấp nhận/thu nhận các thông tin khớp với điều kiện mà chính trình duyệt đưa ra, đảm bảo việc giao tiếp với server đúng chuẩn và hiệu quả. Cũng như trong trình chúng ta có thể thấy trình duyệt có cài đặt Alexa Toolbar, kèm theo Cookie và User-Agent (thông tin hệ điều hành và trình duyệt bạn dùng). Những thông tin này sẽ gửi tới Web-server của địa chỉ trang mà bạn truy cập, cụ thể trong trường hợp này chính là http://vngeek.com.
Chú ý một ý bạn sẽ thấy:
GET http://vngeek.com/
Status: HTTP/1.1 301 Moved Permanently
Ở đây trình duyệt sử dụng phương thức GET đến máy chủ vngeek.com. Và nhận lại ngay một yêu cầu chuyển hướng.
Tuy nhiên server vừa gửi yêu cầu chuyển hướng, vừa cung cấp một số thông tin cho trình duyệt như:
Dựa vào thông tin bạn có thể thấy trang không sử dụng Cache, kết nối dùng Keep-Alive, dạng mã hóa Charset UTF-8 phổ biến, thời gian của máy chủ là ngày 6 tháng 9 năm 2018, 17 giờ 24 phút 31 giây giờ GMT. Sử dụng Web-server Apache phiên bản 2.4.18 trên hệ điều hành Ubuntu.
Cùng lúc đó trình duyệt lại gửi thông tin tới địa chỉ https://vngeek.com:
Dùng phương thức GET đến địa chỉ https://vngeek.com, được trả về với trạng thái HTTP/1.1 200 OK: Tức là request đã được tiếp nhận và xử lý thành công. Thấy chữ OK bạn thấy yên tâm rồi chứ?
Và vì được xử lý thành công nên webserver gửi thêm cho vài thông tin khác:
Bạn có thể thấy có thêm mấy Header code như Link, Expires hay X-TEC (thêm bởi Plugin Event Calendar tạo ra). Mục đích là bổ sung thêm cho chính Plugin khi hoạt động hoặc người dùng nào muốn có thêm thông tin. Ví dụ như Plugin JW-Player trước đây nếu bạn muốn Embed được đoạn mã video để ở đâu cũng có thể xem được phải thêm headers code Access-Control-Allow-Origin với giá trị là * chẳng hạn.
Access-Control-Allow-Origin *
Ở đây, bạn đã hình dung được HTTP Header là gì chưa? Có lẽ mình không cần phải nói thêm. Nếu bạn chưa hiểu thì bạn cứ nghĩ đơn giản là nó là một mớ các thông tin + điều kiện mà server/client gửi, giao tiếp với nhau, dựa vào đó chúng mới cho phép kết nối và tương tác được. Client sẽ nhận được thông tin, dữ liệu đã gửi yêu cầu trước đó từ server, ngược lại server cũng sẽ đảm bảo đáp ứng được nhu cầu cũng như cho phép client truy cập được đến server thông qua những “giao kèo” trước đó.
Có một anh chàng người Việt tên A, viết một lá thư gửi cho chị nhà báo cũng người Việt tên C, nhờ được cung cấp thông tin về tòa soạn và xin việc làm với nội dung:
Gửi chị C.
Tôi tên: A
Nhà: Phố X
Ngôn Ngữ: Tiếng Việt
Muốn có thông tin và về tòa soạn và yêu cầu của tòa soạn, tôi muốn xin việc ở tòa soạn.
Như vậy, sau khi nhận được thư, chị C mới trả lời như sau:
Gửi anh A.
Tôi là C từ tòa soạn Y. Tòa soạn Y cần Nam nhân viên mới, biết máy tính và chụp hình.
Liên hệ số: 1900…, địa chỉ…
Như vậy, anh A đóng vai trò là một client, và chị C là server. Vì anh A nói tiếng Việt, và gửi một lá thư xin việc. Ở đây anh A cung cấp tên, địa chỉ và ngôn ngữ mà anh ấy nói cũng như xin thêm thông tin và yêu cầu của tòa soạn.
Ở vai trò chị C là một server, vì lá thư là tiếng Việt nên chị ấy dễ dàng đọc được cũng như phản hồi lại thông tin cho anh A, cung cấp địa chỉ tòa soạn, số điện thoại cũng như trả lời yêu cầu đó Nam nhân viên, biết máy tính và chụp hình, công việc tiếp theo đó là chờ phản hồi từ anh A.
HTTP Headers tựa như chính những thông tin ban đầu cần thiết mà anh A, chị C cung cấp và giao tiếp với nhau.
Giả sử như nếu có một anh B nào đấy, không phải người Việt, người Ả Rập chẳng hạn. Viết một lá thư nào đó tựa như:
عزيزي س.
اسمي: أ
البيت: شارع X
اللغة: الفيتنامي
للحصول على معلومات حول المكتب ومتطلبات التحرير ، أود التقدم بطلب للحصول على وظيفة في مكتب التحرير.
Thì theo các bạn liệu chị C có phản hồi lại thư của anh B nào đó không?
Chính vì thế, HTTP header khá quan trọng, bạn có thể thay đổi HTTP Header trong nhiều trường hợp như muốn test Website (có tương thích với các thiết bị di dộng hay không), hay bạn là một người lập trình web chẳng hạn, sử dụng các chương trình, ứng dụng trên môi trường web, HTTP Header không thể không bỏ qua. Hoặc đơn giản hơn, chỉ để biết một trang nào đó sử dụng Web-server hay hệ điều hành nào cho máy chủ (nếu họ công khai), ít nhiều cũng thỏa được chút nào tò mò của chúng ta.