finerss's world!

웹 서버(Web Server)
웹 서버는 클라이언트로부터 요청을 받아, 요청한 것을 넘겨주는 일을 한다.
즉, 사용자가 웹 브라우저로, 서버에 있는 자원(resource)을 요청하면 서버는 사용자가 요청한 것을 넘겨주는 것(응답)으로 작업이 완료된다. 잠깐 웹클라이언트 에대해서 설명하자면

- 웹 클라이언트는 사용자가 서버에 요청을 보낼 수 있는 기능을 제공한다. 서버에 요청을보내고 서버가 보내온 요청결과를 화면에 출력하는 일도 클라이언트의 역활
-클라이언트라는 용어는 사용자, 브라우저(응용프로그램) 을 뜻하기도하는데 브라우저는 서버랑 통신하는 넷스케이프나 모질라와 같은 소프트웨어를 말합니다. 브라우저의 주된역활을 HTML 코드를 읽어서(파싱), 화면에 보이는 것이다.



HTTP(HyperText Transfer)와
HTML(Hypertext Markup Language)


클라이언트로부터 요청을 받고나면, 서버는 브라우저에게 보낼 컨텐츠타입이 무엇인지 알려준다. 브라우저는 이것을보고 어떻게 화면에 출력할지 준비한다. 서버가 보내는 것은 HTML이라는 명령문으로, 이는 브라우저가 화면에 컨텐츠를 어떻게 출력할지에 대한 명령(instruction)으로 이루어져 있다. 그러므로 웹 브라우저는 HTML을 이해하고 있다.

웹상에서 일어나는 클라이언트와 서버간 대화는 거의 대부분 HTTP 프로토콜로 이루어진다.
HTTP프로토콜은 요청과 응답으로 이루어진 아주 단순한구조로 클라이언트가 HTTP요청을 보내면, 서버는 HTTP 응답으로 답한다.

HTML-브라우저가 서버로부터 받은 요청결과를 화면에 표시할 방법을 지정해준다.
HTTP-웹 상에서 클라이언트와 서버가 서로 대화하기 위한 규약, 언어를 지칭
서버는 클라이언트로 HTML을 전송하기 위해 HTTP를 사용한다!!

HTTP 프로토콜을 살펴보면

 HTTP는 TCP/IP 위에서 돌아간다. TCP/IP에서 TCP는 한쪽 노드에서 다른 쪽 노드로 파일을 보내는 역활을 하며 IP는 한 호스트에서 목적지 호스트까지 패킷을 옮기고 이동하기 위한 기반(베이스)프로토콜 이라고할수 있다. 하지만 HTTP는 TCP/IP를 기반으로하여 웹에서만 사용하는 프로토콜이며, TCP/IP를 이용해서 한 지점에서 다른 지점으로 요청과 응답을 전송한다.
즉, HTTP구조는 요청-응답의 끊임없는 주고 받음 이라고 말할수 있다.(클라이언트는 요청하고 서버는 여기에 응답한다)

HTML은 HTTP 응답안에 들어있다. HTTP응답에는 HTTP뿐만아니라 헤더정보라는것도 들어있는데 브라우저는 헤더정보로 컨텐츠를 어떻게 화면에 보여줄지에 대한 힌트를 얻는다.


요청과응답(HTTP 메소드)

HTTP 프로토콜에는 메소드가 여러가지 있는데, 그중 가장 많이 사용하는 것은 GET과 POST이다.
GET은 HTTP 메소드 중 가장 단순하며 단순히 서버에게 자원을 요청한다. 열기서 말하는 자원이란 HTML페이지나 JPEG 이미지, PDF문서 등을 말한다. GET의 핵심은 서버로부터 뭔가를 돌려(get back) 받는다 라는 것이다.
POST는 좀더 강력하다. POST는 서버에게 자원을 요청할때 필요한 정보를 함께 넘겨준다.
하지만 GET 방식역시 많지는 않지만 데이터를 보낼수있는데!! 다음과 같은이유로 GET보다는 POST를 사용해야하는 경우가있다.

