Tải bản đầy đủ (.doc) (98 trang)

THIẾT KẾ VÀ HIỆN THỰC CHƯƠNG TRÌNH QUẢN LÝ QUẢNG CÁO TRÊN TRANG WEB.doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (626.46 KB, 98 trang )

TRƯỜNG ĐẠI HỌC KỸ THUẬT
KHOA CÔNG NGHỆ THÔNG TIN
* * *
LUẬN VĂN TỐT NGHIỆP
Đề tài :
THIẾT KẾ VÀ HIỆN THỰC
CHƯƠNG TRÌNH QUẢN LÝ QUẢNG CÁO
TRÊN TRANG WEB
Giáo viên hướng dẫn : Ts. NGUYỄN VĂN HIỆP
Sinh viên thực hiện : VŨ NGỌC PHAN
Khoá : 1995 – 2000
Lời cảm ơn
Xin chân thành cám ơn :
- Thầy Nguyễn Văn Hiệp – giảng viên Khoa Công Nghệ Thông Tin
trường Đại Học Kỹ Thuật Tp. Hồ Chí Minh đã tận tình hướng dẫn
em hoàn thành luận văn này.
Trân trọng gởi lời cám ơn đến :
- Ban Giám Hiệu, các thầy cô trường Đại Học Kỹ Thuật Tp. Hồ Chí
Minh
- Ban chủ nhiệm và các thầy cô trong Khoa Công Nghệ Thông Tin
Đã tận tình dạy chỗ em trong suốt thời gian học tập tại trường.
Và tôi cũng xin gởi lời cám ơn đến các bạn cùng khoá đã nhiệt tình giúp đỡ tôi
trong thời gian qua.
NỘI DUNG
Lời cảm ơn
Nội dung
Lời nói đầu
Phần mở đầu...........................................................................................................................1
I. Phương hướng tiếp cận đề tài................................................................................2
II. Mục đích của đề tài...............................................................................................3
III. Yêu cầu của đề tài................................................................................................3


Phần 1 : CƠ SỞ LÝ THUYẾT
CHƯƠNG 1: KHÁI NIỆM CƠ BẢN.......................................................................................4
I. Mô hình ứng dụng client - server và ứng dụng trên Web............................................4
II. ng dụng trên Web.....................................................................................................7
III. CGI và ISAPI..............................................................................................................8
1. CGI....................................................................................................................8
2. ISAPI...............................................................................................................13
IV. So sánh và đánh giá.............................................................................................17
1. Hoạt động của ứng dụng CGI........................................................................17
2. CGI, ISAPI và WINCGI................................................................................17
3. Overhead của ISAPI......................................................................................19
4. tạo ứng dụng Internet Server bằng ISAPI......................................................19
CHƯƠNG 2 : ISAPI EXTENSIONS.....................................................................................20
I. DLL trong ISAPI Extensions......................................................................................20
II. MFC cho ISAPI Extensions.......................................................................................24
1. CHttpServer.....................................................................................................24
2. CHttpServerContext........................................................................................24
3. CHtmlStream...................................................................................................25
4. Form và Parse Map..........................................................................................25
III. Sử dụng ISAPI Extension để truy xuất database.......................................................29
1. ODBC và DAO................................................................................................29
2. Sử dụng MFC để truy xuất database................................................................29
3. ISAPI trong việc truy xuất database................................................................31
CHƯƠNG 3 : CHUẨN ODBC - INTERNET INFORMATION SERVER.............................34
I. ODBC.........................................................................................................................34
II. Internet Information Server .......................................................................................36
1. Web server......................................................................................................36
2. IIS....................................................................................................................36
CHƯƠNG 4: NHỮNG KHÁI NIỆM VỀ QUẢNG CÁO TRÊN WEB..................................40
I. Một số đònh nghóa ......................................................................................................40

II. Chiến lược quảng cáo.................................................................................................42
1. Dạng file của Ad banner..................................................................................42
2. Alt Text............................................................................................................42
3. Đưa ad banner ra trang web.............................................................................43
4. Sắp xếp Ad banner..........................................................................................43
PHẦN 2 : HIỆN THỰC CHƯƠNG TRÌNH
CHƯƠNG 1 : PHÂN TÍCH CHƯƠNG TRÌNH.....................................................................46
I. Phân tích chương trình..................................................................................................46
1. Advertiser .......................................................................................................47
2. Campaign ........................................................................................................47
3. Advertisement.................................................................................................48
II. Mô tả chương trình .....................................................................................................49
1. Phía Advertiser ...............................................................................................49
2. Phía AdMaster.................................................................................................50
CHƯƠNG 2 :THIẾT KẾ CHƯƠNG TRÌNH.........................................................................52
I. Cơ sở dữ liệu ...............................................................................................................52
1. Tổ chức cơ sở dữ liệu.......................................................................................52
2. Các store procedure.........................................................................................59
II. Giải thuật đưa banner quảng cáo ra trang Web..........................................................63
1. Giải thuật tạo số ngẫu nhiên............................................................................63
2. Giải thuật chọn ad banner trong nhóm.............................................................64
III. Các thành phần chính của AdServer.........................................................................66
1. Advertiser........................................................................................................66
2. AdMaster.........................................................................................................66
3. Ad-Server........................................................................................................66
4. Quy trình thực hiện..........................................................................................68
Kết luận ...............................................................................................................................92
Phụ lục..................................................................................................................................93
Tài liệu tham khảo..............................................................................................................111
Lời mở đầu

