-----
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.
Đọc về HTTP trên wiki: https://vi.wikipedia.org/wiki/Hypertext_Transfer_Protocol,
và https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol
Và đọc thêm tại đây: http://aita.gov.vn/tin-tuc/1352/tieu-chuan-http-giao-thuc-truyen-sieu-van-ban
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
|
Đọc thêm về HTTP 2.x tại đây: http://quantrimang.com/nhung-dieu-ban-nen-biet-ve-giao-thuc-http-2-116090
và đây nữa http://www.kimkha.com/2015/04/http2-la-gi.html)
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.
Đọc về HTTP request và HTTP response: https://www.stdio.vn/articles/read/202/http-request-va-http-response
Đâ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]
-----------