1. Giới thiệu giao thức HTTP:
HTTP là một giao thức cho phép trình duyệt Web Browser và servers có thể giao tiếp với nhau. Nó chuẩn hóa các thao tác cơ bản mà một Web server phải làm đƣợc.
HTTP bắt đầu là một giao thức đơn giản giống nhƣ với các giao thức chuẩn khác trên Internet, thông tin điều khiển đƣợc truyền dƣới dạng văn bản thô thông qua kết nối TCP. Do đó, kết nối HTTP có thể thay thế bằng cách dùng lệnh “telnet” chuẩn.
Ví dụ:
> telnet www.ispace.edu.vn 80
GET /index.html HTTP/1.0
Cổng 80 là cổng mặc định dành cho Web server “lắng nghe” các kết nối đƣợc gửi đến. Để đáp ứng lệnh HTTP GET, Web server trả về cho client trang “index.html” thông qua phiên làm việc telnet này và sau đó đóng kết nối. Thông tin trả về dƣới dạng các tag HTML:
<HTML> <HEAD> <TITLE>ispace Homepage</TITLE> </HEAD> [……..] </HTML>
Giao thức chỉ thực thi đơn giản hai thao tác yêu cầu / đáp ứng (request / response). Một trong các thay đổi lớn nhất trong HTML/1.1 là nó hổ trợ kết nối lâu dài (persistent connection).
Hình 20: Hoạt động của giao thức HTTP
Trong HTTP/1.0, một kết nối phải đƣợc thiết lập đến server cho mỗi đối tƣợng mà Browser muốn download. Nhiều trang Web có rất nhiều hình ảnh, ngoài việc tải trang HTML cơ bản, browser phải lấy về một số lƣợng hình ảnh. Nhiều cái trong chúng thƣờng là nhỏ hoặc chỉ đơn thuần là để trang trí cho phần còn lại của trang HTML. Thiết lập một kết nối cho mỗi hình ảnh thật lãng phí, vì sẽ có nhiều gói thông tin mạng sẽ đƣợc luân chuyển giữa Web browser và Web server trƣớc khi dữ liệu ảnh đƣợc truyền về.
Ngƣợc lại, mở một kết nối TCP truyền tài liệu HTML và sau đó mỗi hình ảnh sẽ truyền nối tiếp theo nhƣ thế sẽ thuận tiện hơn và quá trình thiết lập các kết nối TCP sẽ đƣợc giảm xuống.
2. Web server và hoạt động:
Ban đầu Web server chỉ phục vụ các tài liệu HTML và hình ảnh đơn giản. Tuy nhiên, đến thời điểm hiện tại nó có thể làm nhiều hơn thế. Đầu tiên xét Web server ở mức độ cơ bản, nó chỉ phục vụ các nội dung tĩnh. Nghĩa là khi web server nhận một yêu cầu từ web browser http://www.ispace.edu.vn/index.html, nó sẽ ánh xạ đƣờng dẫn này (Uniform Resource Locator – URL) thành một tập tin cục bộ trên máy web server.
Máy chủ sau đó sẽ nạp tập tin này từ đĩa và đƣa nó thông qua mạng đến web browser của ngƣời dùng. Web browser và web server sử dụng giao thức HTTP trong quá trình trao đổi dữ liệu. Các trang tài liệu HTML là một văn bản thô (raw text). Chúng chứa các thẻ định dạng (HTML tag).
Ví dụ:
<html>
<head> <title> WWW </title> </head>
<body>
<p align=center>
<a href=http://www.ispace.edu.vn/><b>Trường Cao Đẳng nghề CNTT
iSPACE</b></a> </b>
</p> </body> </html>
Trên cơ sở phục vụ những trang web tĩnh đơn giản này, ngày nay web server đã đƣợc phát triển với nhiều thông tin phức tạp hơn đƣợc chuyển giữa web server và web browser, trong đó quan trọng nhất có lẽ là nội dung động (dynamic content).
Với phiên bản đầu tiên, web server hoạt động theo mô hình sau:
Tiếp nhận các yêu cầu từ Browsers. Trích nội dung từ đĩa.
Chạy các chƣơng trình CGI
Truyền dữ liệu ngƣợc lại cho client. Chạy càng nhanh càng tốt.
Tuy nhiên, cách hoạt động của mô hình trên không hoàn toàn tƣơng thích lẫn nhau. Ví dụ, một web server đơn giản phải theo các luật logic sau:
Chấp nhận kết nối.
Sinh ra các nội dung tĩnh hoặc động cho browser. Đóng kết nối.
Chấp nhận kết nối. Lập lại quá trình trên.
Điều này sẽ thực hiện tốt đối với các web site đơn giản, nhƣng server sẽ bắt đầu gặp phải vấn đề khi có nhiều ngƣời truy cập hoặc có quá nhiều trang web động phải tốn thời gian để tính toán cho ra kết quả.
Ví dụ: Nếu một chƣơng trình CGI tốn 30 giây để sinh ra nội dung, trong thời gian này web server có thể sẽ không phục vụ các trang khác nữa. Do vậy, mặc dù mô hình này hoạt động đƣợc, nhƣng nó vẫn cần phải thiết kế lại để phục vụ đƣợc nhiều ngƣời trong cùng một lúc. Web server có xu hƣớng tận dụng ƣu điểm của cả hai phƣơng pháp khác nhau để giải quyết vấn đề này là: đa tiểu trình (multi-threading) hoặc đa tiến trình (multi-processing) hoặc các hệ lai giữa multi-processing và multi-threading.
3. Web client:
Là những chƣơng trình duyệt web ở phía ngƣời dùng, nhƣ internet Explorer, Netscape, Fire fox, opera….., để hiển thị những thông tin trang web cho ngƣời dùng, web client sẽ gửi yêu cầu đến web server, sau đó đợi web server xử lý trả kết quả về cho web client hiển thị cho ngƣời dùng. Tất cả mọi yêu cầu đều đƣợc xử lý bởi web server.
4. Web động:
Một trong các nội dung động (thƣờng gọi tắt là web động) cơ bản là các trang web đƣợc tạo ra để đáp ứng các dữ liệu nhập vào của ngƣời dùng trực tiếp hay gián tiếp.
Cách cổ điển nhất đƣợc dùng phổ biến nhất cho việc tạo nội dung động là sử dụng Common Gateway Interface (CGI). Cụ thể là CGI định nghĩa cách thức Web server chạy một chƣơng trình cục bộ, sau đó nhận kết quả và trả về cho Web browser của ngƣời dùng đã gửi yêu cầu.
Web browser thực sự không biết nội dung của thông tin là động, bởi vì CGI về cơ bản là một giao thức mở rộng của Web server. Hình vẽ sau minh họa khi Web browser yêu cầu một trang web động phát sinh từ một chƣơng trình CGI
Hình 21: Mô tả phát sinh web động từ chương trình CGI
Một giao thức mở rộng nữa của HTTP là HyperText Transmission Protocol Secure (HTTPS) dùng để bảo mật các thông tin “nhạy cảm” khi chuyển chúng qua mạng.
5. Cài đặt và cấu hình Web server: 5.1 Giới thiệu phần mềm Apache:
Apache hay là chƣơng trình máy chủ web sử dụng giao thức HTTP. Apache đóng một vai trò quan trọng trong quá trình phát triển của mạng WWW trên Internet.
Apache đƣợc phát triển và duy trì bởi một cộng đồng mã nguồn mở dƣới sự bảo trợ của Apache Software License và là một phần mềm miễn phí.
Apache hỗ trợ đầy đủ các chức năng của Web service.
Apache là một phần mềm có nhiều tính năng mạnh và linh hoạt dùng để làm Web server:
Hổ trợ đầy đủ những giao thức HTTP trƣớc đây nhƣ HTTP/1.1. Có thể cấu hình và mở rộng với những module của công ty thứ ba.
Cung cấp source code đầy đủ với license không hạn chế.
Chạy trên nhiều hệ điều hành nhƣ: Windows, Netware, OS/2 và trên hầu hết các hệ điều hành Linux.
5.2 Cài đặt Apache:
Cài đặt package httpd-2.2.3-4.el5.centos.rpm từ cdrom hoặc tải từ Internet
# rpm -ivh httpd-2.2.3-4.el5.centos.rpm
5.3 Thông tin cấu hình:
/etc/httpd/conf: thƣ mục lƣu giữ tập tin cấu hình nhƣ httpd.conf. /etc/httpd/modules: lƣu các module của Web Server.
/etc/httpd/logs: lƣu các tập tin log của Apache. /var/www/html: lƣu các trang Web.
/var/www/cgi-bin: lƣu các script sử dụng cho các trang Web.
Các tập tin khác của phần mềm Apache có thể tham khảo thêm qua lệnh rpm –ql httpd. 5.4 Cấu hình cơ bản:
Cho phép publish websize có nội dung là trang web tĩnh dạng HTML. Các bƣớc thực hiện:
Chép nội dung Website vào thƣ mục /var/www/html/ Tạo tên Website (ví dụ: www.thanhlong.com)
Thay đổi thông số ServerName www.thanhlong.com
Chỉ định trang chủ hiển thị cho nội dung Website thông qua từ khóa DirectoryIndex default.html (giả sử trang default.html là trang chủ của Website)
Khởi tạo lại dịch vụ httpd qua lệnh: # service httpd restart
5.5 Cấu hình chứng thực:
Đối với những thông tin cần bảo mật, khi có yêu cầu truy xuất thông tin này, Webserver phải chứng thực những yêu cầu này có hợp lệ hay không.
Thông tin chứng thực thƣờng bao gồm: username và password Có hai loại chứng thực:
Basic Authentication. Digest Authentication. Basic Authentication:
Với username và password mà ngƣời dùng cung cấp chỉ có tác dụng trong lần giao dịch của Web Browser với Web Server lúc đó. Nếu lần sau truy cập lại website này, ngƣời dùng phải nhập lại username và password.
Các bƣớc cấu hình chứng thực Basic:
- Tạo tập tin lƣu mật khẩu của ngƣời dùng và cấp quyền truy xuất cho tập tin này.
- Tạo tập tin group (nếu muốn chứng thực cho nhóm). - Cấu hình Apache.
Bƣớc 1: Tạo tập tin lƣu mật khẩu và cấp quyền truy xuất
Cú pháp:
# htpasswd –c <vị trí tập tin password> <username>
- Tùy chọn –c sẽ tạo tập tin password mới. Nếu tập tin này đã tồn tại, nó sẽ xóa nội dung cũ và ghi lại nội dung mới.
- <vị trí tập tin password>: thông thƣờng tạo tại thƣ mục chứa tập tin cấu hình Apache /etc/httpd/conf
- Ví dụ: Tạo tập tin lƣu mật khẩu cho user tuandq
Cấp quyền truy xuất
# chmod 755 <tập_tin_password>
Bƣớc 2: Tạo tập tin group
- Nhằm tạo điều kiện thuận lợi cho ngƣời quản trị trong việc quản lý sự chứng thực, Apache hỗ trợ thêm tính năng chứng thực nhóm ngƣời dùng.
- Dạng tổng quát của tập tin group:
<groupname>: <user lists>
- groupname: tên nhóm.
- user list: danh sách các thành viên trong nhóm (cách nhau bởi khoảng trắng). - Ví dụ: authors: tuandq duytha kientd
Bƣớc 3: Cấu hình Apache
- Sau khi tạo tập tin password và group, cấu hình chứng thực của Apache đƣợc thiết lập với những chỉ dẫn sau:
Alias <path_HTTP> </thư mục cục bộ> <Directory [/thư mục cục bộ]>
AuthType Basic
AuthName [tên_chứng_thực]
AuthUserFile [vị_trí_tập_tin_password] AuthGroupFile [vị_trí_tập_tin_group] Require user [tên_user1] [tên_user2] . . . Require group [tên_nhóm1] [tên_nhóm2] . . . Option Indexes (hiển thị những file dạng khác html) </Directory>
Digest Authentication
Digest Authentication cung cấp một phƣơng pháp bảo vệ nội dung web một cách luôn phiên.
Mô hình chứng thực:
Hình 22: Chứng thực Digest
Các bƣớc thực hiện tƣơng tự nhƣ Basic Authentication Bƣớc 1: Tạo tập tin lƣu mật khẩu và cấp quyền truy xuất
Cú pháp:
# htdigest –c <tập tin pass> <Auth_name> <username>
- Tùy chọn –c sẽ tạo tập tin password mới. Nếu tập tin này đã tồn tại, nó sẽ xóa nội dung cũ và ghi lại nội dung mới.
- <vị trí tập tin password>: thông thƣờng tạo tại thƣ mục chứa tập tin cấu hình Apache /etc/httpd/conf
- Ví dụ: Tạo tập tin lƣu mật khẩu cho user tuandq
# htpasswd -c /etc/httpd/conf/passwords tên_chứng_thực tuandq
Bƣớc 2: Tạo tập tin group
- Nhằm tạo điều kiện thuận lợi cho ngƣời quản trị trong việc quản lý sự chứng thực, Apache hỗ trợ thêm tính năng chứng thực nhóm ngƣời dùng.
- Dạng tổng quát của tập tin group:
<groupname>: <user lists>
- groupname: tên nhóm.
- user list: danh sách các thành viên trong nhóm (cách nhau bởi khoảng trắng). - Ví dụ: authors: tuandq duytha kientd
Bƣớc 3: Cấu hình Apache
- Sau khi tạo tập tin password và group, cấu hình chứng thực của Apache đƣợc thiết lập với những chỉ dẫn sau:
Alias <path_HTTP> </thư mục cục bộ> <Location [/path_HTTP]> AuthType Digest AuthName [tên_chứng_thực] AuthDigestProvider file AuthUserFile [vị_trí_tập_tin_password] AuthGroupFile [vị_trí_tập_tin_group] Require user [tên_user1] [tên_user2] . . .
Require group [tên_nhóm1] [tên_nhóm2] . . .
</Location>