• Trang chủ
  • Bài viết
    CodeSchool - Make coding great againCodeSchool - Make coding great again
    • Trang chủ
    • Bài viết

      Web nền tảng

      • Home
      • Blog
      • Web nền tảng
      • Giải thích giao thức HTTP là gì cho người mới học

      Giải thích giao thức HTTP là gì cho người mới học

      • Date 11/06/2020

      Ý nghĩa cái tên HTTP

      HTTP là viết tắt của HyperText Transfer Protocol — Giao thức truyền tải siêu văn bản.

      HyperText là gì? Theo định nghĩa của tổ chức W3C, HyperText (Siêu văn bản) là loại văn bản có liên kết tới những văn bản khác. Thí dụ chúng ta mở Notepad ra gõ gõ cái gì đó, nội dung ấy gọi là văn bản (text), nhưng nó không có liên kết tới cái gì hết. Rồi bây giờ chúng ta thử vào một trang web bất kỳ, trên đó cũng có text để chúng ta đọc nội dung, đồng thời còn có những dòng text đặc biệt (gọi là cái link) cho phép chúng ta nhấp chuột vào và mở ra một trang web khác.

      Protocol là gì? Protocol được dịch là “giao thức”, tức là “cách thức để giao tiếp”. Chúng ta xem phim hành động hay có một cảnh là hai đặc vụ xa lạ gặp nhau, mỗi người cầm một nửa tờ tiền ghép lại nếu trùng khớp thì họ mới tin rằng đối phương là người mình đã hẹn gặp. Hoặc trong phim Mission Impossile: Ghost Protocol có cảnh nhân vật chính (Tom Cruise) vào tiệm bán đĩa nhạc, anh Tom nói chuyện vài ba câu với cô chủ tiệm, nếu những câu nói đó đúng với những gì tổ chức đã quy định, thì cô chủ tiệm mới công nhận anh Tom là người phe mình. Như vậy chúng ta thấy rằng, protocol đòi hỏi cả 2 phía đều phải biết những quy tắc của protocol đó, cả 2 phía đều phải tuân thủ: làm những gì, theo thứ tự nào, thông điệp được gửi đi phải có định dạng như thế nào: dòng đầu tiên viết cái gì, dòng tiếp theo viết cái gì v.v.

      Tóm lại, HTTP là một bộ quy tắc, nó đưa ra những quy định cho việc truyền tải văn bản, từ việc hai “đầu cầu” kết nối với nhau như thế nào, cho đến việc văn bản gửi đi được đóng gói như thế nào, văn bản hồi đáp có dạng ra sao… Phần mềm nào tuyên bố “Tui hỗ trợ giao thức HTTP” nghĩa là nó vận hành theo quy tắc do HTTP đề ra, trình duyệt web (web browser) là một trong những phần mềm như thế!

      Các đặc trưng của HTTP

      Cơ chế Request – Response

      Tuy thường được gọi là cơ chế Client–Server nhưng gọi Request–Response thì đúng hơn. Khi hai “đầu cầu” muốn giao tiếp với nhau, phải có một bên chủ động bắt chuyện trước, tức là tạo kết nối (connection), rồi gửi đi một Request. Bên kia nhận được Request rồi sẽ tiến hành xử lý thông tin và trả về một Response. Khi Response được nhận ở bên này thì connection lập tức bị ngắt. Quá trình giao tiếp cứ lặp lại như thế: tạo connection → gửi Request → gửi Response → đóng connection.

      HTTP là connectionless (kết nối không liên tục)

      “Connectionless” không được dịch là “không có kết nối”, mà phải hiểu là “kết nối không liên tục” (đây là nỗi khổ của người dạy tiếng Anh chuyên ngành ở trường mà không chuyên IT). Khi một HTTP Request được đáp ứng bằng một Response thì connection bị đóng ngay. Thử so sánh với giao thức khác ví dụ như FTP, connection được bảo trì cho đến khi nó bị người dùng chủ động đóng, hoặc “rỗi việc” quá lâu (thuật ngữ gọi là timed out). Trong khi connection đang còn mở, người dùng có thể di chuyển giữa các thư mục. Khi người dùng phát lệnh upload file hoặc tạo thư mục mới, FTP Server biết rõ người dùng đang đứng tại thư mục cha nào, nhờ đó nó có thể upload file hoặc tạo thư mục mới một cách chính xác.

      HTTP connection không có được trí nhớ tốt như thế, điều này giúp giảm gánh nặng ở server, nhờ vậy mà server có thể xử lý được nhiều Request từ nhiều client cùng một lúc mà không phải tốn bộ nhớ để lưu lại thông tin của từng connection.

      HTTP là stateless

      State là một thuật ngữ lâu đời dùng để chỉ trạng thái của một cỗ máy hoặc một chương trình đang hoạt động. Dữ liệu trên RAM của máy tính chúng ta có thể được coi là state, hễ tắt máy là state bị xóa hết. Phần mềm FTP Server ở ví dụ kể trên cũng có state trong đó lưu lại vị trí thư mục mà người dùng đã nhảy vào, state này sẽ bị xóa khi FTP connection bị đóng, chừng nào người dùng còn thao tác và giữ cho connection còn mở thì chừng đó state này vẫn tồn tại.

      Chúng ta đã biết connection của HTTP mở–đóng rất chóng vánh nên hệ quả tất yếu là ở HTTP Server không có lưu state nào cho từng connection cả (stateless). Khi Client gửi cái request thứ 99 đến server thì HTTP không thể cho Server biết được cái request thứ 98 trở về trước đã có chuyện gì xảy ra. Tuy nhiên đây là một nhu cầu thực tế, Server cần “nhớ mặt” Client để biết người dùng nào đã đăng nhập rồi. Việc này phải do phía Server tự lo liệu, không phải là chức năng có trong HTTP.

      HTTP không mã hóa dữ liệu trên đường truyền

      HTTP không có quy định nào cho việc mã hóa (encrypt) thông tin trong Request và Response. Một kẻ thứ 3 dùng phần mềm bắt gói tin trong network hoàn toàn có thể đọc được nội dung trong Request và Response giữa Client và Server. Nếu muốn, phần mềm ở phía Client và ở phía Server phải tự mã hóa thông tin trước khi đóng gói vào Request và Response. Tuy nhiên điều này dẫn đến một vấn đề: khi bạn đóng vai một Client giao tiếp với một Server thì không có cách nào đảm bảo rằng Server ấy có mã hóa hay không, nếu có thì nó dùng thuật toán mã hóa nào, lỡ Server dùng thuật toán mà Client không hỗ trợ thì sao v.v.

      Để giải quyết vấn đề bảo mật dữ liệu mà HTTP còn bỏ ngõ, giao thức HTTPS đã ra đời, kế thừa những đặc tính của HTTP, ngoài ra còn có những quy định về cách mã hóa Request và Response.

      Facebook Comments

      Tag:http

      • Share:
      author avatar
      CodeSchool trainer

      Previous post

      Lập trình web là gì? Định nghĩa Front-end và Back-end?
      11/06/2020

      Next post

      HTML là gì? Ngôn ngữ nào thay thế cho HTML?
      11/06/2020

      You may also like

      Phân biệt kỹ thuật routing tại client-side và server-side
      11 July, 2020
      Các component ráp lại với nhau
      Kiến trúc web app dựa trên component
      1 July, 2020

      Tìm kiếm

      Bài viết mới

      Routing với webapp React: Không dùng và có dùng thư viện
      12Jul2020
      Phân biệt kỹ thuật routing tại client-side và server-side
      11Jul2020
      Các thủ thuật với JSX trong React (phần 1)
      02Jul2020

      Giao lưu Facebook

      Facebook Pagelike Widget

      Giáo trình và bài viết được biên soạn và biên dịch bởi CodeSchool VN, bảo lưu mọi quyền.

      • Privacy
      • Terms
      • Sitemap