HTTP là giao thức truyền tải siêu văn bản được sử dụng trong www dùng để truyền tải dữ liệu giữa Web server đến các trình duyệt Web và ngược lại. Web server ở đây là máy chủ còn trình duyệt web là máy khách.
Có thể hiểu 1 cách đơn giản, khi bạn gõ 1 địa chỉ vào trình duyệt WEB, trình duyệt web sẽ gửi 1 bản tin yêu cầu (request) tới địa chỉ (server) đó qua giao thức http, server sẽ tiếp nhận và trả lời kết quả lại cho trình duyệt WEB
Để liên hệ tới server, chúng ta cần 2 thông tin cơ bản là địa chỉ IP của server và cổng hoạt động.
- Địa chỉ IP là 1 dẫy số khó nhớ, ví dụ IP của blog của mình là 103.82.32.32 nó là 1 còn số khá khó nhớ nên mình đã mua thêm tên miền http://iot47.com/ , khi các bạn gõ tên website này vào, trình duyệt sẽ truy cập tới DNS Server và hỏi xem tên miền này ứng với IP nào, sau khi lấy đc IP trình duyệt sẽ truy cập vào blog của mình bằng IP đó. Các bạn cũng có thể gõ IP trên vào thanh trình duyệt để vào trực tiếp blog của mình luôn. Nhưng mình tắt chế độ này nên các bạn chỉ vô được bằng tên miền thôi
- Cổng (Port), một địa chỉ IP như 1 ngôi nhà lớn vậy, muốn vào nhà phải đi qua cổng, ghi truy cập vào server cũng phải báo cần vào cổng nào (ví dụ iot47.com:80 ). Khi bạn gõ địa chỉ vào trình duyệt web mà không gõ kèm cổng, trình duyệt sẽ mặc định ngầm hiểu đó là cổng 80
Bản tin truy vấn HTTP
Chúng ta sẽ tìm hiểu cụ thể nội dung của truy vấn http
1 request gồm các dòng, mỗi dòng có 2 thành phần là header và value. Đây là ví dụ request của 1 trình duyệt web
Dòng 1 thông tin kiểu truyền dữ liệu (GET/POST), tiếp đến là phiên bản HTTP
Dòng 2 là host cần truy vấn tới
Các dòng dưới là 1 số thông tin của máy khách gửi kèm để server biết rõ hơn về khách của mình (ví thời gian truy cập, máy tính truy cập hãng gì, hệ điều hành gì, xài ngôn ngữ gì, có hỗ trợ cookie không ….v….v…)
Mình sẽ chỉ giới thiệu qua vậy thôi nhé, các bạn muốn tìm hiểu kĩ hơn thì tham khảo thêm tài liệu trên google
Bản tin trả lời
Sau khi nhận được truy vấn, server sẽ phản hồi lại nội dùng phù hợp với truy vấn đó cho khách.
Dòng 1 trả về trạng thại kèm 1 mã lỗi, được phân loại như sau:
- 200 OK: request thành công.
- 202 Accepted: request đã được nhận, nhưng không có kết quả nào trả về, thông báo cho client tiếp tục chờ đợi.
- 204 No Content: request đã được xử lý nhưng không có thành phần nào được trả về.
- 205 Reset: giống như 204 nhưng mã này còn yêu câu client reset lại document view.
- 206 Partial Content: server chỉ gửi về một phần dữ liệu, phụ thuộc vào giá trị range header của client đã gửi.
- 301 Moved Permanently: tài nguyên đã được chuyển hoàn toàn tới địa chỉ Location trong HTTP response.
- 303 See other: tài nguyên đã được chuyển tạm thời tới địa chỉ Location trong HTTP response.
- 304 Not Modified: tài nguyên không thay đổi từ lần cuối client request, nên client có thể sử dụng đã lưu trong cache.
- 400 Bad Request: request không đúng dạng, cú pháp.
- 401 Unauthorized: client chưa xác thực.
- 403 Forbidden: client không có quyền truy cập.
- 404 Not Found: không tìm thấy tài nguyên.
- 405 Method Not Allowed: phương thức không được server hỗ trợ.
- 500 Internal Server Error: có lỗi trong quá trình xử lý của server.
- 501 Not Implemented: server không hỗ trợ chức năng client yêu cầu.
- 503: Service Unavailable: Server bị quá tải, hoặc bị lỗi xử lý.
Phương thức GET và POST
Khi truy vấn lên server, máy khách sẽ phải gửi các thồn tin cần thiết, 2 cách để gửi cơ bản gồm có GET và POST.
- GET request có thể được cached, bookmark và lưu trong lịch sử của trình duyệt.
- GET request bị giới hạn về chiều dài, do chiều dài của URL là có hạn.
- GET request không nên dùng với dữ liệu quan trọng, chỉ dùng để nhận dữ liệu.
Với GET, câu truy vấn sẽ được đính kèm vào đường dẫn của HTTP request. Ví dụ: /?username=”abc”&password=”def”
Ngược lại, với POST thì câu truy vấn sẽ được gửi trong phần message body của HTTP request
- POST không thể, cached, bookmark hay lưu trong lịch sử trình duyệt.
- POST không bị giới hạn về độ dài.
Nói chung, với các dự liệu quan trọng cần bảo mật thì ta xài POST, còn không quan trọng thì xài GET
Ngôn ngữ HTML
Sau khi server phản hồi các header, nó sẽ trả về nội dung html của trang web đó, trình duyệt sẽ phân tích mã html rồi render thành màn hình đồ họa cho người dùng
Để xem mã html của 1 trang web, các bạn ấn Ctrl+U
1 chương trình html cơ bản có dạng như sau
1 2 3 4 5 6 7 8 9 |
<!DOCTYPE html> <html> <head> <title>This is a title</title> </head> <body> <p>Hello world!</p> </body> </html> |
Trên google có rất nhiều blog và tài liệu rồi, các bạn tự tìm hiểu thêm nhé !
DEMO gửi thử truy vấn HTTP bằng tay
Mình đã tạo 1 website giám sát hành trình của xe máy trên trang http://giamsathanhtrinh.iot47.com/
Bây giờ chúng ta thử gửi tín hiệu tọa độ của xem máy lên trang này nhé
Các bạn tải phần mềm Hercules
Vào tab TCP Client, mục Module IP gõ IP của blog mình là 103.82.32.32, cổng 80 và ấn connect
Kết nối đã thành công, giờ hãy gõ request vào, nó có dạng như này:
GET /xuli.php?update=ok&kinhdo=20.995259&vido=105.858414&tocdo=30 HTTP/1.1$0D$0AHost: giamsathanhtrinh.iot47.com$0D$0A$0D$0A
Sau khi ấn Send thì server đã trả về mã 200 tức request thành công và chủ dộng ngắt kết nối do mình không yêu cầu nó giữ kết nối lại. Bây giờ truy cập vào http://giamsathanhtrinh.iot47.com/ để xem tọa độ được cập nhật lên nhé !
Trong bài sau mình sẽ giới thiệu về ngôn ngữ lập trình server PHP và hệ quản trị cơ sỡ dữ liệu MySQL
Cho mình hỏi chút nhé:
(1) Làm thế nào để biết query string để thêm vào get request. Có phải cái này phụ thuộc vào thằng code server không?
(2) Giả sử muốn lấy thời gian trên NTP thì có query hay gì không?
1. phụ thuộc vào client, client muốn cung cấp cho server thông tin gì đó để phục vụ mục đích cần thiết thì cứ việc đưa. ví dụ như thông tin thời gian, địa điểm, tên,id thiết bị, ngôn ngữ … server dựa vào đó để phản hồi lại
2. NTP là 1 giao thức thuộc tầng mạng, còn http thuộc tầng ứng dụng
Hiểu đơn giản thì http là con của IP
IP và NTP là anh em cùng cha khác ông nội