Ở bài trước của Series Nhập môn mạng máy tính chúng ta đã tìm hiều về định dạng của các thông điệp HTTP, trong bài này chúng ta sẽ tìm hiểu về Cookies và Cache là gì?
Cookies là gì?
Máy chủ trong giao thức HTTP không quản lý trạng thái của trình duyệt. Điều này giúp đơn giản hóa việc thiết kế máy chủ và cho phép các kỹ sư phát triển các máy chủ Web năng suất cao, có thể xử lý hàng ngàn kết nối TCP cùng lúc. Tuy nhiên, đôi khi các trang web muốn nhận ra người dùng là ai, nhằm kiểm soát việc truy cập trang web của người đó, hoặc có thể cung cấp nội dung cho người dùng như một chức năng liên quan đến định danh người dùng.
Vì mục đích này, giao thức HTTP đặt ra kỹ thuật cookies. Kỹ thuật cookies được định nghĩa trong RFC 2965, nhằm cho phép các trang web quản lý các hoạt động của người dùng trên trang web đó. Ngày nay, hầu hết các trang web thương mại đều sử dụng kỹ thuật cookie.
Như được minh họa trong hình sau đây, kỹ thuật cookie đưa vào bốn thành phần:
- Các dòng mô tả trong thông điệp phản hồi.
- Dòng thông số trong thông điệp yêu cầu.
- Tập tin cookie được giữ tại máy tính của người dùng và được trình duyệt của người dùng quản lý.
- Một cơ sở dữ liệu cookie đặt tại trình phục vụ Web.
Xét một ví dụ ở hình trên để biết cách thức cách hoạt động của cookie như thế nào. Giả sử San luôn truy cập web bằng cách dùng trình duyệt Internet Explorer từ máy tính để bàn ở nhà. San muốn truy cập vào trang Amazon.com lần đầu tiên, và trước đó San cũng đã từng truy cập vào một khác là eBay. Khi thông điệp yêu cầu từ San đến trình chủ Web của Amazon, máy chủ sinh ra một số định danh duy nhất (ID) cho San và ghi vào cơ sở dữ liệu cookie.
Dữ liệu cookie tại cơ sở dữ liệu này có thể truy xuất được qua chỉ mục ID. Sau đó, máy chủ Web của Amazon gửi thông điệp phản hồi đến trình duyệt của San kèm theo dòng mô tả Set-cookie
, dòng này mang trị ID đã sinh ra. Chẳng hạn, dòng mô tả có thế là Set-cookie: 1678
Khi trình duyệt của San nhận được thông điệp phản hồi, nó nhận ra được dòng mô tả Set-cookie:
. Khi đó, trình duyệt sẽ thêm một dòng mới vào tập tin cookie mà nó quản lý. Dòng này có tên của máy chủ Web chứa trang Web Amazon và ID mà Amazon đã cấp phát cho San. Lưu ý rằng tập tin cookie này cũng có một dòng cho trang eBay, vì San đã từng truy cập eBay trước đây.
Khi San tiếp tục duyệt web ở trang Amazon, mỗi lần cô ấy yêu cầu một trang web, trình duyệt sẽ tìm trong tập tin cookie ở máy San, trích ra ID ứng với trang Web này, và đặt dòng thông số Set-cookie:
chứa ID này trong thông điệp yêu cầu. Cụ thể, mỗi thông điệp yêu cầu gửi đến máy chủ Amazon sẽ gồm dòng thông số này: Set-cookie: 1678
Bằng cách này, máy chủ web của Amazon có thể lần theo dấu vết các hành động của San trên trang Amazon. Mặt dù trang web Amazon không biết tên của San, nó biết chính xác những trang nào người dùng có ID 1678 đã từng truy cập, theo thứ tự nào và vào khi nào. Amazon dùng kỹ thuật cookie để cung cấp dịch vụ giỏ hàng (shopping cart). Dịch vụ này cho phép Amazon lưu giữ một danh sách tất cả các sản phẩm mà San muốn mua, để cô ấy có thể trả tiền ở cuối phiên mua bán.
Giả sử San chưa trả tiền và rời khỏi trang Web Amazon. Một tuần sau, San quay trở lại. Trình duyệt của San tiếp tục đặt dòng tham số Cookie:1678 vào trong các thông điệp yêu cầu trước khi gửi cho máy chủ Web của Amazon. Nhờ vậy mà máy chủ biết được nhật ký truy cập của San tại Amazon và khôi phục lại giỏ hàng chứa các sản phẩm mà San đã từng chọn mua.
Nếu San đăng kí tài khoản với Amazon – tức cung cấp cho Amazon họ tên, địa chỉ email, địa chỉ nhà, và thông tin thẻ tín dụng – thì Amazon có thể đưa thông tin này vào cở sở dữ liệu cookie của Amazon, và liên kết tài khoản của San với ID của cô ấy (và tất cả các trang mà San đã truy cập trước đây). Đây là cách mà Amazon và các trang web thương mại điện tử khác cung cấp cái gọi là mua hàng với một click (on-click shopping).
Sau này, nếu San chọn mua một món hàng tại Amazon, San không cần phải điền lại tên của mình, cũng như thông tin thẻ tín dụng hay địa chỉ nữa.Tuy kỹ thuật cookie có thể giúp người dùng đơn giản hóa việc mua sắm trên Internet, nhưng kỹ thuật này vẫn bị nhiều tranh cãi vì nó chạm đến sự riêng tư của người dùng. Bằng cách sử dụng kết hợp kỹ thuật cookie và thu thập thông tin, tài khoản người dùng, một trang web có thể biết nhiều thông tin về người dùng và có thể bán thông tin này.
Web cache là gì?
Một web cache – còn được gọi là một proxy server – là một thực thể mạng có nhiệm vụ đáp ứng các thông điệp yêu cầu thay cho máy chủ web. Web cache có bộ nhớ riêng và giữ các bản sao của những đối tượng được yêu cầu gần nhất trong bộ nhớ này. Như trong hình dưới đây, trình duyệt có thể được thiết lập cấu hình để định hướng tất cả các thông điệp yêu cầu đến web cache. Giả sử một trình duyệt đang yêu cầu đối tượng http://www.someschool.edu/campus.gif
. Đây là những bước xảy ra:
- Trình duyệt thiết lập một kết nối TCP đến Web cache và gửi thông điệp yêu cầu đến Web cache.
- Web cache kiểm tra xem có bản sao nào của đổi tượng đang được lưu trữ tại Web cache không? Nếu có thì Web cache sẽ gửi về trình duyệt.
- Nếu Web cache không có đối tượng được yêu cầu, nó sẽ mở một kết nối TCP đến máy chủ Web tại www.someschool.edu. Kế đến, Web cache gửi thông điệp yêu cầu đối tượng.
- Khi Web cache nhận được đối tượng, nó lưu một bản sao của đối tượng vào bộ nhớ tại Web cache, và gửi bản sao (đính kèm vào thông điệp phản hồi) đến trình duyệt.
Web cache có vai trò: vừa là Server, vừa là Client. Thông thường, các nhà cung cấp dịch vụ Internet trang bị và triển khai Web cache. Chẳng hạn, một trường đại học có thể thiết lập Web cache trong mạng nội bộ và thiết lập cấu hình cho các trình duyệt trong trong trường hướng đến cache. Hoặc một nhà cung cấp dịch vụ Internet như AOL cũng có thể cài đặt một hoặc nhiều cache trong mạng nội bộ và thiết lập cấu hình cho các trình duyệt khách hàng của AOL hướng đến các cache đó. Có hai lý do cho việc triển khai Web cache:
- Web cache có thể giảm thời gian đáp ứng cho một thông điệp yêu cầu đến từ máy khách. Điều này càng có ý nghĩa nếu băng thông thực tế giữa máy khách và máy chủ ít hơn nhiều so với băng thông thực tế giữa máy khách và cache. Nếu kết nối giữa máy khách và cache có tốc độ cao như thường thấy, và cache có sẵn đối tượng được yêu cầu, thì cache sẽ có thể chuyến giao đối tượng đó về máy khách rất nhanh chóng.
- Web cache có thể giảm lưu lượng trên một liên kết truy cập từ tổ chức (như công ty, trường học) đến Internet.
Để hiểu sâu hơn về ưu điểm của cache, xét ví dụ trong hình trên. Hình này cho thấy hai mạng – mạng tổ chức (institutional network) và Internet. Mạng tổ chức là một mạng cục bộ (LAN) tốc độ cao. Một bộ đinh tuyến (router) trong mạng tổ chức và một bộ định tuyến trong Internet được kết nối với nhau qua đường truyền 15Mbps. Các máy chủ được lắp vào mạng Internet và được đặt tại mọi nơi trên thế giới.
Giả sử kích thước đối tượng yêu cầu trung bình là 1 Mbit và tỉ lệ yêu cầu trung bình từ các trình duyệt đến các máy chủ là 15 yêu cầu trong một giây. Các thông điệp yêu cầu HTTP nhỏ không đáng kể và không chiếm nhiều băng thông trên mạng. Và cũng giả sử rằng thời gian từ khi bộ định tuyến phía Internet trong hình trên chuyển tiếp thông điệp HTTP yêu cầu (trong một gói IP) đến khi nhận được phản hồi (trong nhiều gói IP) là trung bình hai giây.
Thời gian này được gọi là độ trễ Internet (Internet delay). Tổng thời gian phản hồi (thời gian từ khi trình duyệt yêu cầu một đối tượng đến khi nhận được đối tượng) là tổng thời gian truy cập và độ trễ Internet. Cường độ lưu thông trên mạng LAN là:
(15 yêu cầu/giây) * (1 Mbits/yêu cầu) / (100 Mbps) = 0.15
Trong khi cường độ lưu thông tại vùng truy cập (từ bộ định tuyến Internet đến bộ định tuyến tổ chức) là:
(15 yêu cầu/giây) * (1 Mbits/yêu cầu) / (15 Mbps) = 1
Cường độ lưu thông trên mạng LAN là 0.15, khoảng 1/10 của milli-giây; do đó, có thể bỏ qua độ trễ mạng LAN. Cường độ lưu thông tiếp cận đến 1 (trường hợp liên kết truy cập trong hình), độ trễ trên đường truyền trở nên rất lớn và tăng không có chặn trên. Dần đến thời gian phản hồi các yêu cầu trung bình tăng theo từng phút, điều này là không thể chấp nhận đối với người dùng.
Một giải pháp là tăng tỉ lệ truy cập từ 15Mbps lên 100Mbps. Cách này sẽ làm cho cường độ lưu thông sẽ giảm xuống 0.15, thay đối các độ trễ giữa hai bộ định tuyến. Khi đó, tổng thời gian phản hồi là hai giây, cũng chính là độ trễ Internet. Giải pháp này cũng có nghĩa là tố chức phải nâng cấp đường truyền của nó từ 15Mpbs lên 100Mpbs.
Xem xét giải pháp không nâng cấp đường truyền mà cài đặt một web cache trong mạng tổ chức. Giải pháp này được mô tả trong hình trên. Ti lệ hit – tỉ lệ các yêu cầu có lưu trong cache – thực tế nằm trong khoảng từ 0.2 đến 0.7. Giả sử cache cung cấp tỉ lệ hit là 0.4 cho tổ chức. Vì các máy khách và cache được kết nối cùng mạng LAN tốc độ cao, nên 40% yêu cầu sẽ được đáp ứng ngay lập tức, trong vòng 10 ms bởi cache.
Mặc dù, 60% yêu cầu đối tượng còn lại sẽ được đáp ứng thông qua đường truyền liên kết. Cường độ lưu thông trên đường truyền giảm từ 1.0 xuống 0.6. Điển hình cường độ lưu thông ít hơn 0.8 tương ứng với độ trễ nhỏ, một phần mười của mill giây, trên đường truyền 15Mbps. Độ trễ này không đáng kế so với 2s của độ trễ Internet. Với các xem xét trên thì độ trễ trung bình là:
0.4 * (0.01 giây) + 0.6 * (2.01 giây)
Lớn hơn một chút so với 1.2 giây. Do đó, giải pháp thứ hai cung cấp thời gian phản hồi nhanh hơn giải pháp đầu tiên, và nó không yêu cầu tổ chức nâng cấp đường truyền lên Internet. Chắc chắn tổ chức phải mua và cài đặt một Web cache.
Cập nhật trang web có điều kiện
Mặc dù dùng cache có thể giảm thời gian phản hồi người dùng, nhưng bản sao của một đối tượng bên trong cache có thể đã cũ. Mặt khác, đối tượng lưu trong máy chủ web có thể được bổ sung sau khi lưu bản sao trên cache. Vì vậy HTTP có một kỹ thuật cho phép cache xác nhận đối tượng của nó đã được cập nhật. Kỹ thuật này được gọi là GET
có điều kiện. Một thông điệp yêu cầu HTTP được gọi là thông điệp GET
có điều kiện nếu:
- Thông điệp yêu cầu dùng phương thức
GET
. - Thông điệp yêu cầu có dòng
header If-modified-since
.
Xét ví dụ sau:
1 – Một proxy cache thay cho trình duyệt gửi một yêu cầu đến máy chủ web:
GET /fruit/kiwi.gif HTTP/1.1
Host: ww. exotiquecuisine.com
2 – Máy phục vụ web gửi một thông điệp phản hồi với đối tượng được yêu cầu đến cache:
HTTP/1.1 200 OK
Date: Sat, 7 Jul 2007 15:39:29
Server: Apache/1.3.0 (Unix)
Last-Modified: Wed, 4 Jul 2007 09:23:24
Content-Type: image/gif
(data data data data data …)
Cache chuyển đối tượng đến trình duyệt yêu cầu, đồng thời lưu lại đối tượng lên vùng nhớ cục bộ. Cache cũng lưu thời gian bổ sung gần nhất cùng với đối tượng.
3 – Một tuần sau đó, một trình duyệt khác yêu cầu cùng đối tượng thông qua cache, và đối tượng vẫn còn lưu trong cache. Vì đối tượng này vừa được cập nhật trên máy chủ web một tuần qua, cache phải kiểm tra cập nhật bằng cách dùng một lệnh GET có điều kiện. Cụ thế cache sẽ gửi:
GET /fruit/kiwi.gif HTTP/1.1
Host: WWW. exotiquecuisine. com
If-modified-since: Wed, 4 Jul 2007 09:23:24
Lưu ý giá trị của dòng header If-modified-since:
chính xác là giá trị của dòng header Last-modified:
đã được gửi đến máy chủ một tuần trước đây. Lệnh GET
có điều kiện đang yêu cầu máy chủ gửi đối tượng nếu đối tượng vừa được bổ sung sau một ngày tháng cụ thể nào đó được yêu cầu xác nhận như trong ví dụ trên là đối tượng vừa được bổ sung kể từ ngày 04/07/2007 lúc 09:23:24.
4 – Máy phục vụ web gửi một thông điệp đến cache:
HTTP/1.1 304 Not Modified
Date: Sat, 14 Jul 2007 15:39:29
Server: Apache/1.3.0 (Unix)
(empty entity body)
Trong thông điệp phản hồi đến lệnh GET
có điều kiện, máy chủ web vẫn gửi thông điệp phản hồi nhưng không thêm đối tượng được yêu cầu vào thông điệp phản hồi. Thêm đối tượng được yêu cầu sẽ làm tốn băng thông và làm tăng thời gian phản hồi người dùng, đặc biệt nếu đối tượng đó lớn. Thông điệp phản hồi cuối cùng nếu có dòng “304 Not Modified”
trong dòng trạng thái, sẽ yêu cầu cache có thể tiếp tục dùng và gửi các bản sao của đối tượng đến trình duyệt yêu cầu.
Tổng kết
Vậy là chúng ta đã tìm hiểu xong về Cookies và Cache trong HTTP. Bài tới chúng ta sẽ cùng nhau tìm hiểu về một loại giao thức khác của tầng ứng dụng: FTP