Bạn đang học về web và vô tình thấy rằng CGI vốn quen thuộc là kĩ xảo điện ảnh, nay lại trở thành một khái niệm gì đó xa lạ trong web? Vậy CGI là gì? Cách thức hoạt động của CGI như thế nào?
CGI là gì?
CGI là viết tắt của Common Gateway Interface, tạm dịch là giao diện cổng chung. CGI cung cấp một phần mềm trung gian giữa các máy chủ với cơ sở dữ liệu và nguồn thông tin bên ngoài. Trong đó máy chủ HTTP và 1 CGI script sẽ chịu trách nhiệm phản hồi yêu cầu từ người dùng.
- Máy chủ đảm nhận quản lý các kết nối, việc thực hiện truyền dữ liệu đi và các vấn đề liên quan đến yêu cầu từ người dùng.
- CGI script chịu trách nhiệm xử lý các vấn đề của ứng dụng như truy cập vào dữ liệu và xử lý các tài liệu.
Lịch sử hình thành của CGI
Máy chủ web tĩnh được sinh ra để phục vụ cho những yêu cầu từ máy trạm bằng cách lấy các thông tin được lưu trữ trên 1 thiết bị ra. Tuy nhiên, lượng thiết bị máy tính ngày càng nhiều, cơ chế này hoạt động sẽ kém hiệu quả hơn nhiều.

Sự phát triển mạnh mẽ của các website động chứ các ngôn ngữ kịch bản (script) ngày càng nhiều. Cơ chế hoạt động của máy chủ web cũng phải thay đổi để phù hợp với hiện tại.
Khi một máy trạm truy cập vào trang web động, máy chủ nhận yêu cầu và đưa đến 1 ứng dụng thứ 3. Ứng dụng này sẽ xử lý các script độc lập và trả về lại máy chủ web; máy chủ web sẽ chuyển tiếp các phản hồi lại cho khách hàng.

Cho đến năm 1993, một nhóm nghiên cứu của National Center for Supercomputing Applications (NCSA) tạm dịch Trung tâm nghiên cứu về siêu ứng dụng máy tính của Mĩ đã viết các đặc tả nhằm gọi các tệp thực thi dòng lên trên danh sách gửi thư www-talk.
Các nhà phát triển máy chủ web khác đã áp dụng nó và trở thành một tiêu chuẩn cho các máy chủ web kể từ lúc đó.
Đến năm 1997, nhóm nghiên cứu do Ken Coar chủ trì thuộc NCSA tập trung phát triển và đưa ra định nghĩa rõ ràng hơn về CGI, công việc này của họ dẫn đến RFC 3875, trong đó phiên bản đầu tiên của CGI là 1.1.
Các tác giả chính thức được ghi nhận như sau:
- Rob McCool (tác giả của Máy chủ web HTTPd NCSA)
- John Franks (tác giả của GN Web Server)
- Ari Luotonen (nhà phát triển Máy chủ Web CERN httpd)
- Tony Sanders (tác giả của Máy chủ Web Plexus)
- George Phillips (Người bảo trì máy chủ web tại Đại học British Columbia)

Các tính năng của CGI
- CGI là một tiêu chuẩn được phát triển với định hướng rõ ràng và có rất nhiều sự hỗ trợ.
- CGI là một công nghệ được kết nối với ngôn ngữ HTML.
- CGI script thường được viết bằng các ngôn ngữ như C, Perl nhưng cũng có thể là một shell script đơn giản.
- Nếu tạo một bộ nhớ đệm có tốc độ nhanh, CGI là một trong những phương pháp tối ưu nhất.
- Cho đến thời điểm hiện tại, CGI vẫn đang rất tương thích với các trình duyệt hiện đại, dù đã phát triển từ những năm 1990.
CGI hoạt động như thế nào?
CGI là một giao thức trao đổi giữa máy chủ web và các ứng dụng cổng (gateway application) như PHP, Python,…