M
ột trong các hướng phát triển quan trọng hàng đầu của Công nghệ Thông Tin hiện nay là
các công nghệ liên quan đến Internet. Trong hướng này thì quan trọng hàng đầu lại là các
hệ thống thương mại điện tử thực hiện trên Internet, trong đó chuyên mục quảng cáo và
quản lý các chuyên mục này góp phần không nhỏ cho sự thành công của thương mại điện
tử.
Tất cả nhà sản xuất đều muốn sản phẩm của mình sản xuất ra được càng nhiều
khách hàng biết đến và được bán ra với doanh thu cao nhất càng tốt. Khi nền kinh tế thò
trường phát triển, sản phẩm của nhà sản xuất phải cạnh tranh mãnh liệt thì việc quảng cáo
càng chiếm phần quan trọng trong giai đoạn phân phối sản phẩm. Họ có thể sử dụng các
phương tiện truyền thông đại chúng như phát thanh, truyền hình, các biểu ngữ v.v… Đó là
cách quảng cáo trong thời đại nông nghiệp và công nghiệp.
Đến thời đại thông tin, công nghệ thông tin được nhúng ghép vào hầu hết các sản
phẩm và dòch vụ kinh tế xã hội, làm tăng các giá trò hàng hoá và dòch vụ. Cùng với mỗi thay
đổi trong phương thức giao tiếp, cũng như nhu cầu gia tăng của số lượng người sử dụng
Internet kèm theo việc mua sắm hàng hoá và dòch vụ qua Internet ngày càng nhiều nên các
doanh nghiệp cảm nhận được áp lực phải hành động nhanh với những dòch vụ mới và một cơ
sở hạ tầng hợp lý để có thể cạnh tranh trong thế giới này. Việc thay đổi cách thức quảng
cáo và quản lý quảng cáo nhằm phổ biến rộng rãi sản phẩm của doanh nghiệp mình là điều
không thể thiếu. Chẳng hạn trong việc phục vụ khách du lòch, Công nghệ Thông tin tham
gia vào từ khâu đặt vé máy bay, đặt chỗ khách sạn đến các dòch vụ thông tin đi kèm.
Qua những yêu cầu như trên mà em đã chọn đề tài cho Luận văn tốt nghiệp của
mình là “THIẾT KẾ VÀ HIỆN THỰC CHƯƠNG TRÌNH QUẢN LÝ QUẢNG CÁO TRÊN
TRANG WEB”. Bước đầu nghiên cứu, hiện thực với kiến thức, khả năng và thời gian có
hạn, luận văn này chắc chắn sẽ không tránh khỏi những thiếu sót, rất mong được quý thầy
cô và các bạn góp ý để có thể hoàn chỉnh hơn trong quá trình nghiên cứu sau này.
Tháng 1/2000
SINH VIÊN THỰC HIỆN
MÔÛ ÑAÀU
I. Phương hướng tiếp cận đề tài :

Hệ thống quản lý quảng cáo trên Web được phát triển dựa trên mô hình
Client/Server. Giao tiếp giữa client và server thông qua CGI, là một chuẩn
giao tiếp chung giữa browser và server.
1. Các bước tiếp cận đề tài :
Ban đầu, khái niệm quảng cáo trên Web đối với em hết sức mơ hồ và xa lạ. Để có
khái niệm và biết cách thức hoạt động của các hệ thống quản lý quảng cáo trên
Web, em đã tham khảo một số Web site hiện thực loại hình quảng cáo này như :
DoubleClick, AdServer. . . , tham khảo thành phần AdServer trong gói phần mềm
Microsoft Site Server.
Ngoài những đặc điểm tương tự như quảng cáo bằng các phương tiện thông thường
như : báo chí, truyền hình. . . Quảng cáo trên Web còn đem lại cho ta khả năng nắm
bắt thông tin khách hàng tốt hơn, nhanh chóng và chính xác hơn. Ngoài ra, chi phí
bỏ ra cho quảng cáo trên Web lại rẻ hơn nhiều so với các loại quảng cáo khác.
2. Nghiên cứu các công cụ lập trình trên Web :
- Để tạo trang Web hoàn chỉnh và liên kết chúng với nhau, ở đây ta sử dụng ngôn
ngữ HTML, JavaScript, cũng như các liên kết và Method trong một form HTML.
- Để thao tác với Cơ sở dữ liệu trên server từ Browser, ta sử dụng các CGI scripts
giao tiếp với Database server thông qua lớp vỏ và các lệnh của nó.
- Cơ sở dữ liệu trên server là một database Server (cụ thể là SQL Server phiên bản
7.0)
- Vì chương trình hiện thực trên môi Microsoft Windows nên sẽ được viết bằng
Visual C++, sử dụng Wizard ISAPI Extension, một phương tiện tương đương với
CGI nhưng chạy nhanh hơn CGI, chạy rất ổn đònh đối với lượng tải lớn và truy xuất
cơ sở dữ liệu khá nhanh.
II. Mục đích của đề tài :
Đề tài được thực hiện nhằm mục đích:
- Nghiên cứu và hệ thống hoá nguyên tắc, kỹ thuật tổ chức một chương trình quản lý
quảng cáo trên Web.
- Nghiên cứu cơ chế CGI và áp dụng cơ chế này vào đề tài thông qua chương trình
trên.

III. Yêu cầu của đề tài:
Yêu đầu đặt ra đối với đề tài là :
- Tổ chức cơ sở dữ liệu quảng cáo.
- Xây dựng giải thuật hiển thò banner quảng cáo ra trang Web dựa vào trọng số của
banner.
Banner quảng cáo được đưa ra trang Web dựa vào trọng số của chúng. Trong tập hợp
nhiều banner, banner nào có trọng số càng lớn thì khả năng xuất hiện của banner
này trên trang Web càng lớn. Giải thuật được xây dựng sao cho khả năng chọn lựa
banner là tối ưu và hợp lý nhất.
- Thống kê các thông tin liên quan đến banner quảng cáo.
1
CÔ SÔÛ LYÙ THUYEÁT



