HTTP Request


Request는 브라우저에서 요청된 정보를 서버, 프레임워크가 받아 처리하는 첫번째 동작입니다.

Request 생성


Request동작을 분석하기 위해서는 먼저 request 객체를 생성을 하는 과정을 거치게 됩니다. request 객체는 Application Core 코드에서 생성을 하게 됩니다.

// HTTP Request 인스턴스를 생성합니다.
if ($Request = Registry::create(\Jiny\Core\Http\Request::class, "Request", $this)) {

    // 부트스트래핑
    $this->Boot = new Bootstrap($Request);
    Registry::set("Boot", $this->Boot);

} else {
    echo "HTTP Request 요청을 처리할 수 없습니다.";
    exit;
}

request 객체가 정상적으로 생성되었으면, REWRITE 처리된 URL을 분석하는 Bootstraping 과정으로 들어가게 됩니다.

REWRITE는 모든 URL을 판단하여 .htaccess에 정의된 방법으로 재설정을 하게 됩니다. 실제 파일이 없거나, 존재하지 않는 디렉토리의 경우 index.php로 재설정하게 됩니다. 이렇게 재설정 입력된 URL을 부트스트래핑을 통하여 분석처리 하게 됩니다.

HTTP Response


HTTP는 라이퍼텍스트 전송 프로토콜을 말합니다. HTTP는 클라이언트와 서버 간에 요청과 응답을 통하여 통신을 하게 됩니다.

Response는 브라우저를 통하여 요청된 HTTP Request에 대한 서버측 응답처리 입니다.

HTTP 구조


HTTP처리 및 헤더를 이해하기 위해서 HTTP 메시지의 구조에 대해서 알아 보도록 합니다.

실제적으로 클라이언트와 서버가 통신을 하면서 어떠한 내용들이 서로 주고 받는지를 이해하면 더 좋습니다.

http://withbundo.blogspot.com/2017/07/http-10-http.html

HTTP 요청은


요청라인 + 해더 + 공백 + 바디 4개의 영역으로 구분이 됩니다.

가장 첫줄에 Request Line이 위치합니다. 다음줄 에는 HTTP 헤더 정보 텍스트가 위치합니다.

해더와 바디 사이에는 한줄의 공백으로 분리를 합니다. 그다음 바디 부분이 존재합니다.

다음은 실제 HTTP의 전송의 예 입니다:

HTTP 응답

응답 메시지의 구조는 상태라인 + 해더 + 공백 + 바디로 되어 있습니다. 등답 메시지는 앞에서 학습한 요청 메시지와 구조가 유사합니다.

다음은 실제 응답 코드의 예 입니다.

HTTP 응답코드


서버는 응답코드를 반환합니다. HTTP 응답 상태 코드는 HTTP의 요청이 어떻게 동작이 완료 되었는지를 알려줍니다.

응답코드는 크게 5가지의 그룹으로 구분되어 있습니다.

  • 정보 응답
  • 성공 응답
  • 리다이렉트
  • 클라이언트 에러
  • 서버 에러

보다 자세한 코드의 정보는 RFC 2616 규약을 참고하시길 바랍니다.

https://developer.mozilla.org/ko/docs/Web/HTTP/Status

정보 응답


1xx로 시작되는 코드는 조건부 응답을 말합니다. 클라인언트로 요청을 받았으며 서버는 계속 작업을 수행하고 있다는 것입니다.

성공 응답


2xx로 시작되는 코드는 클라이언트에서 전송한 요청을 성공적으로 서버가 처리하였다는 응답입니다. 즉 요청한 동작을 성공적으로 수행했다는 서버의 승락을 말합니다.

리다이렉트


3xx로 시작되는 코드는 리다이렉션을 처리 하였다는 것입니다.

클라이언트 에러


4xx로 시작되는 코드는 클라이언트의 요청에 오류가 있다는 것을 의미합니다.

서버 에러


5xx로 시작되는 코드는 요청한 동작을 수행하는데 서버에 문제가 있다는 것을 클라이언트로 전송합니다.