[cgi] CGI (Common Gateway Interface) 란 무엇입니까?

CGI는 공통 게이트웨이 인터페이스입니다. 이름에서 알 수 있듯이 모든 것에 대한 “공통”게이트웨이 인터페이스입니다. 그것은 이름에서 너무 사소하고 순진합니다. 나는 이것을 이해하고이 단어를 만날 때마다 이것을 느꼈다. 그러나 솔직히, 나는하지 않았다. 여전히 혼란 스러워요.

웹 개발 경험이있는 PHP 프로그래머입니다.

웹 서버 (-> 내장 PHP 인터프리터) —-> 서버 측 (PHP) 스크립트 —> MySQL 서버에 대한 사용자 (클라이언트) 요청.

이제 PHP 스크립트가 MySQL 서버 및 MATLAB 서버 및 다른 서버에서 결과를 가져올 수 있다고 가정하십시오.

이제 PHP Script가 CGI입니까? 웹 서버와 다른 모든 서버 간의 인터페이스 때문에? 모르겠어요 때때로 그들은 기술인 CGI를 부르고 다른 때는 CGI를 프로그램이나 다른 서버라고 부르기도합니다.

  • CGI 란 정확히 무엇입니까?

  • 큰 문제는 /cgi-bin/*.cgi무엇입니까? 이게 뭐야? cgi-bin서버 에서이 디렉토리 가 무엇인지 모르겠습니다 . 왜 * .cgi 확장자를 가지고 있는지 모르겠습니다.

  • 왜 펄은 항상 방해가됩니까? CGI & Perl (언어). 나는 또한이 두 가지에 무슨 일이 일어나고 있는지 모른다. 거의 항상 “CGI & Perl”조합으로이 두 가지를 계속들을 수 있습니다. 이 책은 Perl을 사용한 또 다른 훌륭한 CGI 프로그래밍 예제 입니다. 왜 “PHP / JSP / ASP로 CGI 프로그래밍”을하지 않습니까? 나는 그런 것들을 본 적이 없다.

  • C의 CGI 프로그래밍 은 나를 혼란스럽게합니다. ” in C “?? 진심으로 ?? 무슨 말을해야할지 모르겠습니다. 난 그냥 혼란스러워 ” in C “?? 이것은 모든 것을 바꿉니다. 프로그램을 컴파일하고 실행해야합니다. 이것은 웹 프로그래밍에 대한 나의 견해를 완전히 바꾼다. 언제 컴파일합니까? 프로그램은 어떻게 실행됩니까 (머신 코드이므로 독립적 인 프로세스로 실행해야합니다). 웹 서버와 어떻게 통신합니까? IPC? 소켓 프로그래밍을 사용하여 모든 서버 (내 예제 ​​MATLAB 및 MySQL)와 인터페이스합니까? 나는 길을 잃었다!

  • 사람들은 CGI가 더 이상 사용되지 않으며 더 이상 사용되지 않는다고 말합니다. 그렇습니까? 최신 업데이트는 무엇입니까?

일단 웹 서버 (Apache HTTPD)에 대한 HTTP PUT 요청 액세스 권한을 부여해야하는 상황이 발생했습니다. 오래 전입니다. 그래서 내가 기억하는 한 이것은 내가 한 일입니다.

  1. 웹 서버가 모든 HTTP PUT 요청을 일부에게 전달하도록 Apache HTTPD의 구성 파일을 편집했습니다
    put.php(이 PHP 스크립트를 작성해야 함)

  2. put.php를 구현하여 요청을 처리합니다 (파일을 언급 된 위치에 저장)

사람들은 내가 CGI 스크립트를 작성했다고 말했습니다. 진지하게, 나는 그들이 무엇에 관해 이야기하고 있는지 전혀 모른다.

  • CGI 스크립트를 실제로 작성 했습니까?

내 혼란이 무엇인지 이해했으면 좋겠습니다. (내가 어디에 혼란 스러울 지 모르기 때문에). 답변을 가능한 한 단순하게 유지하도록 요청합니다. 정말 멋진 기술 용어를 이해할 수 없습니다. 적어도이 경우에는 그렇지 않습니다.

편집하다:

이 놀라운 튜토리얼 “CGI Programming Is Simple!”을 찾았습니다 . 가장 간단한 방법으로 개념을 설명하는 CGI 튜토리얼 . 이 기사를 읽은 후 실제 코드 샘플에 대한 이해를 돕기 위해 C에서 CGI 프로그래밍 시작하기 를 읽어보십시오 . 또한이 튜토리얼에 대한 링크를 Wikipedia의 기사에 추가했습니다. http://en.wikipedia.org/wiki/Common_Gateway_Interface



답변

CGI는 웹 서버에 응용 프로그램과 데이터를 전달하는 방법을 알려주는 인터페이스입니다. 보다 구체적으로, 요청 정보가 환경 변수 (예 : 요청 유형, 원격 IP 주소)로 전달되는 방법, 요청 본문이 표준 입력을 통해 전달되는 방법 및 응답이 표준 출력을 통해 전달되는 방법을 설명합니다. 자세한 내용 은 CGI 사양 을 참조하십시오.

이미지를 사용하려면

user (client) request for page ---> webserver ---[CGI]----> Server side Program ---> MySQL Server.

전부는 아니지만 대부분 웹 서버는 프로그램을 ‘CGI’로 실행하도록 구성 할 수 있습니다. 즉, 웹 서버는 요청을 받으면 데이터를 특정 프로그램에 전달하여 일부 환경 변수를 설정하고 표준 입력 및 표준 출력을 통해 매개 변수를 마샬링하여 프로그램이 어디에서 무엇을 찾아야하는지 알 수 있습니다.

웹 서버와 프로그램 모두 CGI 작동 방식을 알고 있다면 웹에서 모든 실행 코드를 실행할 수 있다는 것이 주된 이점입니다. 그렇기 때문에 일반적인 CGI 가능 웹 서버로 C 또는 Bash로 웹 프로그램을 작성할 수 있습니다. 그리고 대부분의 프로그래밍 환경은 표준 입력, 표준 출력 및 환경 변수를 쉽게 사용할 수 있습니다.

귀하의 경우에는 스크립트와 웹 서버 간의 통신 수단으로 PHP 전용의 다른 수단을 사용했을 가능성이 높습니다. 질문에서 언급했듯이 mod_php라는 내장 인터프리터입니다.

따라서 귀하의 질문에 대답하십시오 :

CGI 란 정확히 무엇입니까?

위 참조.

/cgi-bin/*.cgi의 가장 큰 장점은 무엇입니까? 이게 뭐야? 서버 에서이 cgi-bin 디렉토리가 무엇인지 모르겠습니다. 왜 * .cgi 확장자를 가지고 있는지 모르겠습니다.

그것은 cgi 프로그램의 전통적인 장소입니다. 많은 웹 서버에는이 디렉토리가 CGI 프로그램으로 모든 바이너리를 실행하도록 미리 구성되어 있습니다. .cgi 확장자는 CGI를 통해 작동 할 것으로 예상되는 실행 파일을 나타냅니다.

왜 펄은 항상 방해가됩니까? CGI & Perl (언어). 나는 또한이 두 가지에 대해 잘 모른다. 거의 항상 “CGI & Perl”을 조합하여이 두 가지를 계속들을 수 있습니다. 이 책은 Perl을 사용한 CGI 프로그래밍의 또 다른 좋은 예입니다. “PHP / JSP / ASP를 사용한 CGI 프로그래밍” 나는 그런 것들을 본 적이 없다.

Perl은 고대이기 때문에 (CGI가 이미 오래되었을 때 모든 것이 존재했던 PHP, JSP 및 ASP보다 오래되었고, CGI가 새로 생겼을 때 Perl이 존재했기 때문에) CGI를 통해 동적 웹 페이지를 제공하는 매우 훌륭한 언어로 유명해졌습니다. 요즘 웹 서버에서 주로 mod_perl 을 실행하는 다른 대안이 있습니다 .

C에서 CGI 프로그래밍은 혼란 스러워요. C에서 ?? 진심으로 ?? 무슨 말을해야할지 모르겠습니다. 나는 단지 혼란스러워한다. “in C”?? 이것은 모든 것을 바꾸고있다. 프로그램은 컴파일되고 실행될 필요가있다. 이것은 웹 프로그래밍에 대한 나의 관점을 완전히 바꾸어 놓는다. 나는 언제 컴파일 하는가? (프로그램은 어떻게 실행 되는가? 웹 서버와 IPC는 어떻게 통신하고 소켓 프로그래밍을 사용하여 모든 서버 (내 예제에서는 MATLAB & MySQL)와 인터페이스합니까?

실행 파일을 한 번 컴파일하면 웹 서버가 프로그램을 실행하고 요청의 데이터를 프로그램에 전달하고 수신 된 응답을 출력합니다. CGI는 각 요청마다 하나의 프로그램 인스턴스가 시작되도록 지정합니다. 이것이 오늘날 CGI가 비효율적이고 쓸모없는 이유입니다.

그들은 CGI가 더 이상 사용되지 않는다고 말합니다. 더 이상 사용하지 않습니다. 그렇습니까? 최신 업데이트는 무엇입니까?

CGI는 성능이 가장 중요하지 않고 간단한 코드 실행 수단이 필요한 경우에도 여전히 사용됩니다. 앞에서 언급 한 이유로 비효율적이며 웹 환경에서 프로그램을 실행하는 더 현대적인 방법이 있습니다. 현재 가장 유명한 것은 FastCGI 입니다.


답변

CGI 란 정확히 무엇입니까?

웹 서버가 예를 들어 파일 대신 프로그램에서 데이터를 가져 오는 수단입니다.

/cgi-bin/*.cgi의 가장 큰 장점은 무엇입니까?

별거 아냐 그것은 단지 협약입니다.

서버 에서이 cgi-bin 디렉토리가 무엇인지 모르겠습니다. 왜 * .cgi 확장자를 가지고 있는지 모르겠습니다.

서버는 파일과 관련하여 무엇을해야하는지 알아야합니다 (즉, 단순히 서비스하는 대신 실행하는 프로그램으로 취급). .html 확장자가 있으면 text / html 컨텐츠 유형을 사용하도록 지시합니다. 확장자가 .cgi 인 경우 프로그램으로 실행하도록 지시합니다.

실행 파일을 별도의 디렉토리에 유지하면 서버가 잘못 구성된 경우 잘못된 파일을 실행하거나 CGI 프로그램을 원시 데이터로 제공하지 못하도록 보호 할 수 있습니다.

왜 펄은 항상 방해가됩니까?

그렇지 않습니다. Perl은 CGI와 동시에 크고 유명했습니다.

나는 수년간 Perl CGI를 사용하지 않았습니다. 나는 mod_perl을 오랫동안 사용하고 있었고 요즘에는 FastCGI와 함께 PSGI / Plack을 선호합니다.

이 책은 Perl을 사용한 CGI 프로그래밍의 또 다른 좋은 예입니다. “PHP / JSP / ASP를 사용한 CGI 프로그래밍”

CGI는 매우 효율적이지 않습니다. 웹 서버에서 프로그램과 대화하는 더 좋은 방법은 PHP와 거의 동시에 나타났습니다. JSP와 ASP 프로그램과 대화하는 다른 방법입니다.

C에서 CGI 프로그래밍은 혼란 스러워요. C에서 ?? 진심으로 ??

프로그래밍 언어입니까?

언제 컴파일합니까?

  1. 코드 작성
  2. 엮다
  3. 액세스 URL
  4. 웹 서버는 프로그램을 실행

프로그램이 실행되는 방법 (머신 코드이므로 독립적 인 프로세스로 실행해야 함)

독립 프로세스로 실행할 필요는 없지만 (C로 Apache 모듈을 작성할 수 있음) CGI의 전체 개념은 외부 프로세스를 시작한다는 것입니다.

웹 서버와 어떻게 통신합니까? IPC?

CGI 사양에 정의 된 STDIN / STDOUT 및 환경 변수

소켓 프로그래밍을 사용하여 모든 서버 (내 예제 ​​MATLAB 및 MySQL)와 인터페이스합니까?

당신이 좋아하고 지원되는 방법을 사용합니다.

그들은 CGI가 감가 상각되었다고 말합니다. 더 이상 사용하지 않습니다. 그렇습니까?

CGI는 비효율적이고 느리고 단순합니다. 사용되는 경우가 거의 없기 때문에 단순하지 않기 때문입니다. 성능이 그다지 중요하지 않은 경우 단순성에 큰 가치가 있습니다.

최신 업데이트는 무엇입니까?

1.1


답변

CGI는 웹 서버 (HTTP 서버)와 특정 요청을 처리하는 특정 유형의 실행 프로그램 간의 인터페이스 사양입니다.

해당 요청의 특정 특성이 해당 프로그램의 환경에 전달되어야하는 방법과 프로그램이 서버로 응답을 다시 전달하는 방법 및 서버가 응답을 ‘완료’하여 원래 HTTP 요청에 대한 올바른 응답을 형성하는 방법을 설명합니다.

한동안 CGI는 IETF 인터넷 초안이었으며 만료일이있었습니다. 업데이트없이 만료되었으므로 CGI ‘표준’이 없습니다. 현재는 정보를 제공하는 RFC이지만 일반적인 문서로 표준 자체는 아닙니다. rfc3875.txt , rfc3875.html

CGI 인터페이스를 구현하는 프로그램은 대상 시스템에서 실행할 수있는 모든 언어로 작성할 수 있습니다. 환경 변수 및 일반적으로 표준 입력 에 액세스 할 수 있어야하고 표준 출력에서 출력을 생성해야 합니다 .

C와 같은 컴파일 된 언어는 일반적으로 CGI 환경에보다 쉽게 ​​액세스하기 위해 라이브러리를 사용하는 perl과 같은 스크립팅 언어로 사용되었습니다.

CGI의 가장 큰 단점 중 하나는 요청마다 상태를 유지하는 것이 주요 성능 문제가 될 수 있으므로 각 요청마다 새로운 프로그램이 생성된다는 것입니다. 상태는 쿠키로 처리되거나 URL로 인코딩 될 수 있지만 크기가 커지면 다른 곳에 저장하고 인코딩 된 URL 정보 또는 쿠키에서 키를 입력해야합니다. 각 CGI 호출은 저장 어딘가에서 저장 상태를 다시로드해야합니다.

이러한 이유로 요청과 세션에 대한 매우 간단한 인터페이스로 인해 웹 서버와 응용 프로그램 간의 통합 환경이 훨씬 더 유명합니다. 아파치를 사용하는 최신 PHP 구현과 같은 환경은 대상 언어를 웹 서버와 훨씬 더 잘 통합하고 http 요청을 효율적으로 제공하는 데 필요한 요청 및 세션 객체에 대한 액세스를 제공합니다. HTTP 요청을 처리하기 위해 ‘프로그램’을 작성하는 훨씬 쉽고 풍부한 방법을 제공합니다.

CGI 스크립트를 작성했는지 여부는 해석에 달려 있습니다. 확실히 하나의 작업을 수행했지만 스크립트와 서버 간의 인터페이스가 CGI 인터페이스가 아닌 모듈로 php를 실행하는 것이 훨씬 일반적입니다.


답변

CGI는 RFC 3875에 명시되어 있지만, 원래 NCSA 문서 의 “공식적인”목록입니다 . 기본적으로 CGI는 HTTP 요청에 대한 데이터를 웹 서버에서 프로그램으로 전달하여 처리 할 수있는 프로토콜을 정의합니다. 사양이 작성된 시점 (1993)에는 대부분의 웹 서버에 정적 페이지 만 포함되어 있었으며 “웹 앱”은 드물고 새로운 것이기 때문에 “정상”정적 콘텐츠와 구분하는 것이 자연스러워 보였습니다. cgi-bin정적 콘텐츠와 별개로 끝나고로 끝나도록합니다 .cgi.

현재 여기에는 PHP와 같은 전용 “웹 프로그래밍 언어”도 없었고 C는 지배적 인 휴대용 프로그래밍 언어였습니다. 그래서 많은 사람들이 C로 CGI 스크립트를 작성했습니다. 그러나 Perl은 이런 종류의 언어에 더 적합한 것으로 판명되었습니다. CGI는 Perl과 거의 동의어가되었습니다. 그런 다음 Java 서블릿, PHP 및 기타 많은 것들이 있었고 Perl의 시장 점유율을 상당 부분 차지했습니다.


답변

Wikipedia의 CGI 를 살펴보십시오 . CGI는 웹 서버와 외부 프로그램 또는 입력을 처리하고 브라우저로 전송되는 출력을 생성하는 스크립트 간의 프로토콜 입니다.

CGI는 단순히 웹 서버와 프로그램이 더 이상 아무것도없이 통신 할 수있는 방법입니다. 여기서 서버는 네트워크 연결 및 HTTP 프로토콜을 관리하고 프로그램은 입력을 처리하고 브라우저로 전송되는 출력을 생성합니다. CGI 스크립트는 기본적으로 웹 서버에서 실행할 수 있고 CGI 프로토콜을 따르는 모든 프로그램 일 수 있습니다. 따라서 CGI 프로그램은 예를 들어 C에서 구현 될 수 있습니다. 그러나 C가 작업에 적합하지 않기 때문에 극히 드문 경우입니다.

/cgi-bin/*.cgi사람들이 일반적으로 CGI 스크립트를 넣는 경로입니다. 웹 서버는 일반적으로 해당 경로에서 CGI 스크립트를 가져 오도록 기본적으로 구성됩니다.

CGI 스크립트는 PHP에서도 구현 될 수 있지만 모든 PHP 프로그램은 CGI 스크립트가 아닙니다. 웹 서버에 PHP 인터프리터 (예 : Apache의 mod_php)가 내장되어 있으면 웹 서버와 인터프리터 사이의보다 효율적인 직접 프로토콜로 CGI 단계를 건너 뜁니다.

CGI 스크립트를 구현했는지 여부는 웹 서버에서 스크립트를 실행하는 방법에 따라 다릅니다.


답변

CGI는 본질적으로 요청을 웹 서버로 구성된 모든 인터프리터 에게 전달합니다. 이것은 Perl, Python, PHP, Ruby, C 일 수 있습니다. Perl은 그 당시 CGI와 관련하여 자주 볼 수 있었던 가장 일반적인 시대였습니다.

CGI는 죽지 않았습니다. 실제로 대부분의 대규모 호스팅 회사는 mod_php와 달리 PHP를 CGI로 실행합니다. mod_php보다 속도는 느리지 만 사용자 레벨 구성 및 기타 사항을 제공하기 때문입니다. 루비와 파이썬도 일반적으로 CGI로 실행됩니다. 여기서 중요한 차이점은 서버 모듈이 실제 서버 소프트웨어의 일부로 실행된다는 것입니다. CGI와 마찬가지로 서버 외부에서 서버는 CGI 모듈을 사용하여 외부 통역사로 데이터를 전달하고받는 방법을 결정합니다.


답변

CGI는 요청을 처리하기 위해 웹 서버가 외부 프로그램을 호출하는 메커니즘으로, 환경 변수 및 표준 입력을 사용하여 요청 데이터를 프로그램에 공급합니다. CGI 프로그램을 다른 언어와 비교하여 작성하는 것이 더 쉽지만 외부 프로그램이 작성된 정확한 언어는 중요하지 않습니다.

CGI 스크립트에는 실행 권한이 필요하기 때문에 기본적으로 httpd는 cgi-bin디렉토리의 CGI 프로그램 만 보안 목적으로 실행되도록 할 수 있습니다.

대부분의 PHP 스크립트는를 통해 웹 서버 프로세스에서 실행됩니다 mod_php. 이것은 CGI가 아닙니다.

요청마다 프로그램 (및 관련 통역사)을 시작해야하므로 CGI가 느립니다. 현대의 대안은 mod_php에 의해 사용되는 임베디드 실행과 FastCGI에 의해 사용되는 장기 실행 프로세스입니다. 특정 언어는 이러한 메커니즘을 구현하는 고유 한 방법이있을 수 있으므로 CGI를 사용하기 전에 주변에 문의하십시오.