_________________________________________________________Chương 1
NHỮNG KHÁI NIỆM CƠ BẢN
I. Mô hình ứng dụng Client - Server và ứng dụng trên Web
Client - Server là một mô hình tính toán khi máy client gởi một yêu cầu nào đó tới
máy server. Yêu cầu thường là để truy xuất thông tin như những yêu cầu trong database,
hay yêu cầu để xử lý như cập nhật database hoặc chạy một số quá trình nào đó. Máy client
thực hiện yêu cầu, và máy server đáp ứng yêu cầu này. Lợi ích của hệ thống client-server
là tận dụng được sức mạnh của mỗi máy hoặc hệ điều hành. Client thực hiện một số ứng
dụng về mặt logic và thể hiện cho người sử dụng, trong khi server thực hiện việc xử lý phía
sau và các chức năng về cơ sở dữ liệu.
Hình 1.1 Mô hình client – server.
Cấu hình cơ bản của ứng dụng client - server :
Hình 1.2 Cấu hình cơ bản của ứng dụng client – server
Đối với ứng dụng trên Web, trình duyệt (browser) phục vụ như là client chung, gởi
yêu cầu về một trang web, dòch ra ngôn ngữ HTML, và hiển thò nó cho người sử dụng. Web

server nhận yêu cầu thông qua giao thức dòch chuyển siêu văn bản (HTTP) và trả về thông
Client
Request
Response
Server


Database Server
- Quản lý dữ liệu
- Lệnh SQL truy xuất database
- Chương trình ứng dụng
Application Server
Client
tin cần thiết trong dạng HTML mà client có thể hiểu được. Tương tự như mô hình client-
server, ta có thể phân bố việc xử lý ứng dụng và quản lý cơ sở dữ liệu thành từng phần với
những mức độ khác nhau giữa máy client và máy server. Hình1.3 mô tả cấu trúc của một
ứng dụng web điển hình :
Hình 1.3 Mô hình web điển hình
So với ứng dụng client - server, ưu điểm chính của ứng dụng trên web là việc triển
khai ứng dụng. Với ứng dụng client-server, ta phải cài đặt lại thành phần trên client mỗi khi
thay đổi và cập nhật ứng dụng. Trong một ứng dụng web, với mỗi tính năng hay việc cập
nhật mới ứng dụng, ta không phải đưa ra một chương trình thực thi mới trên mỗi máy
desktop của người sử dụng. Browser phục vụ như là client chung, cung cấp việc truy cập tới
thông tin hiện có trên server. Chi phí trong việc kiểm soát phiên bản, phân bố phần mềm,
và quản trò hệ thống giảm đi rất nhiều đối với ứng dụng trên Web. Hình 1.4 mô tả cấu hình
cơ bản của ứng dụng trên Web
Hình 1.4 Cấu hình cơ bản của ứng dụng trên Web
Client

Server


HTTP Request for a web page
HTML Document response


Database Server

Web Server

Client

Web browser

Internet
II. Ứng dụng trên Web :
Khác với ứng dụng chạy trên máy tính đơn lẻ khi mà việc xử lý được thực hiện trên
mỗi máy tính, ứng dụng Web tập trung xử lý trên server (gồm một hay nhiều server). Vì
browser chỉ đưa ra giao diện người sử dụng, toàn bộ ứng dụng được đặt trên server : (Hình
1.5)
Application Server (Server ứng dụng) : là phần mềm cung cấp các dòch vụ để hỗ trợ
cho các ứng dụng Web làm chức năng kết nối người dùng đầu cuối với cơ sở dữ liệu cộng
tác. Nó hoạt động như một môi giới trung gian giữa trình duyệt Web và Database Server,
nhờ đó không cần phải cài đặt ứng dụng đòi hỏi cao về mặt bảo trì cho người dùng đầu
cuối .
Trong hình 1.6 dưới đây, ta có một giao diện, những đối tượng bên trong để thực
hiện công việc nào đó cùng với những dòch vụ. Hình vẽ cho thấy tất cả những công việc
chính đều đặt trên server, trên browser (client) chỉ còn mỗi user-interface.
Web Browser
Web Browser
Web server

Web server
Internet/Intranet
Network
Application Server
Application Server
Network
Databas
e
Web Browser
Web Browser
Internet/Intrane
t
Network
Networ
k
User Interface
User Interface
Application Server
Application Server
Data service objects
Data service objects
Web server
Web server
Business Objects
Business Objects
Web Interface
Web Interface
Databas
e
Đối với Web server, thay vì user-interface, ta sẽ có Web-interface. Đây là một lớp

chương trình tương tác với Web server nhằm mục đích giao tiếp với client. Web-interface
đóng vai trò như lớp keo giữa những đối tượng và trang HTML được gửi tới browser của
client. Web-interface cung cấp HTML cho browser thông qua Web server và nhận những
input từ user thông qua browser và Web server. Có nhiều công nghệ được dùng để xây dựng
Web-interface này, chẳng hạn như CGI, ISAPI, ASP . . .Giữa những công nghệ này, có
những ưu và nhược điểm khác nhau, tuỳ theo yêu cầu của ứng dụng mà ta sẽ chọn công
nghệ thích hợp.
III. CGI và ISAPI
1.CGI :
CGI (viết tắt của Common Gateway Interface) : là chuẩn để kết nối chương trình
ứng dụng với Web server. Dữ liệu từ bảng biểu do người dùng điền vào trên trang Web
được chuyển đến cho ứng dụng CGI, ứng dụng này sau đó sẽ gửi trả nội dung Web được tạo
ra theo yêu cầu ngược về cho trình duyệt (browser) của người dùng.
Thuận lợi của ứng dụng CGI là tính phổ biến và dễ viết. ng dụng CGI có thể chạy
trên mọi Web server thông dụng và có thể được viết bằng bất kỳ ngôn ngữ script nào như
Perl hay Visual Basic hoặc ngôn ngữ biên dòch như C.
Chương trình Script :
Script là bất cứ dạng chương trình thực thi nào hay chuỗi các chương trình mà nó có
thể bắt đầu bởi Server để đáp ứng đối với yêu cầu của Client.
Các biến môi trường :
Trước khi đưa ra chương trình gateway, Server khởi động một vài biến mội trường
mà được tuần tự truy xuất tới chương trình gateway. Trong thực tế, cơ chế được sử dụng là
truyền thông tin đường dẫn mở rộng tới chương trình gateway. Tên và ý nghóa của các biến
môi trường sẽ được trình bày như bảng sau :
Hình 1.6
Biến nghóa
ALL_HTTP
-Tất cả những header HTTP không được phân tích theo một
trong những biến dưới đây. Những biến này có dạng :
HTTP_<header field name>.

