Finn의 개발블로그
1-1. HTTP 리퀘스트 메시지를 작성한다 본문
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 애플리케이션이 출력 한 데이터가 들어갑니다. 메시지 본문은 바이너리 데이터로 취급합니다.
'Network' 카테고리의 다른 글
2-1. 소켓을 작성한다. (0) | 2019.04.27 |
---|---|
1-4. 프로토콜 스택에 메시지 송신을 의뢰하다 (0) | 2019.04.25 |
1-3. 전 세계의 DNS서버가 연대한다 (0) | 2019.04.16 |
1-2. 웹 서버의 IP주소를 DNS서버에 조회한다 (0) | 2019.04.09 |