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

Tài liệu HTTP và Web server ppt

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 (231.1 KB, 11 trang )

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 :
/>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=“ Đạ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
HTTP và Web server Trang 2
<body>
</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
HTTP và Web server 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?
HTTP và Web server 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
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.
• 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 ?
• 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
text/xml Xml
video/mpeg Mpeg mpg mpe
video/quicktime qt mov
HTTP và Web server Trang 5
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 = <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/1.1
HTTP và Web server Trang 6
• 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://
(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
HTTP và Web server 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
HTTP và Web server Trang 8
Vấ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.
HTTP và Web server 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 )
• 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.
HTTP và Web server 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 () hệ điều hành Unix, Windows 95/98, và
Windows NT.
 CERN server ( hệ điều hành : Unix,
VMS.
 MacHTTP ( : hệ điều hành
Macintosh.
 Website () : hệ điều hành server Windows NT / Windows
95 của O'Reilly.
 Domino Go Webserver () hệ điều hành Unix, Windows NT,
Windows 95/98, OS/2.
 Lotus Domino () hệ điều hành Windows NT, Windows
95/98, Unix, OS/2, Novell Netware.
 Microsoft IIS v4.0/Microsoft IIS v5.0 ( ) : hệ điều hành
Windows NT/2000.

HTTP và Web server Trang 11
 Enterprise for NetWare ( ): hệ điều hành Novell Netware
4.11, IntranetWare 4.11.
 Netscape Enterprise ( ): 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.

×