AUTH_PASS
-Lấy password tương ứng với REMOTE_USER được cung cấp
từ client. Nó là một chuỗi kết thúc bằng ký hiệu null.
AUTH_TYPE
-Một phương thức yêu cầu user name và password. Nếu là xác
nhận Basic, chuỗi sẽ là "Basic". Đối với WindowsNT
Challenge/Response, chuỗi sẽ là "NTLM". Những xác nhận
khác sẽ có những chuỗi khác tương ứng. Nếu chuỗi rỗng thì
không có xác nhận nào được sử dụng.
CONTENT_LENGTH
-Chiều dài (theo ki tự) của dữ liệu đang được gởi tới bởi client
dùng phương thức POST.
CONTENT_TYPE
-Cách thức thông tin được gửi đi từ client nếu sử dụng phương
thức POST.
GATEWAY_INTERFA
CE
-Phiên bản của đặc tả CGI. Phiên bản hiện hành là CGI/1.1.
HTTP_ACCEPT
-Kiểu dữ liệu mà client mặc nhiên chấp nhận. Ví dụ nó có thể
là: image/jpeg, image/gif để chỉ ra rằng browser hiển thò cả
hình GIF và JPEG, hoặc text/html . . .
PATH_INFO
-Thông tin thêm về đường dẫn, được truyền tới bởi client. nó
nằm trước chuỗi query và nằm sau tên script. ví dụ :
/>Param, thì PATH_INFO sẽ là /mydir/myfile
PATH_TRANSLATED
-Đây là giá trò của PATH_INFO, nhưng sẽ thay thư mục ảo
bằng thư mục vật lý trên đóa.
QUERY_STRING

-Bất cứ thông tin nào đi sau ký tự ? trong yêu cầu. Chuỗi này
là đã được mã hoá, chẳng hạn : khoảng trắng sẽ được chuyển
thành dấu + và ký tự không nằm trong bảng alphabet sẽ được
chuyển thành dấu % cùng với một số hex tương ứng với ký tự
đó trong bảng mã ASCII.
REMOTE_ADDR - Đòa chỉ IP của client
REMOTE_HOST - Hostname của client.
REMOTE_USER - Tên mà user đang dùng để truy xuất server
REQUEST_METHOD - Phương thức yêu cầu HTTP, luôn là POST hoặc GET
SCRIPT_NAME -Tên của file script đang được yêu cầu (đang thực thi).
SERVER_NAME - Tên hay đòa chỉ IP của server.
SERVER_PORT - Cổng TCP/IP đã nhận yêu cầu.
SERVER_PROTOCOL - Loại giao thức đang được dùng. HTTP/1.0 hay HTTP/1.1
SERVER_SOFTWARE
-Tên và version của web server mà chương trình CGI/ISAPI
đang chạy.
Bảng các biến môi trường CGI
1.1. Đầu vào (Input)
Server dùng các biến môi trường để gởi đến CGI script những thông số của nó. Hai
biến môi trường chính dùng cho mục đích này là: QUERY_STRING and PATH_INFO.
Đầu vào dữ liệu thật sự cho quá trình script đến từ một Form HTML. Browser nhận
dữ liệu mà User đưa vào và đònh dạng nó như một chuỗi ghép của các ký tự ASCII được kết
hợp bởi các cặp thuộc tính name/value (tên/giá trò). Phần Name là tên của trường, Phần
value là những gì User đưa vào Form. Dữ liệu này sẽ được xử lý theo nguyên tắc khoảng
trống được đổi thành cấc dấu + và mỗi cặp name/value được đònh dạng thành cấu trúc
name=value.
Form HTML xác đònh một trong hai phương pháp input là GET và POST
Phương pháp GET
Nếu Form dùng phương phương pháp GET, chương trình CGI nhận cặp name/value
trong biến môi trường QUERY_STRING. Chuỗi truy vấn (query)sẽ được nối vào URL của

