3. CGI Standard Input:
Hầu hết dữ liệu gởi tới một Web server được sử dụng để thiết lập biến
môi trường , nhưng không phải tất cả đều thích hợp (một cách vừa vặn) trong một biến
môi trường. Khi một user submit một dữ liệu để được xử lý bằng một CGI Script, dữ
liệu đó được nhận như một URL_encoded search string ( chuỗi URL được mã hóa )
hoặc thông qua standard input stream (dòng dữ liệu nhập chuẩn ). Server phải được
biết method được sử dụng để submit dữ liệu đó để biết cách xử lý dữ liệu.
Việc gởi dữ liệu như standard input là cách trực tiếp hay nhất để gởi dữ liệu.
Server chỉ cần báo cho gateway script có bao nhiêu tập 8-bit dữ liệu đọc từ standard
input. Script mở dòng dữ liệu nhập chuẩn và đọc số lượng đã được chỉ rõ của dữ liệu .
Trong khi URL_encoded search string quá dài có thể bị cắt bớt, dữ liệu gởi vào bằng
dòng dữ liệu nhập chuẩn sẽ không bị cắt bớt. Do đó dòng dữ liệu nhập chuẩn là cách
được ưu tiên hơn để gởi dữ liệu .
4. Form - HTML :
Bạn có thể nhận những thông tin hay dữ liệu đăng ký khi bạn tạo những fill-out
form. Dưới HTTP 1.0, có hai phương thức đăng ký (submission method) cho form :
1. Method GET của HTTP sử dụng URL_encoded search tring. Khi một server
nhận một URL_encoded search string, server đánh dấu trị của search string
tới biến QUERY_STRING.
2. Method POST của HTTP sử dụng standard input stream. Khi server nhận dữ
liệu từ standard input stream, server đánh dấu trị được kết hợp với chiều dài
của input stream tới biến CONTENT_LENGHT .
Một ví dụ về Web document chứa 1 form với 3 trường khóa : NAME,
ADDRESS, và PHONE_NUMBER. Giả sử URL tới script là :
và user trả lời như sau :
Sandy Brown
12 Sunny Lane WhoVille , USA
987-654-3210
Thông tin đăng ký sử dụng method POST và GET được xem xét khác nhau bởi
server. Khi method GET được sử dụng, server thiết lập những biến môi trường sau và
sau đó gởi dữ liệu nhập vào script survey.p1 :
PATH=/bin:/usr/bin:/usr/etc:/usr/ucb
SERVER_SOFTWARE = CERN/3.0
SERVER_NAME = www.tvp.com
GATEWAY_INTERFACE = CGI/1.1
SERVER_PROTOCOL = HTTP/1.0
SERVER_PORT = 80
REQUEST_METHOD = GET
HTTP_ACCEPT = text/plain, text/html, application/rtf,application/postsript,
audio/basic, audio/x-aiff, image/gif, image/jpeg, image/tiff, video/mpeg
PATH_INFO =
PATH_TRANSLATED =
SCRIPT_NAME = /cgi-bin/survey.p1
QUERY_STRING =
NAME=Sancy+Brown&ADDRESS=12+Sunny+Lane+WhoVille, +USA
&PHONE_NUMBER=987-654-3210
REMOTE_HOST =
REMOTE_ADDR =
REMOTE_USER =
AUTH_TYPE =
CONTENT_TYPE =
CONTENT_LENGTH =
Khi method post được sử dụng, server thiết lập những biến môi trường sau đây
sau đó gởi input tới script survey.p1 :
PATH=/bin:/usr/bin:/usr/etc:/usr/ucb
SERVER_SOFTWARE = CERN/3.0
SERVER_NAME = www.tvp.com
GATEWAY_INTERFACE = CGI/1.1
SERVER_PROTOCOL = HTTP/1.0
SERVER_PORT = 80
REQUEST_METHOD = POST
HTTP_ACCEPT = text/plain, text/html, application/rtf,application/postsript,
audio/basic, audio/x-aiff, image/gif, image/jpeg, image/tiff, video/mpeg
PATH_INFO =
PATH_TRANSLATED =
SCRIPT_NAME = /cgi-bin/survey.p1
QUERY_STRING =
REMOTE_HOST =
REMOTE_ADDR =
REMOTE_USER =
AUTH_TYPE =
CONTENT_TYPE = application/x-www-form-urlencoded
CONTENT_LENGTH = 81
-2-
Dữ liệu POST-submitted sau đây được gởi tới gateway script thông qua
standard input stream :
NAME=Sandy+Brown&ADDRESS=12+Sunny+Lane+WhoVille,
+USA&PHONE_NUMBER=987-654-3210
IV. Xuất dữ liệu từ CGI Script :
Sau khi script hoàn tất việc xử lý input nó sẽ xuất output trở lại cho Server.
Server sau đó sẽ gởi output cho client. Thông thường output này là ở trong 1 form của
một HTTP response (thông tin gởi đáp lại) bao gồm1 header theo sau là một khoảng
trắng và một BODY. Trong khi CGI header của output được format theo dạng chuẩn,
BODY của output được format theo cách thức bạn chỉ định trong header. Ví dụ,
BODY có thể chứa 1 HTML document để máy client hiển thị cho người đọc.
Việc tạo dữ liệu xuất từ một CGI script thì tương đối đơn giản. Tất cả những
việc bạn phải làm là định dạng dữ liệu xuất vào trong một header và body, xử dụng
ngôn ngữ lập trình mà bạn thích. Ví dụ nếu bạn muốn cript xuất một tài liệu HTML xử
dụng PERL thì như sau :
#!/usr/bin/perl
#tạo header với khoảng trắng được thêm vào phiá sau header
print “Content-type: text/html\n\n”;
#đưa body vào dạng HTML format
print <<”MAIN”;
<HTML>
<HEAD><TITLE>Output from Script</TITLE></HEAD>
<BODY>
<H1>Top 10 reason for using CGI</H1>
<P>10. Customer feeback.</P>
<P>9. Obtaning questionnaire and survey responses.</P>
<P>8. Tracking visitor count .</P>
<P>7. Automating searches.</P>
<P>6. Creating easy database interfaces.</P>
<P>5. Building gateways to other protocols.</P>
<P>4. HTML 2.0 image maps.</P>
<P>3. User authentication.</P>
<P>2. On-line order processing.</P>
<P>1. Generating documents on the fly.</P>
</BODY>
-3-
MAIN
Server xử lý dữ liệu xuất, thiết lập biến môi trường, tạo một HTTP header, sau
đó gởi dữ liệu tới client. Ví dụ đây là những dòng thông báo trong HTTP header mà ta
có thể thấy trên một CERN Web server :
HTTP/1.0 302 Found
MINE-Version: 1.0
Server : CERN/3.0
Date :Monday, 4-Mar-96 23:59:59 HTS
Content-type:text/html
Content-length: 485
<HTML>
<HEAD><TITLE>Output from Script</TITLE></HEAD>
<BODY>
<H1>Top 10 reason for using CGI</H1>
<P>10. Customer feeback.</P>
<P>9. Obtaning questionnaire and survey responses.</P>
<P>8. Tracking visitor count .</P>
<P>7. Automating searches.</P>
<P>6. Creating easy database interfaces.</P>
<P>5. Building gateways to other protocols.</P>
<P>4. HTML 2.0 image maps.</P>
<P>3. User authentication.</P>
<P>2. On-line order processing.</P>
<P>1. Generating documents on the fly.</P>
</BODY>
MAIN
*CGI HEADERS
CGI header chứa chỉ dẫn (directive) tới server. Hiện thời có ba chỉ dẫn server
hợp lệ :
Content-type
Location
Status
Một header có thể chứa một hoặc tất cả các chỉ dẫn này. CGI script của bạn sẽ
xuất những chỉ dẫn tới server. Header luôn được theo sau bằng một khoảng trắng để
phân biệt header với BODY.
-4-
a.Sử dụng Content-Type trong CGI Headers :
Trường content_type trong một CGI header chỉ rõ MIME type của dữ liệu được
gởi trở lại cho client. Thường dữ liệu xuất từ một script là một document đã được
format, ví dụ như một HTML document. Bạn có thể chỉ rõ kiểu dữ liệu trong header
như sau :
Content-type : text/html
b.Sử dụng Locations trong CGI headers :
Nếu dữ liệu xuất của Script không là một document được tạo trong script đó.
Bạn có thể tham khảo bất kỳ document nào trên Web sử dụng trường Location. Trường
Location được sử dụng để tham khảo 1 file bằng URL. Server xử lý vị trí tham khảo
đến trực tiếp hoặc gián tiếp phụ thuộc vào vị trí của file. Nếu server tìm thấy file cục
bộ, nó sẽ gởi file tới client. Nếu không thì server sẽ gián tiếp gởi tới client bằng cách
gởi URL tới client và client sẽ nhận được file. Bạn có thể chỉ rõ một vị trí (location)
trong Script như sau :
Location: />c.Sử dụng Status trong CGI Headers :
Trường Status được sử dụng để gởi một Status Line tới server để chuyển tới
Client . Mã Status được biểu diễn như một mã three-digit theo sau bởi một chuỗi mà
thông thường nó được dùng để thông báo trạng thái sau khi gởi. Số đầu tiên của 1 mã
Status cho thấy các trạng thái như sau :
1xx chưa cấp phát.
2xx thành công.
3xx gởi lại một lần nữa.
4xx Client bị lỗi.
5xx Server bị lỗi.
Nhiều mã Status được sử dụng bởi server, mã Status mà CGI script gởi tới 1 client
thông thường là mã client error. Ví du, Script không thể tìm thấy 1 file và thay thế bằng
cách không trả lại gì cả, bạn chỉ rõ rằng Script xuất ra một mã lỗi. Đây là danh sách của
các mã client error :
Status : 401 không được phép, xác nhận không thành công. User không được
phép truy xuất file phải truy xuất lại.
-5-
Status : 403 bị cấm. Yêu cầu không được chấp nhận, user không được phép truy
xuất file.
Status : 404 không tìm thấy. Tài nguyên được chỉ ra không thể tìm thấy.
Status : 405 method không được cho phép. Method được sử dụng để submit
không được cho phép.
V TÓM TẮT :
Common gateway interface đã tạo cho chúng ta khả năng tạo ra những trang
Web có tính tương tác cao với người đọc Web và thêm vào đó là giúp cho người tạo
Web những khả năng tự động hóa trang Web của mình như cho phép nhập dữ liệu từ
clien vào server thông qua những fill-out form, database query, index search, và tự
động tạo ra những tài liệu, dữ liệu xuất cho người đọc….
-6-