Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Finn의 개발블로그

1-1. HTTP 리퀘스트 메시지를 작성한다 본문

Network

1-1. HTTP 리퀘스트 메시지를 작성한다

BeginnerFinn 2019. 4. 4. 22:40

1.탐험 여행은 URL 입력부터 시작한다

  • url은 http:// 로 시작하는것 뿐만 아니라 ftp:, file: 등 여러가지가 존재합니다
  • 브라우저는 웹 서버에 액세스하는 클라이언트로 사용하는 경우가 많지만 브라우저의 기능은 다양합니다
  • 파일을 다운로드/업로드, 메일, 기능들도 가집니다, 
  • 몇 가지 기능 중의 어느 것을 사용하여 데이터에 액세스 하면 좋을 것인지를 판단해야 합니다
  • URL은 공통점은 맨 앞에 있는 문자열, 즉 http, ftp, file, 라는 부분에서 액세스하는 방법을 나타냄, 이것들을 프로토콜이라고 하고 프로토콜은 통신 동작의 규칙을 정한 것 입니다

2. 브라우저는 먼저  URL을 해독한다

  • http://www.lab.cyber.co.kr/dir/
    • http: URL의 맨 앞에는 데이터 출처에 액세스하는 방법 즉 프로토콜
    • www.lab.cyber.co.kr 웹 서버명
    • /이후에는 데이터 출처의 경로명을 나타내고, 생략 가능합니다

3. HTTP의 기본 개념

  • HTTP 프로토콜은 클라이언트와 서버가 주고받는 메시지의 내용이나 순서를 정한 것 입니다.
  • 클라이언트가 서버를 향해 리퀘스트 메시지를 보냅니다. 리퀘스트 메시지 에는 '무엇을', '어떻게 해서' 하겠다는 내용이 있습니다
  • '무엇을'에 해당하는 것을 URI라고 하는데 보통 페이지 데이터를 저장한 파일의 이름이나 CGI 프로그램의 파일명을 URI 씁니다. 예를 들어 '/dir1/file1.html' 입니다. CGI 프로그램은 웹 서버 소프트웨어에서 프로그램을 호출할 떄의 규칙을 정한 것이 CGI이며 CGI 규칙에 맞게 움직이는 프로그램을  'CGI 프로그램'이라고 합니다. 또한 http:로 시작하는 URL 그대로 쓸 수도 있습니다, 즉 여기에는 다양한 액세스 대상을 쓸 수 있으며, 이러한 액세스 대상을 통칭하는 말이 URI입니다 
  • '어떻게 해서'에 해당하는 것이 메소드로, 이 메소드에 의해 웹 서버에 어떤 동작을 하고 싶은지를 전달합니다. 대표적으로 GET,POST,PUT,DELETE가 있습니다
  • HTTP의 메시지에는 보충 정보를 나타내는 헤더 파일도 있습니다.
  • 리퀘스트 메시지가 웹 서버에 도착하면 웹 서버는 그 속에 쓰여있는 내용을 해독하여 '무엇을', '어떻게 하는지' 판단한 후 요구에 따라 동작하고 결과 데이터를 응답메시지에 저장합니다
  • 응답 메시지의 맨 앞부분에는 실행 결과가 정상 종료되었는지 또는 이상이 발생했는지를 나타내는 스테이터스 코드가 있습니다.
  • 그 후 헤더 파일과 페이지의 데이터가 이어지고, 이 응답 메시지를 클라이언트에 반송합니다. 그러면 이것이 클라이언트에 도착하여 브라우저가 메시지의 안에서 데이터를 추출하여 화면에 표시하면서 HTTP의 동작은 끝납니다
  • GET 요청은 데이터를 읽을 떄 사용하는 메소드 입니다. 리퀘스트 메시지의 메소드에 'GET'이라고 쓰고 URI에는 '/dir/file.html'과 같이 페이지의 데이터를 저장한 파일의 이름을 씁니다. 이렇게 하면 '/dir/file.html' 파일을 읽으라는 의미 입니다. 이 메시지가 웹 서버에 도착하면 서버는 '/dir/file.html' 이라는 파일을 열고 내용의 데이터를 추출한 데이터를 응답 메시지에 포함해서 클라이언트에게 반송하면 클라이언트측의 브라우저가 이것을 받아 화면에 표시하는 것입니다.
  • POST요청은 폼에 데이터를 사용해서 웹 서버에 송신하는 경우에 사용합니다. 리퀘스트 메시지 안에는 메시지와 URI와 더불어 CGI 프로그램이나 스크립트에 건네주는 데이터도 쓰는데, 이 데이터는 사용자가 필드에 입력한 값입니다. 메시지가 서버 기게예 도착하면 웹 서버 소프트웨어는 URI에 지정된 애프리케이션 프로그램에게 리퀘스트 메시지의 안에 쓰여있는 데이터를 건네줍니다. 그리고 이 프로그램이 출력하는 데이터를 받아서 응답 메시지에 포함시킨 후 클라이언트에게 반송합니다.