chương trình khi client gởi đi một yêu cầu tới server. Đối với GET, ta có thể truy xuất
chương trình trên Web server với một truy vấn mà không cần form. Tuy nhiên, chiều dài
chuỗi query chỉ giới hạn có 1KB.
Phương pháp POST
Nếu Form dùng phương phương pháp POST, chương trình CGI nhận độ dài của dữ
liệu mã hóa các cặp name/value trong biến môi trường CONTENT_LENGTH. Chương trình
sau đó đọc dữ liệu từ đầu vào chuẩn. Server không nối con trỏ EOF đến cuối dữ liệu.
Hơn nữa, script nhận kiểu dữ liệu đến trong biến môi trường CONTENT_TYPE. Đây
là kiểu nội dung MIME (Multipurpose Internet Mail Extensions) cấu hình trong Server,
thường là loại text/html.
Đối với POST, chiều dài chuỗi query không giới hạn, hơn nữa ta không phải quan
tâm về việc xén bớt dữ liệu của client hay server. Tuy nhiên , chương trình sẽ phải đọc từ
input chuẩn (như form ...)
1.2. Đầu ra (Output) :
CGI Script gởi đầu ra của nó đến STDOUT. Đầu ra này thường là tài liệu ở dạng tập
tin HTML mà Script phát ra. Trong vài trường hợp, đầu ra nnày là một tham khảo đến vài
dạng dữ liệu khác cho Server như là ảnh, văn bản thuần túy hay một đoạn âm thanh. Trong
những trường hợp như thế, đầu ra là tập hợp các lệnh đối với Server cho việc nhận đối
tượng mong muốn.
Đầu ra từ một CGI Script có hai phần tiêu đề (header) và dữ liệu (data).
Output header
CGI script sẽ cho Server biết loại tài liệu gì nó sẽ gởi trở lại bằng cách gởi kèm một
tiêu đề mô tả ngắn dạng văn bản ASCII. Nếu đầu ra là tài liệu hoàn toàn, tiêu đề đưa ra là
loại MIME. Nếu đầu ra là có tham khảo đến tài liệu khác, tiêu đề sẽ là loại tham khảo
URL.
Sau đây là một số Header HTTP :
Header Mô tả
Content-length
Content-type
Expires

Location
Pragma
Status
- Chiều dài (bytes) của dữ liệu xuất (dữ liệu nhò phân).
- Kiểu nội dung MIME của dữ liệu xuất.
- Ngày và giờ khi tài liệu không còn hợp lệ và nên được nạp lại
bởi browser.
- Tái đònh hướng server (nhưng không được gởi như là một phần
của một header đầy đủ)
- Bật hoặc tắt cache cho tài liệu.
- Trạng thái của yêu cầu
Đặc điểm chung của header :
- Header sinh ra từ chương trình CGI không cần phải theo một thứ tự nhất đònh nào.
- Khối header phải kết thúc với một dòng trắng :
Để biết ta đang làm gì với thông tin của header, server sẽ tìm kiếm khoảng trắng.
Bất kỳ thông tin nào được lấy trước dòng trắng là thông tin của header, mọi thông tin đi sau
dòng trắng được giả đònh như là dữ liệu. Nếu ta không đặt dòng trắng sau header, server sẽ
giả đònh sai và toàn bộ thông tin được xem như là HTTP header, và sẽ sinh ra lỗi trên
server.
Content Type :
Header phổ biến nhất là:
Content-type: text/html
Header này thể hiện dữ liệu theo sau là tài liệu HTML phục vụ cho browser phía
Client.
Các Content-type đến từ MIME content-type. Sau đây là một vài đònh dạng chung
một số kiểu content-type tương ứng.
Kiểu file
(extension)
Content type (MIME)
HTML

TXT
PS
JPEG
GIF
AU
MPEG
- text/html
- text/plain
- application/postscript
- image/jpeg
- image/gif
- audio/basic
- video/mpeg
Bảng đònh dạng và kiểu Content-Type
Location:
Để thực hiện tái đònh hướng server, client gởi một header location để báo cho server
rằng cần tài liệu nào. Server sẽ truy xuất tài liệu được chỉ ra từ Web, đưa tài liệu đó ra cho
client. Hình sau đây mô tả tái đònh hướng server :
Status:
Mã trạng thái được sử dụng bởi protocol HTTP để giao tiếp với trạng thái của yêu
cầu. Ví dụ, nếu tài liệu không tồn tại, server trả về mã “404” cho browser. Nếu tài đã được
di chuyển đi, mã “301”được trả về. Bảng các mã trạng thái được mô tả trong phần phụ lục
C.
www.demo.com
User
Yêu cầu

CGI
WWW Browser
(client)

Application

Lấy
Gọi chương trình CGI tương
ứng
FORM

 

Hiển thò
tài liệu
Server
Redirect
INTERNET
Hình 1.7
Xuất Dữ liệu
Dữ liệu xuất theo tiêu đề và phải nằm trong một dạng như được thiết kế bởi tiêu đề.
Từ khi đầu ra được phục vụ trở lại browser, dữ liệu có thể là bất cứ dạng nào mà browser có
thể chấp nhận.
Dạng tốt nhất là tập tin HTML, bởi lẽ việc phục vụ xuất chương trình dạng HTML ta
bao gồm khả năng nhúng các tham khảo đến các kiểu dữ liệu khác và trộn nó vào đầu ra
của ta.
1.3. Phương thức hoạt động của CGI Script
Server gọi chương trình CGI dựa vào thông tin nó nhận được từ browser. Hình 1.8
trình bày cách thức hoạt động giữa browser, server và CGI Script như sau:
Browser gởi yêu cầu chương trình CGI thông qua server. Server nhận yêu cầu từ
browser, xem URL chỉ đến chương trình CGI và thực thi chương trình.
Chương trình thực hiện vài tác vụ dựa vào đầu vào từ browser. Những tác vụ như
trên có thể là tính một giá trò, gọi vài chương trình khác trên hệ thống hay truy vấn dữ liệu.
Chương trình đònh dạng kết quả hoạt động của nó theo cách mà server có thể hiểu

