HTTP và Web server Trang 1
1. HTTP và Web server
Web server làm nhiệm vụ gì ?
Ban đầu nó chỉ phục vụ các tài liệu HTML đơn giản và hình ảnh. Tuy nhiên sau này nó
có thể làm nhiều hơn thế.
Đầu tiên xét Web server ở mức độ cơ bản thì nó phục vụ các nội dung tĩnh. Nghĩa là
khi Web server nhận 1 yêu cầu lấy trang Web sau từ Web browser :
http://www.hcmuns.edu.vn/index.html
thì nó sẽ ánh xạ (map) Uniform Resource Locator (URL) trên vào một file cục bộ trên
máy server.
Trong trường hợp này, file index.html ở một nơi nào đó trên hệ thống file của máy
chủ. Máy chủ sau đó sẽ nạp file này từ đĩa và đưa nó thông qua mạng đến Web
browser của người dùng . Toàn bộ quá trình trao đổi giữa các trình duyệt web và web
server sử dụng giao thức : HTTP (Hypertext Transfer Protocol).
1.User yêu cầu tài 4.Web server trả
liệu Web, vd như tài liệu về cho
index.html browser
2.Web server tìm 3.Web server lấy
tài liệu trên hệ tìm tài liệu trên hệ
thống fle thống fle
Các file 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).
•Markup tags:
WWW
Trường Đại Học Khoa Học Tự Nhiên
TP.HCM
HTTP và Web server Trang 2
Trên cơ sở phục vụ nội dung tĩnh đơn giản này đã dẫn đến cái mà ngày nay chúng ta
gọi là World Wide Web 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).
Web động
0. 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.
1. Cách cổ điển nhất và đượ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 một cách thức Web server chạy một chương trình một cách cục bộ
và trả kết quả thông qua Web server đến Web browser của người dùng
đã yêu cầu nội dung động.
2. Web browser của người dùng chẳng bao giờ thực sự biết được 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 hoạ khi Web browser yêu cầu một
trang Web động phát sinh từ một chương trình CGI.
1.User yêu cầu 4.Web server
chương trình CGI chuyển các thông tin
phục vụ 1 trang xuất ra từ chương
động (webstore.cgi) trình CGI về cho
browser
2.Web server gọi
chương trình 3.Web server gnhận
webstore.cgi và gửi các thông tin xuất ra
đến chương trình từ chương trình
các tham số mà webstore.cgi
browser yêu cầu.
Một giao thức mở rộng nữa của HTTP là HyperText Transmission Protocol, Secure
(HTTPS) bảo mật các các thông tin “nhạy cảm” khi chuyển chúng xuyên qua mạng.
Điều này cho phép phát triển thương mại điện tử (e-commerce).
HTTP và phương thức hoạt động?
HTTP và Web server Trang 3
3. HTTP là một giao thức cho phép Web browsers và servers có thể giao tiếp
với nhau. Nó chuẩn hoá các thao tác cơ bản mà một Web Server phải làm
được.
4. HTTP bắt đầu là 1 giao thức đơn giản Như với các giao thức chuẩn khác
của 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.extropia 80
GET /index.html HTTP/1.0
HTTP và Web server Trang 4
việc quyết định làm thế nào để hiển thị nội dung là một kiểu định dạng
MIME type header.
text/xml Xml
video/mpeg Mpeg mpg mpe Multipurpose Internet Mail Extension?
video/quicktime qt mov 12. MIME: định dạng
này nói cho Web browser tài liệu đang được truyền đi thuộc tài liệu gì.
Những kiểu định danh như vậy không giới hạn cho các trang HTML đơn
giản hoặc hình ảnh.
13. Trên thực tế , hơn 370 kiểu MIME mặc định được phân phối với
Apache Web server trong tập tin cấu hình mime.types . Và thậm chí danh
sách này không thể đại diện cho toàn bộ không gian các kiểu MIME có
thể ! Kiểu MIME được phân biệt bởi cú pháp type/subtype kết hợp với
phần mở rộng của tập tin.
Ví dụ về kiểu MIME trong file mime.types
Chúng ta thấy rằng các file chứa nội dung video mpeg có phần mở rộng là
mpeg,
mpg, hoặc mpe.
Một Web server chấp nhận kết nối như thế nào ?
1. Web servers được thiết kế xoay quanh các mục tiêu cơ bản sau:
0. Tiếp nhận các các kết nối mạng từ browsers.
1. Trích nội dung từ đĩa .
2. Chạy các chương trình CGI .
3. Truyền dữ liệu ngược lại cho clients
4. Chạy càng nhanh càng tốt.
14. Tuy nhiên, các mục tiêu 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:
0. Chấp nhận kết nối
1. Sinh ra các nội dung tĩnh hoặc động cho browser
2. Đóng kết nối
3. Chấp nhận kết nối
4. Lập lại quá trình trên ...
15. Điều này sẽ chạy tốt đối với các Web sites đơ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ác 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 đó
Web server có thể sẽ không thể phục vụ các trang khác nữa .
16. Do vậy, mặc dù mô hình này chạy, nó vẫn cần phải thiết kế lại để phục
vụ được nhiều người trong cùng 1 lúc. Web servers có xu hướng tận
dụng ưu điểm của 2 phương pháp khác nhau để giải quyết vấn đề này:
HTTP và Web server Trang 5
đ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.
Yêu cầu HTTP
Request = Simple-Request | Full-Request
Simple-Request = "GET" SP Request-URI CRLF
Request = Request-Line
*(( general-header
| request-header
| entity-header ) CRLF)
CRLF
[ message-body ]
Ghi chú:
♦ SP (Space): khoảng trắng
♦ CRLF (Carier Return - Line feed) : xuống dòng về đầu dòng
HTTP URL dùng để định vị tài nguyên mạng qua giao thức HTTP. Đường dẫn HTTP
URL có dạng như sau:
http_URL = "http:" "//" host [ ":" port ] [ abs_path ]
trong đó:
host =
port = số_nguyên
trường hợp không có tham số port thì giá trị 80 được lấy mặc định.
Request-Line có dạng:
Request-Line =Method SP Request-URI SP HTTP-Version CRLF
Method : phương thức được dùng. Phương thức có thể là một trong
các giá trị
Method = "GET" : lấy thông tin từ server theo đường dẫn mô tả trong Request-
URI
|HEAD : tương tự như GET nhưng không lấy thành phần message-body
| "POST" :
| "PUT"
| "DELETE"
Method = "OPTIONS"
| "GET" ; Section 9.3
| "HEAD" ; Section 9.4
| "POST" ; Section 9.5
| "PUT" ; Section 9.6
| "DELETE" ; Section 9.7
| "TRACE" ; Section 9.8
HTTP và Web server Trang 6
| "CONNECT" ; Section 9.9
| extension-method
extension-method = token
Ví dụ về yêu cầu HTTP:
0. GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1
1. GET /pub/WWW/TheProject.html HTTP/1.1
Host: www.w3.org
Protocol Domain name Path
http:// www.hcmu.edu.vn /vanphong/dtao.htm
https:// www.company.com /catalog/orders.htm
(secure HTTP)
gopher:// gopher.college.edu /research/astronomy/index.htm
ftp:// orion.bureau.gov /stars/alpha quadrant/startlist.txt
Đáp ứng
Sau khi nhận và thông dịch yêu cầu, server đáp ứng với một thông điệp HTTP.
Response = Status-Line ; Section 6.1
*(( general-header ; Section 4.5
| response-header ; Section 6.2
| entity-header ) CRLF) ; Section 7.1
CRLF
[ message-body ] ; Section 7.2
Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
Mã trạng thái và ý nghĩa
1xx: Thông báo – đã nhận yêu cầu, tiếp tục xử lý
2xx: Thành công – Hành động đã nhận thành công yêu cầu từ user, hiểu và chấp
nhận yêu cầu
3xx: Redirection –Phải tốn thêm các động tác khác mới có thể hoàn tất được yêu
cầu
4xx: Client Error – Yêu cầu gửi cú pháp của câu request bị sai. Hành động không
thể tiếp tục
5xx: Server Error - server không thể đáp ứng đầy đủ yêu cầu đó
Status-Code = "100" ; Tiếp tục
| "200" ; OK
| "201" ; Đã tạo
| "202" ; Chấp nhận
| "203" ; Thông tin không được kiểm tra xác thực
| "204" ; Không có nội dung
| "301" ; Nội dung đã chuyển sang vị trí khác
HTTP và Web server Trang 7
Response Header Fields (tt)
| "400" ; Yêu cầu không phù hợp
| "401" ; Không có quyền
| "403" ; Cấm truy cập
| "404" ; Không tìm thấy
| "405" ; Không cho phép phương thức này
| "408" ; Yêu cầu bị quá thời gian
Response Header Fields (tt)
| "500" ; Lỗi server
| "501" ; Không hổ trợ
| "502" ; Bad Gateway
| "503" ; Dịch vụ không sẳn sàng
| "504" ; Gateway Time-out
| "505" ; phiên bản HTTP không được hổ trợ
Ta chọn nền Web Server nào ?
17. Thông thường,một tiến trình server phải làm 2 việc: lắng nghe và tiếp
nhận kết nối TCP khi chúng được thiết lập. Nó phải lựa chọn vừa phải
để đáp ứng các kết nối đồng thời vừa phải ngãn cản hiệu quả bất cứ
kết nối mới nào cho đến cái hiện tại đã được phục vụ và đã đóng.
2. Trên thực tế việc chạy mỗi tiến trình Web server khi có yêu cầu thì giá
phải trả cho hiệu suất rất đắt trên máy chủ, và hoàn toàn không thực tế
trong các mô hình Web site hiện tại. Ngày nay, hầu hết các Web sites
chạy Web server có thể hỗ trợ cả multi-processing hoặc multi-threading,
và do đó nó có thể xử lý tải lớn hơn nhiều.
18. Không cần biết Web server của bạn tốt hay mạnh đến đâu, thì vẫn luôn
luôn sẽ bị giới hạn bởi số lượng trang web phục vụ trong 1 khoảng thời
gian cho trước -- nếu trang Web của bạn sử dụng nội dung động thì sẽ
làm tãng thời gian phục vụ và làm nặng tải cho Web server.Nội dung
động thường dựa việc sử dụng các database nặng nề hoặc xử lý các
code chương trình sẽ gây tốn rất nhiều tài nguyên trên máy chủ.
Cân bằng tải - Load balancing
3. Có nhiều cách để phân tải cho server. Cách đơn giản nhất là chia nội
dung ra trên nhiều máy. Ví dụ , bạn có thể đặt tất cả các tập tin HTML
tĩnh trên một máy , tất cả các hình ảnh trên một máy khác, và cái thứ ba
chạy tất cả CGI scripts. Tất nhiên , cách phân tải này rất thô thiển và
phụ thuộc vào nội dung của site, và hiệu quả mang lại rất ít.
19. Ví dụ , một CGI script đơn lẻ sẽ gây nghẽn mạch cho Web site, ta hãy
dời nó sang một server khác chỉ chứa HTML, hình ảnh và các CGI scripts
khác tiếp tục chạy. Tuy nhiên, tải nặng của CGI script sẽ vẫn bị hiện
tượng “cổ chai” cho các người dùng muốn tận dụng tài nguyên. Do vậy,
phân tải trên Web server cần một chút tinh tế để xác định được vấn đề
là tải đang nặng ở chỗ nào để cấu hình cho thích hợp.
HTTP và Web server Trang 8
20. Một số nguyên nhân phải được xác định rõ trước khi quyết định giải
pháp phân tải. Đặc biệt, kiểm tra tải truy cập của Web là yếu tố quyết
định cho việc tinh chỉnh hiệu suất làm việc và quá trình phân tải cho
server.
21. Các phương pháp phân tải giữa các Web servers:
2. Phân tải DNS (round-robin type)
3. Phân tải phần cứng
4. Phân tải phần mềm
5. Proxy ngược
6. Nội dung được phát tán qua nhiều hosts
Vấn đề an toàn Web site?
22. Có hai mức khác nhau về vấn đề an ninh cho Web server. Trên mức độ là
an toàn dòng dữ liệu do đó nó không thể được xem hay sữa chữa bởi kẻ
thứ ba có ác tâm. Trên mức khác là an toàn về nội dung – xác nhận và
quyền hạn của người được xem và thay đổi nội dung đó.
23. Các đường dẫn URL bắt đầu bởi “https” sử dụng giải thuật SSL (Secure
Socket Layer) để tạo ra một liên kết dạng luồng bảo mật và mã hoá
thông tin khi đi qua luồng.
24. Tuy nhiên, bạn có thể hỏi, cuối cùng SSL bảo vệ cái gì ? Thực sự chỉ có
hai lựa chọn : SSL bảo vệ dữ liệu được gửi lên lên Web server lẫn dữ
liệu “nhạy cảm” nhận về từ Web server.
Vấn đề an toàn Web site?
25. Việc cho phép người dùng gửi dữ liệu bí mật lên Web server có thể
được tìm thấy trong một ứng dụng thông thường trên Web. Trong các
ứng dụng đó, người dùng thường được cho 1 lựa chọn phải cho biết
thông tin về thẻ tín dụng để hoàn tất đơn đặt hàng. Mặc dù Web server
không hiển thị số thẻ tín dụng lên Web browser, nhưng việc truyển các
thông tin này phải được xếp vào loại là thông tin bí mật. Do đó, có một
số cách để bảo vệ nội dung trên Web server.
26. Web servers thường hỗ trợ việc xác thực dùng kỹ thuật gọi là basic
authorization. Trong kỹ thuật này, Web server gửi một header đặc biệt
tới Web browser của người dùng hỏi username/password.
27. Web servers thường quản lý rất đơn giản việc xác định quyền xem dữ
liệu . Hầu hết Web servers chỉ đơn thuần cho phép việc ngãn cản việc
đọc thư mục và files bởi group hay user. Các tuỳ chọn phức tạp hơn cho
phép phát hiện người dùng nào có quyền xem files thường phải được lập
trình bên trong ứng dụng Web hoặc thông qua việc gán quyền trên hệ
thống file của hệ điều hành đang chạy Web server.
Sự khác nhau giữa Web Server và Server ứng dụng?
28. Chúng ta đã nói về Web server, thế còn server ứng dụng ? Sự khác nhau
là hoàn toàn rõ ràng. Web server chỉ phục vụ trang HTML và các hình ảnh
cho việc xem trên browser. Trong khi một ứng dụng có thể tồn tại trên
Web server, ứng dụng đó thường bị giới hạn bởi việc sinh ra trang
HTML và dữ liệu hình ảnh.
HTTP và Web server Trang 9
29. Một server ứng dụng thông thường chứa các ứng dụng doanh nghiệp thô
và không chứa CSDL hay giao diện người dùng. CSDL ứng dụng nằm
trên database server, còn giao diện người dùng có thể được phát sinh và
hiển thị ở dạng trang Web.
30. Trong nhiều trường hợp, server ứng dụng phục vụ như là một tầng trung
gian (middle-tier) của mô hình lập trình three-tier. Hình dưới đây minh
hoạ một mô hình lập trình three-tier.
31. Nói cách khác , server ứng dụng nằm trong tầng giữa của chương trình
khác và phục vụ xử lý dữ liệu cho các chương trình đó. Thông thường,
trong trường hợp lập trình three-tier , hai lớp phân biệt bởi server ứng
dụng là lớp giao diện người dùng và lớp Database/Data Storage .
4. Chú ý rằng khái niệm server ứng dụng không được lầm lẫn với ứng
dụng Web nằm trên Web server. Ứng dụng Web thông thường cũng chỉ
chứa các ứng dụng logic, nhưng khi chúng phục vụ chính cho việc sinh
ra các trang HTML cho Web browser, chúng cũng có giao diện người
dùng và thường không bao giờ trú ngụ trên một server ứng dụng thuần.
Data Marshalling
32. Data marshalling là một thuật ngữ dùng để chỉ ra giao thức ứng dụng nói
chuyện với nhau. Tương tự như làm thế nào Web servers bọc nội dung
human-readable trong HTML để làm cho nó “dễ đọc”, nhiều server ứng
dụng bọc nội dung application-readable bên trong các tags cho phép dữ
liệu được thông dịch bởi ứng dụng nhận. Các "tags" này đã tạo nên một
chuẩn xung quanh server ứng dụng.
HTTP và Web server Trang 10
33. Ví dụ , CORBA servers dùng một giao thức gọi IIOP (Internet Inter-Orb
Protocol) để truyền dữ liệu giữa các application objects. Gần đây hơn,
XML (Extensible Markup Language) đã làm data marshalling càng dễ
dàng hơn trong việc tạo các tags cho riêng mình rất giống trong cú pháp
của HTML ngoại trừ việc chúng mô tả dữ liệu hơn là làm sao nội dung
được hiển thị trong browser ( xem thêm tại Web site http://www.xml.org )
34. Trong quá khứ, hầu hết các server ứng dụng như thế nói chuyện với
nhau bằng ngôn ngữ giao thức Data marshalling như là IIOP(Internet
Inter-Orb Protocol) cho CORBA, Java's object serialization cho RMI, và
DCOM cho việc kích hoạt các Microsoft ActiveX từ xa. Tuy nhiên , sự
phát triển của XML (extensible markup language) như là một ngôn ngữ
internet thân thiện cho data marshalling đã làm mờ đi các ranh giới .
35. Web Servers được tinh chỉnh thành server ứng dụng có thể phục vụ dữ
liệu XML bên cạnh dữ liệu HTML.
36. Gần đây tất cả Java Enterprise Bean servers dựa trên kiến trúc Java của
Sun Microsystems đều quảng cáo khả năng đồng thời phục vụ Java
Servlets và Java Server Pages -- lĩnh vực truyền thống của Web servers.
37. Thông thường, server ứng dụng được định hướng để xử lý dữ liệu dùng
đối tượng hay code để hiện thực các logic ứng dụng. Trong khi đó Web
servers thiên về việc gửi dữ liệu. Một thực tế là có thể đặt các thành
phần của ứng dụng ngay trên Web server, tuy nhiên khi gặp vấn đề về
hiệu suất thi hành thì nên tách biệt các thành phần ứng dụng trên server
ứng dụng dành riêng.
Appication Server và Web Server
Hiện nay có nhiều kỹ thuật khác nhau cho phép một Web server phục vụ nội dung
động. Các kỹ thuật ứng dụng Web chủ yếu tập trung vào việc phân phát các tài liệu
HTML (được phát sinh tự động) đến Web browser của người dùng khi họ tương tác
với Web site. Một server ứng dụng thường tuý không định dạng dữ liệu cho người
dùng mà nó hoạt động như một “cỗ máy” (engine) xử lý dữ liệu cho các chương trình
khác. Các chương trình này sẽ đọc dữ liệu đã được xử lý và diễn dịch lại cho phía
người dùng.
Chúng ta thử khảo sát một số kỹ thuật sau:
Web Server và ứng dụng Web
38. CGI - Common Gateway Interface : các chương trình CGI phục vụ nội
dung động dựa trên thông tin chuyển đến cho chúng. Các chương trình
CGI có thể viết bằng ngôn ngữ bất kỳ như Perl, C, Python và TCL, trong
đó chủ yếu là Perl.
39. Microsoft ASP - Active Server Page : ASP nhúng môt trình thông dịch
(interpreter) VBScript vào Web server Microsoft Internet Information
Server.
40. Java Servlets/JSP - Java Server Pages : kết nối máy ảo Java (JVM - Java
Virtual Machine) với Web server. JSP có ưu điểm hơn ASP ở chổ nó khả
năng cache trên JVM sau lần chạy đầu tiên.
41. PHP (Hypertext Preprocessor): tương tự như ASP và JSP, có một tập các
thẻ mã chương trình đặt bên cạnh các thẻ HTML. server-side, cross-
HTTP và Web server Trang 11
platform, ngôn ngữ scripting nhúng HTML. PHP là một dự án của Apache
Software Foundation.
42. Mod_perl : nhúng trình thông dịch Perl vào Web server Apache cho phép
tăng tốc độ xử lý các Perl script và cache các script để tăng hiệu suất hơn
nữa.
Các Web server phổ biến
Apache server (http://www.apache.org) hệ điều hành Unix, Windows 95/98, và
Windows NT.
CERN server (http://www.w3c.org/Daemon/Status.html) hệ điều hành : Unix,
VMS.
MacHTTP (http://www.w3c.org/MacHTTP/status.html) : hệ điều hành
Macintosh.
Website (http://clubweb.ora.com) : hệ điều hành server Windows NT / Windows
95 của O'Reilly.
Domino Go Webserver (http://www.lotus.com) hệ điều hành Unix, Windows
NT, Windows 95/98, OS/2.
Lotus Domino (http://www.lotus.com) hệ điều hành Windows NT, Windows
95/98, Unix, OS/2, Novell Netware.
Microsoft IIS v4.0/Microsoft IIS v5.0 (http://www.microsoft.com ) : hệ điều
hành Windows NT/2000.
Enterprise for NetWare (http://www.novell.com ): hệ điều hành Novell Netware
4.11, IntranetWare 4.11.
Netscape Enterprise (http://home.netscape.com ): hệ điều hành HPUX 11.0,
Solaris 2.6/7.0, IBM AIX 4.2.1, Compaq Tru64 Unix 4.0d, SGI IRIX 6.5, và NT 4
SP4.