- Giao diện Cổng chung (Common Gateway Interface), hoặc CGI, là một tiêu chuẩn cho các chương trình cổng bên ngoài để giao diện với các máy chủ thông tin như máy chủ HTTP.
- Phiên bản hiện tại là CGI/1.1 và CGI/1.2 đang trong quá trình phát triển.
Duyệt Web
Để hiểu khái niệm CGI, hãy xem điều gì xảy ra khi chúng ta nhấp vào một siêu liên kết để duyệt một trang web hoặc URL cụ thể.
- Trình duyệt của bạn liên hệ máy chủ HTTP web và yêu cầu URL, tức là tên tệp.
- Máy chủ Web phân tích URL và tìm kiếm tên tệp. Nếu nó tìm thấy tệp đó thì gửi lại trình duyệt, ngược lại gửi thông báo lỗi chỉ ra bạn yêu cầu tệp sai.
- Trình duyệt web nhận phản hồi từ máy chủ web và hiển thị tệp nhận được hoặc thông báo lỗi.
Tuy nhiên, có thể thiết lập máy chủ HTTP sao cho bất cứ khi nào một tệp trong một thư mục cụ thể được yêu cầu, tệp đó không được gửi lại; thay vào đó nó được thực thi như một chương trình, và bất cứ điều gì chương trình đó xuất ra sẽ được gửi lại để trình duyệt của bạn hiển thị. Chức năng này được gọi là Giao diện Cổng chung (Common Gateway Interface) hoặc CGI và các chương trình được gọi là script CGI. Các chương trình CGI này có thể là Script Python, Script PERL, Script Shell, chương trình C hoặc C++, v.v.
Sơ đồ kiến trúc CGI

Hỗ trợ và cấu hình Máy chủ Web
Trước khi bạn tiến hành Lập trình CGI, hãy chắc chắn rằng Máy chủ Web của bạn hỗ trợ CGI và nó được cấu hình để xử lý Chương trình CGI. Tất cả các Chương trình CGI sẽ được thực thi bởi máy chủ HTTP được giữ trong một thư mục được cấu hình trước. Thư mục này được gọi là Thư mục CGI và theo quy ước nó được đặt tên là /var/www/cgi-bin. Theo quy ước, các tệp CGI có phần mở rộng là .cgi, nhưng bạn có thể giữ tệp của mình với phần mở rộng .py cũng được.
Mặc định, máy chủ Linux được cấu hình để chỉ chạy các script trong thư mục cgi-bin trong /var/www. Nếu bạn muốn chỉ định thư mục khác để chạy script CGI của mình, hãy comment các dòng sau trong tệp httpd.conf:
<Directory "/var/www/cgi-bin">
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
</Directory>
<Directory "/var/www/cgi-bin">
Options All
</Directory>
Ở đây, chúng ta giả định rằng bạn đã có Máy chủ Web chạy thành công và bạn có thể chạy bất kỳ chương trình CGI nào khác như Perl hoặc Shell, v.v.