được.
Server sau đó đưa kết quả lại browser. Rồi browser đònh dạng và hiển thò kết quả
cho người đọc.
Hình 1.8 Thông tin truyền từ browser đến chương trình CGI và quay trở lại
2. ISAPI :
ISAPI (Internet Server Application Programing Interface) : ra đời sau trong lónh vực
giao diện động, là một API mở được phát triển bởi Process Software and Microsoft. API này
được thiết kế để tối ưu hiệu suất của những ứng dụng sinh ra trang động trên server
Intranet/Internet.
Về mặc chức năng, ISAPI rất giống với CGI, kỹ thuật viết mã script và ứng dụng cho
CGI và ISAPI hoàn toàn giống nhau. Tuy nhiên, ứng dụng CGI and ISAPI chạy rất khác
nhau trên Windows NT.
Serve
r
User
Gởi một form đã hoàn
tất

CGI
WWW
Browser
(client)
Applicati
on


Trả lời của chương
trình CGI
Trả lời của chương
trình CGI

Gọi CGI
FORM
ISAPI cung cấp một tập hợp những giao diện cho phép ta tạo ra extensions và filters
cho MSIIS (Microsoft Interner Information Server). IIS là web server đầu tiên hỗ trợ cho
mô hình API này, tuy nhiên lập trình ISAPI không chỉ có ở IIS, hoặc đối với server chạy
WinNT/Windows95, mà còn được hỗ trợ ở nhiều server khác.
Có hai loại ISAPI là ISAPI Extension và ISAPI Filter, cả hai có thể chạy trên bất kỳ
Web Server nào có hỗ trợ ISAPI.
Hình 1.9 mô tả cách hoạt động của một ứng dụng ISAPI trên Internet. Browser chạy
trên những máy tính client, truy xuất tới Web và hiển thò trang HTML chứa căn bản, đồ hoạ,
ActiveX control và tài liệu. Server cung cấp các dòch vụ (HTTP, FTP, gopher) và chạy
những ứng dụng server extension sử dụng ISAPI (hay CGI).
2.1. ISAPI extensions :
Một ISAPI extension là một file DLL được nạp và gọi bởi một Web server (HTTP
server). Internet server extension (hay còn gọi là Internet Server Applications - ISAs) được
gọi từ browser của ứng dụng và cung cấp những chức năng tương tự như ứng dụng CGI.
Khi lập trình CGI, đối với mỗi yêu cầu nhận được, một quá trình mới sẽ được tạo ra,
sau đó thực thi và kết thúc. Việc tạo ra và chấm dứt thực thi những quá trình này có thể dẫn
tới việc sử dụng dư thừa thời gian và bộ nhớ.
ISAPI extensions được tạo ra và chạy như những DLLs chứ không phải những tập tin
thực thi. Một ISAPI chạy như một thread trong cùng không gian của process hoặc bộ nhớ
của Web server. Kết quả là đoạn mã chỉ được nạp một lần dù có bao nhiêu instance đang
tích cực tại một thời điểm nào đó cho trước. Vì ISAPI extension chạy như là một thread của
WW Server running
ISAPI Extensions and
Filters
Add ftp,http and
gopher support
using WinInet
Asynchronous moniker

transfer information
without blocking
INTERNE
T
WWW Client
running a Web
Browser
Hình 1.9
ISAPI
Filter2
HTML
docume
nt
Client ISAPI
request
Client HTML
request
ISAPI
Filter1
ISAPI
Extensio
n
WebServer
Process
Hình 1.10
Web server, nên nó có thể truy xuất trực tiếp tới không gian đòa chỉ của Web server. Do đó
thông tin được chuyển từ Web server tới ứng dụng và từ ứng dụng tới Web server một nhanh
chóng và dễ dàng.
Tổng phí (overhead)của việc tạo thêm thread để xử lý yêu cầu ISAPI thường được
so sánh với tổng phí của việc tạo thêm process và truyền cho process dữ liệu mà nó yêu

cầu.
Thuận lợi của ISAPI Server Extensions
Những ISAPI server extension DLL (ISAs), sau khi được viết hoàn chỉnh sẽ được
nạp và gọi bởi Web server. Trong một trang Web, người sử dụng có thể điền vào form và
click vào một button submit để gởi dữ liệu tới Web server và gọi ISAs. ISAs có thể xử lý
thông tin để đưa ra nội dung yêu cầu hoặc lưu giữ thông tin vào trong database. Web server
extension có thể sử dụng thông tin trong database để xây dựng những trang Web động, rồi
hiển thò chúng trên máy tính của client. Ứng dụng ISAs cũng có thể thêm vào tuỳ chọn khác
về mặt chức năng rồi gởi dữ liệu cho client thông qua HTTP.
Hạn chế của ISAPI Server Extensions
Tất cả ISAPI extension phải là thread-safe, do đó người lập trình phải hiểu rõ về
việc sử dụng bộ nhớ. Vì ứng dụng ISAPI truy xuất trực tiếp tới không gian đòa chỉ của Web
server, bất kỳ con trỏ sai lệch nào cũng có thể ghi đè lên thông tin server chính. Như đã
thấy trong sơ đồ của ISAPI Web server, thông qua những con trỏ, ISAPI extension có quyền
truy xuất tới bất kỳ dữ liệu nào trong Web server. Điều này có lợi khi hai ISAPI extension
giao tiếp với nhau; tuy nhiên cũng dễ dẫn đến việc một extension làm hư hại dữ liệu của
extension kia hoặc làm cho toàn bộ server bò dừng lại.
Ngoài ra, khi lập trình ISAPI phải lưu ý trong việc giải phóng bộ nhớ. Vì ISAPI DLL
chạy như là một bộ phận của Web server, cả hai sẽ sử dụng cùng heap. Đối với CGI , nếu ta
quên giải phóng bộ nhớ, thì hệ điều hành sẽ thực hiện điều này khi chương trình chấm dứt.
Tuy nhiên đối với ISAPI, nếu ta sử dụng bộ nhớ được cấp phát, rồi sau đó không giải phóng
bộ nhớ khi ra khỏi chương trình, thì bộ nhớ sẽ bò giữ cho tới khi process của Web server
chấm dứt. Cứ như vậy, mỗi lần được gọi ISAPI extension sẽ dùng thêm bộ nhớ, rồi cuối
cùng extension sẽ làm dừng server.
2.2. ISAPI Filters
Trong ISAPI còn có
một lớp những chương trình
không tương đương với CGI,
được gọi là ISAPI filter. ISAPI
filter là DLL được nạp vào

