Ngu ngơ học làm web (96) - Giao thức HTTP

Tiếp theo của: Ngu ngơ học làm web (95) - Học PHP bằng tiếng Anh - 3
-----

Phần 96. Giao thức HTTP


Dài dòng một chút.

Khi bấm chuột phải vào một tập tin .html, ví dụ tập tin index.html trong ổ đĩa C:\, rồi chọn Open with, rồi chọn một trình duyệt bất kì. Khi đó, đường dẫn trên trình duyệt sẽ là file:///C:/index.html.
Nghĩa là trình duyệt đã dùng giao thức file để truy cập và lấy về tập tin mã nguồn (index.html), sau đó sẽ phân tích mã nguồn (parse), kết xuất (render) và hiển thị nội dung của trang web.

Tuy nhiên, trình duyệt chỉ có khả năng hiểu và thực thi được mã HTML, CSS và JavaScript. Nếu muốn mở một trang web có phần mở rộng là .php thì không thể mở bằng cách bấm chuột phải, rồi chọn Open with, rồi chọn một trình duyệt được. Mà phải đặt trang web .php trên web server, sau đó tại trình duyệt, sẽ nhập đường dẫn của trang web, ví dụ: http://www.congty.com/index.php, trình duyệt sẽ sử dụng giao thức HTTP để yêu cầu web server gửi trang web về. Nhận được yêu cầu, web server sẽ biên dịch trang index.php và gửi về trình duyệt mã HTML (có thể bao gồm cả CSS hoặc JavaScript) của trang index.

Phần này sẽ tìm hiểu về giao thức HTTP.


HTTP (HyperText Transfer Protocol): giao thức truyền tải siêu văn bản, được web server và web client sử dụng để giao tiếp và truyền dữ liệu với nhau.

Các phiên bản HTTP:

Phiên bản
Đặc điểm
Năm ra đời
HTTP V0.9
Truyền dữ liệu thô
1991
HTTP 1.0
Truyền văn bản phi cấu trúc (text), hình ảnh (image), âm thanh (audio), video, ứng dụng (application)
1996
HTTP 1.1
Nâng cấp của HTTP 1.0, giúp truyền dữ liệu tin cậy
1997
HTTP 2.x
Cải thiện về tốc độ truyền
2015


Phiên bản đang được sử dụng rộng rãi hiện nay (2016) là HTTP 1.1.

Web client giao tiếp và truyền dữ liệu với web server theo mô hình yêu cầu/đáp ứng (request/response).

Đây là một bài giảng trên Coursera: https://www.youtube.com/watch?v=UD12J9cmVNo

Ghi lại một số thông tin,

Giao thức HTTP hoạt động dựa trên bộ giao thức TCP/IP.

Quá trình web client lấy trang web về:

- Phân giải tên miền en.wikipedia.org ra địa chỉ IP

- Thiết lập kết nối TCP tới server

- Gửi HTTP request tới server (yêu cầu một trang web)

- Chờ server đáp ứng lại (response) (gửi về một trang web)

- Phân tích mã nguồn (parse), kết xuất (render) và hiển thị nội dung của trang web.

- Giải phóng các kết nối TCP ở trạng thái idle

Đọc thêm về SPDY.


Đây là một clip giải thích về HTTP request và HTTP response: https://www.youtube.com/watch?v=eesqK59rhGA

Bài viết hay về HTTP:

HTTP request

Ví dụ, khi người dùng sử dụng trình duyệt, nhập vào đường dẫn sau: http://www.nowhere123.com/doc/index.html
và bấm Enter, trình duyệt sẽ tạo một HTTP request như sau:

GET /docs/index.html HTTP/1.1
Host: www.nowhere123.com
Accept: image/gif, image/jpeg, */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
(blank line)

Hàng đầu tiên của HTTP request: “GET /docs/index.html HTTP/1.1” gọi là request line, hàng này có cấu trúc như sau:

request-method-name request-URI HTTP-version

- request-method-name: loại request, ví dụ: GET, POST, HEAD, OPTIONS

- request-URI: tập tin yêu cầu (resource)

- HTTP-version: phiên bản của giao thức HTTP đang dùng (HTTP 1.0 hoặc HTTP 1.1)

HTTP response

Khi server nhận được HTTP request, nó sẽ xử lý theo một trong ba cách sau:

- Thông dịch request vừa nhận được, dựa trên request, tìm kiếm tập tin mà client yêu cầu, gửi tập tin về cho client.

- Thông dịch request vừa nhận được, dựa trên request, thực thi chương trình tại web server, trả kết quả thực thi về cho client.

- Không đáp ứng được request, trả về mã lỗi.

Dưới đây là một HTTP response do server gửi về cho client:

HTTP/1.1 200 OK
Date: Sun, 18 Oct 2009 08:56:53 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Sat, 20 Nov 2004 07:16:26 GMT
ETag: "10000000565a5-2c-3e94b66c2e680"
Accept-Ranges: bytes
Content-Length: 44
Connection: close
Content-Type: text/html
X-Pad: avoid browser bug
  <html><body><h1>It works!</h1></body></html>

Một số mã trả về của HTTP response:

- 1xx: thông tin (information), request đã được chấp nhận, server đang tiếp tục xử lý request.

- 2xx: thành công (success), request đã được chấp nhận, đã được server xử lý thành công.

- 3xx: chuyển hướng (redirection), client cần có thêm các hành động khác để hoàn thành request.

- 4xx: lỗi client (client error), request chứa cú pháp không đúng, hoặc không được thực hiện


- 5xx: lỗi server (server error), server thực thi một request nhưng không thực hiện được.
-----------
Cập nhật [7/2/2018][21/12/2016]
-----------
Xem thêm:
Tổng hợp các bài viết về Ngu ngơ học làm web