Skip to content
jeongmin edited this page Feb 2, 2024 · 1 revision

Web 서버 GET/POST CGI 사용법 (QUERY_STRING / CONTENT_LENGTH)
CGI 스크립트의 환경 변수

  • AUTH_TYPE
    • 서블릿을 보호하는 데 사용되는 인증 스키마의 이름입니다. 예를 들면 BASICSSL 또는 서블릿이 보호되지 않는 경우 null입니다.
    • Authorization 헤더: Authorization: Basic YWRtaW46cGFzc3dvcmQ=
  • CONTENT_LENGTH
    • 입력 스트림에서 사용 가능한 요청 본문의 길이(바이트) 또는 길이를 알 수 없는 경우 -1입니다. HTTP 서블릿의 경우 리턴되는 값은 CGI 변수 CONTENT_LENGTH의 값과 동일합니다.
    • Content-Length 헤더
  • CONTENT_TYPE
    • 요청 본문의 MIME 유형 또는 유형을 모르는 경우 null입니다. HTTP 서블릿의 경우 리턴되는 값은 CGI 변수 CONTENT_TYPE의 값과 동일합니다.
    • Content-Type 헤더: Content-Type: application/json
  • GATEWAY_INTERFACE
    • 서버가 스크립트와 통신하기 위해 사용하는 CGI 스펙의 버전입니다. "CGI/1.1"입니다.
    • 헤더 X
  • HTTP_ACCEPT
    • "HTTP_"로 시작하는 이름을 가진 변수는 사용되는 스키마가 HTTP인 경우 요청 헤더의 값을 포함합니다. HTTP_ACCEPT는 브라우저가 지원하는 내용 유형을 지정합니다. 예: text/xml.
    • Accept 헤더: Accept: text/xml, Accept: text/html, application/json;q=0.9
  • HTTP_ACCEPT_CHARSET
    • 문자 환경 설정 정보. 정보가 있는 경우 클라이언트의 선호하는 문자 세트를 표시하는 데 사용됩니다. 예: utf-8;q=0.5.
    • Accept-Charset: utf-8;q=0.7, iso-8859-1;q=0.3
  • HTTP_ACCEPT_ENCODING
    • 클라이언트로 리턴되는 내용에 대해 수행될 수 있는 인코딩의 유형을 정의합니다. 예: compress;q=0.5.
    • Accept-Encoding: gzip, compress;q=0.5
  • HTTP_ACCEPT_LANGUAGE
    • 수신할 내용에 적합한 언어를 정의하는 데 사용됩니다. 예: en;q=0.5. 리턴되는 결과가 없으면 언어 환경 설정이 표시되지 않습니다.
    • Accept-Language: en;q=0.7, fr;q=0.3
  • HTTP_FORWARDED
    • 요청이 전달되는 경우 프록시 서버의 주소 및 포트를 표시합니다.
    • Forwarded: for=192.0.2.60;proto=http;by=203.0.113.43
  • HTTP_HOST
    • 요청되는 자원의 인터넷 호스트 및 포트 번호를 지정합니다. 모든 HTTP/1.1 요청의 경우 필수입니다.
    • Host: [www.example.com](http://www.example.com/)
  • HTTP_PROXY_AUTHORIZATION
    • 인증이 필요한 프록시에 클라이언트 자체 또는 클라이언트의 사용자를 식별하기 위해 클라이언트가 사용합니다.
    • Proxy-Authorization: Basic YWRtaW46cGFzc3dvcmQ=
  • HTTP_USER_AGENT
    • 클라이언트가 요청을 보내기 위해 사용 중인 브라우저의 유형 및 버전입니다. 예: Mozilla/1.5.
    • User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
  • PATH_INFO
    • 선택적으로 스크립트를 호출한 HTTP 요청의 추가 경로 정보를 포함하고 있으며 CGI 스크립트로 해석할 경로를 지정합니다. PATH_INFO는 CGI 스크립트가 리턴할 자원 또는 하위 자원을 식별하며 스크립트 이름 뒤에 오지만 모든 조회 데이터 앞에 오는 URI 경로 부분에서 파생됩니다.
    • 이는 HTTP 요청 URL의 특정 부분과 관련이 있습니다. 예를 들어, 요청 URL이 **http://example.com/app/script.cgi/additional/path**라면, **PATH_INFO**는 **/additional/path**가 됩니다.
  • PATH_TRANSLATED
    • 스크립트의 가상 경로를 스크립트를 호출하는 데 사용되는 실제 경로에 맵핑합니다. 맵핑은 요청 URI의 PATH_INFO 구성요소를 가져와 적합한 가상 대 실제 변환을 수행하여 실행됩니다.
    • 이는 서버 설정에 따라 결정되며, 클라이언트가 직접 제공하는 정보는 아닙니다.
  • QUERY_STRING
    • 경로 뒤의 요청 URL에 포함된 조회 문자열입니다.
    • HTTP 요청 URL의 쿼리 문자열 부분입니다. 예를 들어, URL이 **http://example.com/app?name=value**라면, **QUERY_STRING**은 **name=value**가 됩니다.
  • REMOTE_ADDR
    • 요청을 보낸 클라이언트의 IP 주소를 리턴합니다. HTTP 서블릿의 경우 리턴되는 값은 CGI 변수 REMOTE_ADDR의 값과 동일합니다.
    • 클라이언트의 IP 주소와 관련이 있습니다. 예를 들어, 클라이언트의 IP 주소가 **192.0.2.1**이라면, **REMOTE_ADDR**은 **192.0.2.1**이 됩니다.
  • REMOTE_HOST
    • 요청을 보낸 클라이언트의 완전한 이름이거나 이름을 판별할 수 없는 경우 클라이언트의 IP 주소입니다. HTTP 서블릿의 경우 리턴되는 값은 CGI 변수 REMOTE_HOST의 값과 동일합니다.
    • 클라이언트의 호스트 이름 또는 IP 주소와 관련이 있습니다. 예를 들어, 클라이언트의 호스트 이름이 알려져 있지 않다면, 이는 클라이언트의 IP 주소와 동일할 수 있습니다.
  • REMOTE_USER
    • 사용자가 인증된 경우 이 요청을 작성한 사용자의 로그인을 리턴하고 사용자가 인증되지 않은 경우 널(null)을 리턴합니다.
    • 이는 인증된 사용자의 이름과 관련이 있으며, 주로 Authorization HTTP 헤더를 통해 제공된 인증 정보와 관련이 있습니다. 예를 들어, 사용자가 BASIC 인증으로 로그인했다면, **REMOTE_USER**는 해당 사용자의 이름을 포함합니다.
  • REQUEST_METHOD
    • 이 요청을 작성할 때 사용된 HTTP 메소드의 이름을 리턴합니다. 예: GET, POST 또는 PUT.
    • 사용된 HTTP 메소드를 나타냅니다. 예를 들어, GET, POST, PUT 등의 메소드가 있습니다.
  • SCRIPT_NAME
    • 프로토콜 이름에서 HTTP 요청의 첫 번째 라인에 있는 조회 문자열까지, URL의 부분을 리턴합니다.
    • 요청된 스크립트 또는 서블릿의 이름(경로)을 나타냅니다. 예를 들어, URL이 **http://example.com/app/script.cgi**라면, **SCRIPT_NAME**은 **/app/script.cgi**가 됩니다.
  • SERVER_NAME
    • 요청을 수신한 서버의 호스트 이름을 리턴합니다. HTTP 서블릿의 경우 CGI 변수 SERVER_NAME의 값과 동일합니다.
    • 요청을 처리하는 서버의 호스트 이름입니다. 예를 들어, **www.example.com**과 같은 호스트 이름이 될 수 있습니다.
  • SERVER_PORT
    • 이 요청이 수신된 포트 번호를 리턴합니다. HTTP 서블릿의 경우 리턴되는 값은 CGI 변수 SERVER_PORT의 값과 동일합니다.
    • 요청이 수신된 서버의 포트 번호입니다. 예를 들어, 대부분의 HTTP 요청의 경우 80, HTTPS의 경우 **443**이 됩니다.
    • 요청에서 사용된 프로토콜의 이름과 버전을 나타냅니다. 예를 들어, **HTTP/1.1**이나 **HTTP/2.0**과 같은 형식입니다.
  • SERVER_PROTOCOL
    • 요청이 사용하는 프로토콜의 이름과 버전을 protocol/majorVersion.minorVersion 양식으로 리턴합니다. 예: HTTP/1.1. HTTP 서블릿의 경우 리턴되는 값은 CGI 변수 SERVER_PROTOCOL의 값과 동일합니다.
  • SERVER_SOFTWARE
    • 서블릿이 실행 중인 서블릿 컨테이너의 이름과 버전을 리턴합니다.
    • 서블릿 컨테이너 또는 웹 서버 소프트웨어의 이름과 버전을 나타냅니다. 이는 클라이언트에 직접적으로 노출되지 않는 정보이며, 서버 내부에서 사용됩니다. 예를 들어, **Apache/2.4.41 (Unix)**나 **nginx/1.17.10**과 같은 형식이 될 수 있습니다.
  • HTTP_COOKIE
    • HTTP 쿠키 문자열
    • Cookie: WEBTOP_USER=exampleUser; NCHOME=/home/example
    • 이 예시에서 **WEBTOP_USER=exampleUser**와 **NCHOME=/home/example**는 서버가 이전에 클라이언트에 설정한 쿠키이며, 클라이언트는 이후의 요청에서 이 쿠키를 서버에 전송합니다.
  • WEBTOP_USER
    • 로그인한 사용자의 사용자 이름
    • **WEBTOP_USER**는 사용자 이름을 저장하는 쿠키의 이름일 가능성이 높습니다. 사용자가 시스템에 로그인하면, 이 쿠키는 사용자의 사용자 이름을 저장하여, 서버가 후속 요청에서 사용자를 식별할 수 있도록 합니다.
  • NCHOME
    • NCHOME 환경 변수
    • NCHOME은 사용자의 홈 디렉토리나 특정 환경 설정을 나타내는 쿠키로 사용될 수 있습니다. 이 쿠키는 사용자의 환경 설정을 저장하여 웹 애플리케이션의 사용자 경험을 개인화하는 데 도움을 줄 수 있습니다.
// ruby Config
  Location location2_1("/", "/Users/wonyang/Project/webserv/www/",
                       "upload.html");
  location2_1.addAllowMethod(HTTP_GET);
  location2_1.setAutoIndex(false);
  location2_1.addErrorPage(404, "/404.html");
  location2_1.setCgiExtention(".rb");
  location2_1.setCgiPath(
      "/Users/wonyang/Project/webserv/cgi-bin/my-ruby-cgi.rb");
  location2_1.setUploadDir("/Users/wonyang/Project/webserv/www/upload/");

  Location location2_2("/cgi-bin/", "/Users/wonyang/Project/webserv/cgi-bin/",
                       "index.rb");
  location2_2.setCgiExtention(".rb");
  location2_2.setCgiPath(
      "/Users/wonyang/Project/webserv/cgi-bin/my-ruby-cgi.rb");
  location2_2.setUploadDir("/Users/wonyang/Project/webserv/www/upload/");
Clone this wiki locally