mỗi lần Web server khởi động
và được gọi mỗi lần Web
server nhận một yêu cầu.
Hình 1.11
Windows NT
server security
process
Windows NT
server security
process
ISAPI Filter
security
ISAPI Filter
security
Application
Application
Web browser
Web browser
Internet
Điều này cho phép ta có thể tuỳ biến dòng dữ liệu đi vào và đi ra Web server. ISAPI
Filter có thể nhận mọi loại yêu cầu Web server. Khả năng ghi nhận được những yêu cầu về
Web và xử lý những yêu cầu này trước (pre-procesing) hoặc sau (post-processing) khi Web
server truy xuất chúng là một điểm mạnh của filter. Hình trên (hình 1.5) mô tả giao tiếp
giữa ISAPI Filters và ISAPI Extensions với những yêu cầu từ phía browser.
Filter ghi nhận thông báo của những sự kiện, chẳng hạn như log vào hệ thống hoặc
ánh xạ URL. Khi sự kiện được ghi nhận xảy ra, filter sẽ được gọi và ta có thể giám sát và
thay đổi dữ liệu (trên đường dữ liệu đi từ server tới client và ngược lại). ISAPI filter được sử
dụng để kiểm soát những yêu cầu HTTP. Là một công cụ hữu hiệu để tuỳ biến về mặt chức
năng cho web server.
Hình 1.11 mô tả vai trò của ISAPI filter trong hệ thống (như là một rào cản an toàn)

CGI
Process
Standard
Out
Environmental
Variables
WebServer
Process
CGI
Process
CGI
Process
Web
Server
Process
WinCG
I
Process
Private
Profile File
Private Profile
File
WinCG
I
Process
WinCG
I
Process
IV.So sánh và đánh giá
1. Hoạt động của một ứng dụng CGI :

ng dụng CGI được biên dòch thành những chương trình thực thi (.exe) chạy độc lập.
Khi những chương trình này chạy, Windows NT sẽ tạo ra quá trình(process) độc lập mới cho
mỗi yêu cầu của client, những yêu cầu này được xử lý bởi ứng dụng. Tại bất kỳ một thời
điểm nào cho trước, server sẽ hỗ trợ cho một quá trình độc lập của yêu cầu đang tồn tại. Khi
yêu cầu hoàn tất, server phải thực hiện một chuỗi những bước để hủy bỏ quá trình.
CGI ban đầu được tạo ra trong môi trường UNIX, trong môi trường này, quá trình là
đơn vò cơ bản của mọi hoạt động, hơn nữa một quá trình trên UNIX có overhead thấp hơn
một quá trình trên Windows NT. Trên WindowsNT, thread là đơn vò cơ bản của mọi hoạt
động, và quá trình có overhead đáng kể. Mỗi quá trình được cấp phát một vùng nhớ vật lý
riêng, có thể là vùng nhớ có kích thước cố đònh (trang) hoặc không cố đònh, và được bảo vệ
bằng những cơ chế bảo mật trên Windows NT. Vì CGI yêu cầu mỗi chương trình chạy trong
một quá trình riêng, nên ứng dụng CGI có overhead cao hơn ứng dụng ISAPI extension.
2. ISAPI, CGI và WinCGI :
Đối với người dùng đầu cuối, sẽ không có gì khác nhau giữa một chương trình ISAPI
(ở đây lấy ví dụ điển hình là một
ISAPI extension) và một chương
trình CGI hay WinCGI. Tuy nhiên
đối với người lập trình, giữa chúng
có sự khác nhau và sự khác nhau
chính nằm trong giao diện giữa
server và chương trình.
Đối với CGI, khi một
chương trình nhận được một yêu
cầu (request), thông tin về yêu cầu
đó được truyền đến như là những
biến môi trường, và đáp ứng được
trả về cho Web server theo
standard output. Do đó, chương
trình CGI đòi hỏi ngôn ngữ mà ta
viết trên CGI có thể đọc và viết từ

standard input và standard output;
điều này gây khó khăn cho nhiều ngôn ngữ lập trình trên Windows khi được sử dụng để lập
trình CGI.
Để sử dụng những chương trình dựa trên Windows cho CGI, ta phải sử dụng
WinCGI. Khi Web server sử dụng giao diện WinCGI, dữ liệu được truyền tới lui nhờ vào
tập tin mô tả riêng (private profile file). Trước đây, hầu hết ứng dụng Web trên Windows
được viết bởi CGI và WinCGI. Trong CGI và WinCGI có một lớp (layer), lớp này tách Web
server ra khỏi ứng dụng Web. Sự có mặt của lớp này làm cho hiệu suất giảm xuống.
Để loại bỏ điều này, ISAPI cho phép Web server giao tiếp với ứng dụng ISAPI
thông qua cấu trúc Extension Control Block (ECB). ECB là một con trỏ tới mã và dữ liệu
thích hợp mà ứng dụng ISAPI muốn
truy xuất. Lý do mà chương trình ISAPI
chỉ cần một con trỏ để truyền thông tin
tới là vì tất cả DLL ISAPI chạy trong
không gian của quá trình của chính
Web server. Đối với mỗi yêu cầu
ISAPI, Web server tạo ra một cấu trúc
ECB duy nhất, và truyền một con trỏ
cho cấu trúc này qua những hàm
ISAPI. Bằng cách này, ISAPI
extension có thể nhanh chóng tìm ra
thông tin cần thiết - bằng việc sử dụng
một tham chiếu tới ECB mà server tạo ra cho nó. Tạo ra và duy trì một cấu trúc dữ liệu thì
dễ hơn và nhanh hơn là tạo ra một process mới.
Một khác biệt nữa giữa CGI và ISAPI là sự chọn lựa ngôn ngữ lập trình để viết
chương trình. Những chương trình CGI có thể được viết bằng bất kỳ ngôn ngữ nào có thể
xuất ra standard output, trong khi đó chương trình ISAPI chỉ có thể được viết bằng ngôn ngữ
có thể tạo ra những file DLL.
Khi được nạp, mã DLL của ISAPI là một phần của dòch vụ Web, và khi đó ứng dụng
ISAPI hoạt động như một phần mở rộng.

