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.. • Không cần
Trang 11 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)
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:
<html>
<head> <title> WWW </title>
<head>
<body>
<p align=center>
<a href=“http://www.hcmuns.edu.vn/”><b>Trường Đại Học Khoa Học Tự Nhiên TP.HCM </b></a>
</b>
</p>
1.User yêu cầu tài
liệu Web, vd như
index.html
2.Web server tìm
tài liệu trên hệ
thống fle
3.Web server lấy tìm tài liệu trên hệ thống fle
4.Web server trả tài liệu về cho browser
Trang 2</html>
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
• 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 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
• 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
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 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
1.User yêu cầu
chương trình CGI
phục vụ 1 trang động
(webstore.cgi)
2.Web server gọi
chương trình
webstore.cgi và gửi
đến chương trình các
tham số mà browser
yêu cầu
3.Web server gnhận các thông tin xuất ra
từ chương trình webstore.cgi
4.Web server chuyển các thông tin xuất ra
từ chương trình CGI
về cho browser
Trang 3• 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
<- Có thể cần thêm kư tự xuống dòng
• Port 80 mặc định dành cho Web server "lắng nghe" các kết nối đến
• Để đáp ứng lệnh HTTP GET , Web server trả về cho chúng ta trang "index.html" thông qua phiên làm việc telnet này, và sau đó đóng kết nối chỉ ra kết thúc tài liệu
Ví dụ thông tin trả về
<HTML>
<HEAD>
<TITLE>eXtropia Homepage</TITLE>
[ ]
</HEAD>
</HTML>
• Nhưng giao thức đơn giản yêu-cầu/đáp-ứng (request/response) này đã phát triển nhanh chóng và được định nghĩa lại thành một giao thức phức tạp (phiên bản hiện tại HTTP/1.1) Có lẽ điểm thay đổi lớn nhất trong HTTP/1.1 là nó hỗ trợ kết nối lâu dài (persistent connection)
• 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ì thật phí phạm, 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ẽ tuyề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
Một Web server phục vụ nội dung như thế nào ?
• Ta có thể định nghĩa HTTP như là một giao thức cho browser giao tiếp với Web server Cái mà một Web server cung cấp đó là nội dung
• Nội dung này phải được định nghĩa theo cách sao cho mà trình duyệt Web có thể tải về và hiển thị nó một cách đúng đắn Phương pháp chính cho 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
Multipurpose Internet Mail Extension?
Trang 4• MIME: định dạng này nói cho Web browser tài liệu đang được truyền đi thuộc tài
ảnh
đị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 ?
• Web servers được thiết kế xoay quanh các mục tiêu cơ bản sau:
– Tiếp nhận các các kết nối mạng 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 clients
– Chạy càng nhanh càng tốt
• 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:
– 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ẽ 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
• 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: đ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
video/mpeg Mpeg mpg mpe
video/quicktime qt mov
Trang 5Request = 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 = <Tên FQDN của máy chủ hoặc địa chỉ IP ở dạng thập phân có chấm> 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
| "CONNECT" ; Section 9.9
| extension-method
extension-method = token
Ví dụ về yêu cầu HTTP:
• GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1
Trang 6• GET /pub/WWW/TheProject.html HTTP/1.1
Host: www.w3.org
http:// www.hcmu.edu.vn /vanphong/dtao.htm
https://
(secure HTTP)
www.company.com /catalog/orders.htm
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
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
Trang 7| "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 ?
• 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
• 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
• 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
• 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
• 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
• 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
• Các phương pháp phân tải giữa các Web servers:
• Phân tải DNS (round-robin type)
• Phân tải phần cứng
• Phân tải phần mềm
• Proxy ngược
• Nội dung được phát tán qua nhiều hosts
Trang 8Vấn đề an toàn Web site?
• 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 đó
• 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
• 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?
• 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
• 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
• 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?
• 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
• 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
• 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
Trang 9• 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
• 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
• 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
• 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 )
• 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
• 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
• 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
Trang 10• 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
• 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
• 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
• 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
• 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-platform, ngôn ngữ
scripting nhúng HTML PHP là một dự án của Apache Software Foundation
• 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
Macintosh
Website (http://clubweb.ora.com) : hệ điều hành server Windows NT / Windows
95 của O'Reilly
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