다음은 성공과 실패를 결정하는 1%의 네트워크 원리 를 읽고 정리한 내용입니다. 본 글은 CH6. 웹 서버에 도착하여 응답 데이터가 웹 브라우저로 돌아간다 입니다 🙌



🛺 [Story3] 웹 서버 소프트웨어가 리퀘스트 메시지의 의미를 해석하여 요구에 응한다.

1. 조회의 URI를 실제 파일명으로 변환한다

  • http 요청 메세지의 메소드와 URI에 따라서 웹 서버 내부의 동작이 달라진다.
  • URI에 적힌 경로에 따라서 데이터를 얻어 응답하는 것이다.
    • 하지만 이 데이터를 반드시 디스크에서 읽는 것은 아니다.
    • URI에 기록된 경로명의 파일을 읽어오면 디스크의 파일이 전부 노출되기 때문에 무방비해진다.
  • 해결 방법으로 웹 서버에 공개하는 디렉토리를 디스크의 실제 디렉토리가 아니라 가상으로 만든 디렉토리 구조를 사용하도록 한다.
    • 웹 어플리케이션 내부에서 가상으로 설정한 디렉토리와 실제 데이터를 대응하여 해당 데이터를 반송하도록 한다.
  • 만일 브라우저에서 보낸 URI에 마지막 파일명이 생략되면 default로 설정된 파일명이 추가되어서 화명에 표시된다.
    • ex. index.html

2. CGI (Common Gateway Interface) 프로그램을 작동하는 경우

  • 만일 파일 내용에 HTML 문서나 화상데이터면 해당 데이터를 그대로 응답하면 된다.
  • 하지만 만일 문서 등이 아니라 프로그램 파일의 이름을 쓸 수도 있다.
    • 파일의 내용을 그대로 반송하는 것이 아니라 해당 프로램을 작동시켜 출력하는 데이터를 반송해야 한다.
    • 여러 프로그램 유형이 있고 각 유형에 따라서 동작 방식은 상이하다.
  • 단순 문서를 요청하는 경우와 위에서 말한 프로그램을 동작시켜서 데이터를 얻는 요청 메세지의 형태가 다르다.
    • 요청 메세지 안에 처리하고자 하는 데이터를 넣어서 보낸다.
    • 예를 들어서 GET 요청일 경우 query params를 POST 요청일 경우 request body에 데이터가 추가되서 요청 메세지가 온다.
  • 해당 요청 메세지가 온다면 웹 서버는 다음과 같이 동작한다.
    • 먼저 URI에 적힌 파일명을 보고 프로그램인지 확인한다.
      • ex. .cgi, php 등등
    • 프로그램이라면 해당 프로그램을 작동시키도록 OS에 의뢰한다.
    • 데이터를 처리한 후 출력 데이터를 웹 서버에 돌려준다. 해당 데이터는 Html 태그를 내장한 문서이므로 이것을 응답 메세지로 클라이언트에 반송한다.

3. 웹 서버로 수행하는 액세스 제어

  • 웹 서버에서는 데이터를 특정 조건에 따라서 액세스를 제어할 수 있다.
    • 예를 들어 회원 정보에서 특정 조건으로 동작을 금지시킬 수 있다.
  • 이때 사용되는 정보는 다음 3가지 이다.
    1. 클라이언트 주소
    2. 클라이언트 도메인명
    3. 사용자명과 패쓰워드
  • 이 조건을 판단하여 액세스가 허가된 경우에만 파일을 읽거나 프로그램을 실행하도록 할 수 있다.
  • 예시
    • 클라이언트 IP 주소가 조건이라면 accept로 접속했을 때 점검한다.
    • 클라이언트 도메인명이면 클라이언트 IP주소로 DNS 서버를 이용해 조사한다.
      • 요청을 받은 웹 서버는 DNS 서버로 요청을 보내 도메인명을 조사한다.
      • 도메인명을 응답 받으면 해당 도메인 명의 IP가 클라이언트의 송신처 IP와 동일한지 이중으로 확인한다.
    • 사용자명과 패쓰워드를 입력하여 액세스를 제어하기도 한다.

4. 응답 메세지를 되돌려 보낸다.

  • 최초 클라이언트가 요청 메세지를 웹 서버에 응답하는 동작과 동일하다.
  • 웹 서버가 소켓 라이브러리의 write 함수를 호출하여 응답 메세지를 프로토콜 스택에 건내준다.
  • 어느 소켓을 사용하여 통지할 지 디스크립터를 통지하여 상대를 지정한다.
  • 해당 패킷이 프로토콜 스택에 의뢰되어 응답된다.

🛺 [Story4] 웹 브라우저가 응답 메시지를 받아 화면에 표시한다

1. 응답 데이터의 형식을 보고 타입을 판단한다

  • 응답 메시지에 저장된 데이터가 어떤 종류인지 조사한다.
    • 문장, 화상, 음성, 영상 등등
  • 응답 메시지의 헤더에 Content-Type을 통해 데이터의 종류를 쓰도록 한다.
    • MIME 사양으로 그 종류가 규정되어 있다.
  • 데이터의 종류가 text라면 어떤 문자 코드를 사용해야하는지 charset을 통해서 판단한다.
  • Content-Encoding 을 통해 헤더의 필드 값을 조사한다.
    • 압축 기술이나 부호화 기술에 따라서 변환 여부를 알아야 한다.
  • 요청 파일의 확장자를 통해서 데이터를 판단하기도 한다.

2. 브라우저 화면에 웹 페이지를 표시하여 액세스를 완료한다

  • HTML의 경우 그 태그의 의미를 해석하여 OS가 어느 위치에 어떻게 표시할지 지시한다.
  • JPEG나 GIF 형식은 압축을 풀고 건네준다.
  • 관련된 응답 데이터 중 소프트웨어 어플리케이션 데이터는 해당 데이터를 호출하여 화면에 표시될 수도 있다.
    • 워드프로세서나 프레젠테이션 등등.