Một ứng dụng ISAPI cũng có những lợi thế là nhận được hỗ trợ của Win32 và chuẩn
ODBC.
Tuy nhiên, khác biệt cơ bản nhất giữa ISAPI và CGI là : chương trình ISAPI chạy
trong không gian đòa chỉ của chính Web server (in-process), còn chương trình CGI chạy theo
từng quá trình riêng biệt (out-of-process). Do đó, chương trình ISAPI có thể truy xuất tới
mọi tài nguyên có sẵn của Web server. Sử dụng nhiều thread để đồng bộ công việc cho
phép IIS sử dụng tài nguyên của hệ thống có hiệu quả hơn.
CGI tạo ra một process riêng biệt cho mỗi yêu cầu. Với CGI, mỗi lần một Web
server nhận một yêu cầu, nó phải khởi tạo một process mới do đó đòi hỏi phải có một tài
nguyên lớn để duy trì những process này. ng dụng ISAPI có overhead thấp hơn ứng dụng
CGI, vì chúng không đòi phải tạo ra thêm những process và không phải thực hiện thời gian
giao tiếp giữa những process.
3. Overhead giữa CGI và ISAPI
Việc sử dụng những ứng dụng CGI cho thấy tốn nhiều thời gian xử lý và không gian
nhớ hơn từ 3-5 lần so với ứng dụng ISAPI. Tương tự như vậy, trên cùng một server và
P
o
i
n
t
e
r
Web Server
Process
ECB
ECB ECB
ISAPI
Extension
Shared memory
ISAPI

Extension
ISAPI
Extension
network, ud CGI chạy chậm hơn ứng dụng ISAPI DLL tương đương từ 3-5 lần. Nếu chạy
ứng dụng CGI hoặc ISAPI ta cần lưu ý đến việc giám sát overhead của chúng.
4. Tạo một ứng dụng Internet Server bằng ISAPI
Có thể sử dụng ISAPI để viết những ứng dụng về cơ sở dữ liệu (một hệ thống đặt
mua hàng, hay một catalog bán hàng). Ta thu nhận thông tin từ user thông qua HTML form,
và gởi lại trang HTML khác đã đựơc xử lý theo yêu cầu của user.
Để chạy một DLL ISAPI server extension, user nhập URL trên browser, DLL sẽ
chạy trên server và gởi dữ liệu HTML về lại cho client.
Ví dụ: />Để cập nhật những tính năng mới cho DLL, ta ngừng dòch vụ Web server, thay thế
DLL cũ bằng phiên bản mới trong thư mục dùng chung của nó trên server, rồi khởi động lại
dòch vụ. Yêu cầu sau đó của client sẽ nạp phiên bản DLL mới nhất. Bằng tiến trình này, rất
dễ dàng khi thêm vào chức năng mới cho DLL, và ta chỉ phải thực hiện cho một máy tính
trong mạng.
____________________________________________________________Chương 2
ISAPI EXTENSIONS
I. DLL (Dynamic-Link Library) trong ISAPI Extensions :
Mỗi ISAPI extension là một DLL, với những hàm sau :
BOOL WINAPI GetExtensionVersion (HSE_VERSION_INFO *pVer);
DWORD WINAPI HttpExtensionProc(LPEXTENSION_CONTROL_BLOCK *lpEcb);
GetExtensionVersion() chỉ được gọi một lần khi DLL được nạp và chỉ được dùng để cung
cấp thông tin version về DLL. Thông tin này là số version và đoạn mô tả ngắn gọn về
extension. Nó được cất trong cấu trúc HSE_VERSION_INFO:
typedef struct _HSE_VERSION_INFO{
DWORD dwExtensionVerion;
CHAR lpszExtensionDesc[HSE_MAX_EXT_DLL_NAME_LEN];
}HSE_VERSION_INFO, * LPHSE_VERSION_INFO;
HttpExtensionProc

Hàm thực hiện hầu hết công việc là HttpExtensionProc().
Cấu trúc của ECB
ECB được đònh nghóa như sau (in và out cho biết dữ liệu là loại có thể được ghi vào hay đọc
ra) :
typedef struct _EXTENSION_CONTROL_BLOCK {
DWORD cbSize; // IN
DWORD dwVersion; // IN
HCONN ConnID; // IN
DWORD dwHttpStatusCode; // OUT
CHAR lpszLogData[HSE_LOG_BUFFER_LEN]; // OUT
LPSTR lpszMethod; // IN
LPSTR lpszQueryString; // IN
LPSTR lpszPathInfo; // IN
LPSTR lpszPathTranslated; // IN
DWORD cbTotalBytes; // IN
DWORD cbAvailable; // IN
LPBYTE lpbData; // IN
LPSTR lpszContentType; // IN
BOOL (WINAPI * GetServerVariable)
(HCONN hConn,
LPSTR lpszVariableName,

×