- GET으로 보낼수 있는 글자수는 제한이 있다.
- GET의 데이터 전송방식은 브라우저 주소란에 기입하는 URL 뒤에 붙이는 식으로 중요한 데이터든 아니든 간에 화면에 노출이된다. 그러므로 패스워드처럼 민감한 데이터는 GET으로 보내지 않는것이 현명할 것이다.
ex) http://apis.daum.net/blog/category/list.do?blogName=finerss
                 URL           /웹서버상 자원에대한경로                ? 는 경로와 파라미터를구분하는 구분자이다.
한마디로말해 URL자체가 하나의 긴 문자열(String)이라는 것이다
- 위에 두가지 이유로 GET 으로 전송하는 URL은 즐겨찾기에 등록할 수 있지만, POST는 대부분 그렇지 못하다. 브라우저에 따라 폼의 서밋(submit) 결과를 즐겨찾기에 등록할수도, 못할 수도 있다.

                                                                                                    
                    <GET방식>                         
요청 라인 (HTTP메소드와 웹서버상 자원에대한경로, 그리고 파라메터가 URL바로다음 ?문자를 구분자로 기술하며 개별 파라메터는 &값으로 구분,브라우저가 요청한 프로토콜버전 을 담고있다)
요청 헤더 (Header)


<POST방식>
요청라인 (HTTP메소드와 웹서버상 자원에대한경로, 그리고 파라메터가 URL바로다음 ?문자를 구분자로 기술하며 개별 파라메터는 &값으로 구분,브라우저가 요청한 프로토콜버전 을 담고있다)
요청 헤더 (Header)
 메시지몸체 (파라메터는 여기서부터 기술. GET에서는 요청라인에 표기를 했기떄문에 길이에 제한이 있었지만 POST에서는 제한이 없습니다.)

위와 같은 방식으로 GET/POST 는 서버에 요청한다. 
지금까지 서버로 보내는 요청을 알아보았고 이제 반대로 서버가 클라이언트로 보내는 응답에 대해 알아보자.

HTTP응답은 간단히 헤더와 몸체로 구성되어있다. 헤더에는 사용된 프로토콜이 뭔지, 보내준 요청이 성공했는지, 몸체에 포함된 컨텐츠의 종류는 무엇인지 등이 있고, 몸체에는 HTML과 같은 컨텐츠가 들어있다. 브라우저는 바로 이정보를 화면에 출력한다.

 HTTP 응답 헤더
 컨텐츠

헤더에 Content-type 의값이 있는데 보통 MIME타입이라고 부른다. MIME타입이란 브라우저에게 "지금 서버가 이러 이러한 데이터를 보내려고하니 화면에 보여줄 준비를하시오" 라는 정보인데 서버가 보내주는 MIME타입은 클라이언트가 보낸 요청의 헤더중 Accept란에 기술되어있는 값과 관련이있다. (요청헤더의 Accept 설명은 행복한아빠님의블로그 에 잘설명되어있다)


URL(Uniform Resource Locators)


(1)http://(2)www.wickedlysmart.com(3):80(4)/beeradvice/select/(5)beer1.html

(1): 프로토콜(Protocol)-서버와 대화하기위하여 사용하는 커뮤니케이션프로토콜.
(2): 서버(Server)-인터넷 상에 이름 이이름은 ip주소에 매핑된다.
(3): 포트(Port)- 포트는 URL에서 옵션이다 어떤포트번호로 어떤서버 애플리케이션이 서비스되는지알수있다 80이 디폴트
(4): 서버에서 자원의 위치
(5): 자원- 요청된 컨텐츠 이름. 자원에는 HTML,Servlet,dlalwl,PDF,음악 등 서버가 제공하는 모든것이다포함되어있다. 자원을 명시하지않으면 많은 웹 서버들은 index.html을 기본으로 넘겨준다.
*숨겨진 부분 : 질이어(쿼리 스트링): GET방식이라면, 이데이터는 URL의 뒷부분에 파라미터로 죽 붙여서 날아온다 ?마크를 필두로 파라미터 이름과 파라미터값을 한 쌍으로 해서, 여러 쌍일경우 &로 구분해서 날아온다