Trong thực tế CGI sẽ hoạt động như sau:
- Máy trạm gửi yêu cầu đến máy chủ web, máy chủ web nhận yêu cầu và chuyển tiếp cho ứng dụng cổng. CGI sẽ thực thi một câu lệnh tương ứng phù hợp với ứng dụng đó.
- Các thông tin chi tiết về yêu cầu được ứng dụng truyền qua bằng các biến môi trường, trong khi đó dữ liệu bằng các phương pháp POST hoặc PUT sẽ được truyền qua các cổng nhập tiêu chuẩn. Tức là CGI xử lý dữ liệu của nó song song với dữ liệu chính.
- Ứng dụng sẽ viết nội dung cần trả lời để máy chủ trả thông tin về cho người yêu cầu.
Nghe quá trình này khá đơn giản và hiệu quả. Tuy nhiên, hình thức này dần bộc lộ một số hạn chế như:
- Một yêu cầu sẽ tạo ra một tiến trình làm việc độc lập. Bộ nhớ và các thông tin không được lưu lại sau mỗi phiên, sẽ được tạo lại sao mỗi phiên.
- Một tiến trình mới sẽ tiêu tốn rất nhiều tài nguyên của hệ thống. Nếu trong một thời điểm một loạt yêu cầu được sinh ra sẽ làm máy chủ quá tải ngay lập tức.
- Trong trường hợp máy chủ một nơi, ứng dụng nằm trên một máy tính khác sẽ tạo ra nhiều khó khăn.
Ưu và nhược điểm của CGI
Ưu điểm
- Code sẵn có để áp dụng vào phần mềm của bạn mà không phải code lại từ đầu.
- CGI mạnh mẽ tương thích hầu hết với các ngôn ngữ và bất cứ nền tảng nào, miễn chúng có những đặc điểm kỹ thuật phù hợp.
- Các tác vụ nâng cao vốn khó trong Java giờ có thể thực hiện dễ dàng hơn với CGI.
Nhược điểm
- CGI rất tốn thời già để xử lý
- Không lưu lại cache sau mỗi lần tải lại trang
- Mỗi lần tải lại sẽ tốn thêm thời gian do phải tải lại các chương trình vào bộ nhớ
Với những nhược điểm như vậy, CGI sẽ buộc người dùng phải có những lựa chọn thay thế. Và sau đây là một số lựa chọn thay thế cho CGI.
Một số lựa chọn thay thế CGI
FastCGI sự cải thiện mạnh mẽ cho CGI
FastCGI hay Fast Common Gateway Interface, là sự cải thiện đáng kể so với CGI.

FastCGI có những cải tiến như sau:
- FastCGI có khả năng xử lý nhiều yêu cầu hơn bằng cách tạo ra nhiều tiến trình hơn. Không như CGI chỉ tạo ra 1 tiến trình cho từng yêu cầu.
- FastCGI là một giao thức dựa trên socket, vì vậy FastCGI có thể thực hiện với bất kỳ ngôn ngữ nào và trên bất kỳ nền tảng nào.
- Máy chủ web và ứng dụng cổng giao tiếp qua các socket như TCP, POSIX hoặc Local IPC. Do đó 2 tiến trình xử lý có thể nằm trên hai máy khác nhau trên cùng một mạng.
- Máy chủ web chuyển tiếp yêu cầu của người dùng đến cổng và nhận phản hồi trong 1 kết nối. Các yêu cầu tiếp theo có thể sử dụng cổng kết nối đó và không cần tạo ra những cổng kết nối khác. Tuy nhiên phần lớn các máy chủ web như Nginx và Apache thfi FastCGI không được hỗ trợ hoặc có được hỗ trợ cũng không đầy đủ lắm việc truy cập đồng thời.
/cgi-bin/*.cgi là gì? /cgi-bin/*.cgi có công dụng gì trên máy chủ?
Có lẽ bạn đã từng xem qua máy chủ của mình và gặp thư mục /cgi-bin/*.cgi này. Tất nhiên đây là nơi chứa các chương trình của CGI.

Rất nhiều máy chủ web cấu hình sẵn thư mục này để thực thi các chương trình CGI dưới dạng nhị phân. Có thể nói /cgi-bin/*.cgi là một quy ước chung cho các máy chủ. Nếu có một tệp thực thi có đuôi là .cgi, chắc chắn tệp đó sẽ hoạt động thông qua CGI.
Chúc bạn chọn được phương thức phù hợp với mình nhé!
Những câu hỏi thường gặp
CGI giờ đã lỗi thời rồi đúng không?
CGI vẫn được sử dụng khi hiệu suất không phải là tối quan trọng và cần có một phương thức thực thi mã đơn giản.
CGI không hiệu quả vì những lý do đã nói ở phần nhược điểm và có nhiều phương thức hiện đại hơn để thực hiện bất kỳ chương trình nào trong môi trường web.
Có phương thức nào khác ngoài CGI và FastCGI hay không?
Có nhiều phương pháp khác như PHP-FPM, DOS, uWSGI, SCGI,…
Làm thế nào để biết CGI giao tiếp với máy chủ web?
Thông qua STDIN/ STDOUT và các biến môi trường. Chúng là những định nghĩa đặc tả có trong CGI trong quá trình giao tiếp.
Tại sao các nhà phát triển sử dụng Perl để tạo script?
Vì trong giai đoạn đầu của Internet, chưa có một ngôn ngữ nào chuyên dụng để phát triển web. Trong thời điểm đó PHP và C là hai ngôn ngữ thống trị, các lập trình viên viết script bằng C, cho đến khi Perl xuất hiện và tương thích mạnh mẽ họ chuyển sang sử dụng Perl.
CÔNG TY CỔ PHẦN TẬP ĐOÀN TINO
- Trụ sở chính: L17-11, Tầng 17, Tòa nhà Vincom Center, Số 72 Lê Thánh Tôn, Phường Bến Nghé, Quận 1, Thành phố Hồ Chí Minh
Văn phòng đại diện: 42 Trần Phú, Phường 4, Quận 5, Thành phố Hồ Chí Minh - Điện thoại: 0364 333 333
Tổng đài miễn phí: 1800 6734 - Email: sales@tino.org
- Website: www.tino.org