Web

웹 작동방식 (HTTP request, response)

deerfrd 2017. 2. 6. 13:15
반응형

HTTP Request

클라이 ------------------------------------------------> 웹

언트  <------------------------------------------------ 서버

  HTTP Response



HTTP는 서버가 클라이언트의 요청(request)에 응답(response)한 이후에 클라이언트의 상태에 대하여 어떤것도 자체적으로 유지/관리 하지 않는 stateless 프로토콜이다.(무상태 프로토콜)


HTTP를 기반으로 하는 클라이언트와 웹 서버가 서로 정보를 주고받는 4단계

1. 연결설정 : 클라이언트는 디폴트로 서버의 포트80번에 TCP연결을 만듦

2. 요청메세지 전송 : 요청 메세지의 첫 라인을 요청라인("GET /index.html HTTP/1.0")이라고 하는데,

"GET 메소드를 이용하여, /index.html이라는 상대경로인 URL으로 요청하며, HTTP/1.0버전을 사용한다" 는 의미이다.

요청라인을 통해 클라이언트는 웹 서버에 요청 메시지를 전달하고, 추가적인 헤더 정보를 덧붙여 보낸다.(추가 헤더 정보는 안붙여도 요청라인 한줄만 보내면 웹 서버로 요청이 가능하다.) 요청메세지(요청라인 + 추가 헤더정보) 끝에는 반드시 공백라인을 붙여서 요청이 끝났음을 알려줘야한다.


요청메세지의 예시 (요청라인+추가 헤더정보+공백라인)

GET /index.html HTTP/1.0 

accept : image/gif, img/x-xbitmap, img/jpeg

accpet-language : ko

ua-cpu : x86

user-agent : Mozila/4.0 (compatible; MSIE 7.0;)

[공백라인]


3. 응답메세지 전송 : 클라이언트로 부터 2번의 요청메세지를 전달받은 웹 서버는 이제 응답을 해야한다.

이 때, 응답메세지의 첫 라인인 응답라인은 "HTTP/1.0 200 OK" 와 같다.

응답코드는 200 말고도 다양하게 존재한다. (100~199:요청이 현재 처리됨 / 200~299:성공 / 300~399:리다이렉션 / 400~499: 클라이언트 쪽의 에러 / 500~599:서버쪽의 에러).

응답메세지도 응답라인 + 추가 헤더정보 로 구성될 수 있는데, 응답메세지 끝에도 요청메세지와 마찬가지로 공백라인을 붙여서 응답이 끝났음을 알려주고, 응답메세지 공백라인 다음에는 응답메세지의 본문인 html 코드들이 온다.


응답메세지의 예시(응답라인+추가 헤더정보+공백라인+본문인 html코드)

HTTP/1.0 200 OK

Server:Apache

MIME-version:1.0

Content-type:text/html

Content-length: 107

[공백라인]

<html>

<HEAD>

<Title>

Index Page Test

</Title>

</HEAD>

<body>

HI World

</body>

</html>


4. 연결 끊기 : 이렇게 4단계를 거쳐 독립된 하나의 HTTP 정보 전달 과정이 완료됨. 

HTTP는 앞서 말했듯이 무상태 프로토콜이라 한번 클라이언트-서버 간의 요청 및 응답이 종료되면, 다시 요청을 시작해도 이전의 요청 및 응답 내용을 기억하지 못한다. 그래서 HTTP는 서버의 부하를 최대로 줄일 수 있다는 장점이 있다. 




사진 및 글 출처 : 구루비 지식창고 (http://wiki.gurubee.net/pages/viewpage.action?pageId=26740202)

Servlet 동작과정

  • ① 사용자가 URL을 클릭하면 HTTP Request를 Servlet Container에 보낸다.
  • ② Servlet Container는 HttpServletRequest, HttpServletResponse 두 객체를 생성한다.
  • ③ 사용자가 요청한 URL을 분석하여 어느 서블릿에 대한 요청인지 찾는다. (web.xml를 참조하여 분석)
  • ④ 컨테이너는 서블릿 service() 메소드를 호출하며, POST, GET여부에 따라 doGet() 또는 doPost()가 호출된다.
  • ⑤ doGet() or doPost() 메소드는 동적인 페이지를 생성한 후 HttpServletResponse객체에 응답을 보낸다.
  • ⑥ 응답이 완료되면 HttpServletRequest, HttpServletResponse 두 객체를 소멸시킨다.


반응형