4. HTTP 리퀘스트 메시지를 만든다

  • URL을 해독하고 웹 서버와 파일명을 판단하면 브라우저는 이것을 바탕으로 HTTP의 리퀘스트 메시지를 만듭니다. 실제 HTTP메시지는 포맷이 결정되어 있으므로 브라우저는 이 포맷에 맞게 리퀘스트 메시지를 만듭니다.

   리퀘스트 메시지

   <메소드><공백><URI><공백><HTTP 버전> --> 첫 번쨰 행을 '리퀘스트 라인'이라고 합니다

    <필드명>:<필드값> --> 이 부분을 '메시지 헤더'라 하며, 한 행에 한 개의 헤더 필드를 씁니다. 리퀘스트의 부가적인 정보를 나타냅니다.

     .

     .

     .

    <공백행>

    <메시지 본문> --> 메시지 본문은 내용은 클라이언트에서 서버에 송신하는 데이터, 폼 페이지에 입력한 데이터를 POST 메소드로 웹                                      서버에 보낼때 등에 데이터가 들어갑니다.

 

5. 리퀘스트 메시지를 보내면 응답이 돌아온다

  • 스테이터스 코드는 숫자로 쓴 것이며, 주로 프로그램  등에 실행 결과를 알려주는 것이 목적입니다
  • 응답 문구는 문장으로 쓰여있으며 사람에게 실행 결과를 알리는 것이 목적입니다
  • 영상 등을 포함한 경우에는 문장 안에 영상 파일을 나타내는 태그라는 제어정보가 포함되어 있으므로 브라우저는 화면에 문장을 표시할 때 태그를 탐색합니다
  • 영상을 포함하고 있는 의미의 태그를 만나면 그곳에 영상용 공백을 비워두고 문장을 표시합니다.
  • 이후 다시 한 번 웹 서버에 액세스 하여 태그에 쓰여있는 영상 파일을 웹 서버에서 일어와서 방금 전에 비워둔 공백에 표시합니다.
  • 리퀘스트 메시지에 쓰는 URI는 한 개 만으로 결정되어 있이므로 파일을 한번에 한 개씩만 읽을 수 있기 때문에 만약 한 문장에 3개 여앙이 포함되어 있다면 문장 영상 파일 3개, 리퀘스트 1개, 총 4회 리퀘스트 메시지를 웹 서버에 보냅니다.
  • 필요한 파일을 판단하고 이것을 읽은 후 레이아웃을 정해서 화면에 표시하는 것은 브라우저의 역할입니다

   응답 메시지

   <HTTP 버전><공백><스테이터스 코드><공백><응답 문구>--> 스테이터스 코드의 내용을 나타내는 짧은 설명문

   <필드명>:<필드값>

    .

    .

    .

   <공백 행>

    <메시지 본문> --> 메시지 본문의 내용은 서버에서 클라이언트에 송신하는 데이터 파일에서 읽은 데이터나 CGI 애플리케이션이 출력                                    한 데이터가 들어갑니다. 메시지 본문은 바이너리 데이터로 취급합니다.