본문 바로가기
개발

http 프로토콜 -2

by 카앙구운 2017. 3. 9.
728x90
반응형


URI

클라리언트 프로그램(이하 웹 브라우저)은 URI를 이용하여 자원의 위치를 찾는다. URI는 HTTP와는 독립된 다른 체계다. HTTP는 전송 프로토콜이고, URI는 자원의 위치를 알려주기 위한

프로토콜이다. Uniform Resource Identifiers의 줄임말로, www 상에서 접근하고자 하는 자원의 위치를 나타내기 위해서 사용한다. 자원은 "이미지", "동영상", "프로그램","이메일" 등

모든 것이 될 수 있다.

http://message0412.tistory.com/category/IT/java

 1.http: 자원에 접근하기 위해서 http 프로토콜 사용

 2.message0412.tistory.com자원의 인터넷 상에의 위치는 message0412.tistory.com이다. 도메인은 ip주소로 변환되므로, ip주소로 서버의 위치를 찾을 수 있다.

 3.category/IT/java:요청할 자원의 이름이다.

이렇게 "프로토콜", "위치","자원명" 으로 (인터넷상에서) 어디에 있던지 자원에 접근할 수 있다.


Method

메서드는 요청의 종류를 서버에게 알려주기 위해서 사용한다. 다음은 요청에 사용할 수 있는 메서드들이다.

.GET : 정보를 요청하기 위해서 사용한다.(SELECT)

.POST : 정보를 밀어넣기 위해서 사용한다.(INSERT)

.PUT : 정보를 업데이트하기 위해서 사용한다.(UPDATE)

.DELETE : 정보를 삭제하기 위해서 사용한다.(DELETE)

.HEAD : (HTTP)헤더 정보만 요청한다. 해당 자원이 존재하는지 혹은 서버에 문제가 없는지를 확인하기 위해서 사용한다.

.OPTION : 웹서버가 지원하는 메서드의 종류를 요청한다.

.TRACE : 클라이언트의 요청을 그대로 반환한다. ECHO 서비스로 서버 상태를 확인하기 위한 목적으로 주로 사용한다.


보통 웹 서비스들은 GET과 POST만을 이용해서 개발한다. DELETE나 PUT등이 필요한 요청에도 GET과 POST를 사용하는데, 예를들어 게시판의 특정

레코드를 삭제할때도 GET으로 표현한다. www.spample.com/bbs?id=1234&action=delete

각 용도에 맞는 메서드가 준비되어 있음에도 불구하고 이렇게 사용하는 이유는

 1.GET과 POST만으로 모든 종류의 요청을 표현할 수 있어서

 2.편하게 개발하고 싶어서

 3.웹 브우져로 DELETE,HEAD 을 보내는 form이 없어서 이다.



요청 데이터 포맷

웹 브라우저는 웹서버에 테이터를 "요청"하는 "클라이언트 프로그램"이다. 요청은 서버가 인식할 수 있는 약속된 형식(HTTP 형식)을 따라야 한다.

요청 데이터는 "HEADER"와 "BODY"로 구성된다.




1 GET /cgi-bin/http_trace.pl HTTP/1.1\r\n

2 ACCEPT_ENCODING: gzip,deflate,sdch\r\n

3 CONNECTION: keep-alive\r\n

4 ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n

5 ACCEPT_CHARSET: windows-949,utf-8;q=0.7,*;q=0.3\r\n

6 USER_AGENT: Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.24\r\n 

7 ACCEPT_LANGUAGE: ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4\rn

8 HOST: www.joinc.co.kr\r\n

9 \r\n


HTTP 헤더는 라인피드와 캐리지리턴(\r\n)을 함께 사용한다. HTTP헤더를 파싱할떄 주의 해야한다.

 1.필수 요소로 요청의 제일 처음에 와야하며 3개의 필드로 이뤄져 있다.

1. 요청메서드: GET, PUT, POST, PUSH, OPTIONS 등의 요청 방식이 온다. GET

2. 요청 URL : 요청하는 자원의 위치를 명시한다. /cgi-bin/http_trace.pl

3. HTTP 프로토콜 버전: 웹 브라우저가 사용하는 프로토콜 버전이다.  HTTP/1.1


1  # wget -S http://www.test.co.kr

2  HTTP/1.1 200 OK\r\n

3  Date: Fri, 08 Jul 2011 00:59:41 GMT\r\n

4  Server: Apache/2.2.4 (Unix) PHP/5.2.0\r\n

5  X-Powered-By: PHP/5.2.0\r\n

6  Expires: Mon, 26 Jul 1997 05:00:00 GMT\r\n

7  Last-Modified: Fri, 08 Jul 2011 00:59:41 GMT\r\n

8  Cache-Control: no-store, no-cache, must-revalidate\r\n

9  Content-Length: 102\r\n

10 Keep-Alive: timeout=15, max=100\r\n

11 Connection: Keep-Alive\r\n

12 Content-Type: text/html\r\n

13 \r\n


1. wget으로 헤더 정보를 출력했다.

2. 프로토콜과 응답코드 : 반드시 첫줄에 와야한다. 3개의 필드로 구성되어 있다.

1. HTTP /1.1 : 응답 프로토콜 버전

2. 200 : 응답코드

3. OK : 응답 메시지. Not Found, Internal Server Error 등의 메시지이다.

3. 날짜

4. 서버 프로그램 및 스크립트 정보

5. 응답헤더에는 다양한 정보를 추가 할 수 있다. HTTP 기반의 서버/클라이언트 제품을 만든다면

헤더에 애플리케이션 정보를 추가해서 사용하면 된다.

7. 컨텐츠의 마지막 수정일

8. 캐쉬 제어 방식

9. 컨텐츠 길이

10. Keep Alive 기능 성정

Keep Alive는 클라이언트 측에 연결을 유지하라는 신호를 보내기 위해서 사용한다. 그러면 클라이언트는 최대 timeout에 지정된

시간동안 연결을 유지한다. 이 시간동안 클라이언트는 이미 맺어진 연결로 요청을 계속 보낼 수 있다.

12.Content-Type : 응답에 실어 보내는 컨텐츠가 HTML 문서인지, 이미지인지, CSS,javascript 인지 혹은 다른 애플리케이션 형태인지를 알려준다.

웹 애플리케이션들은 Content-Type에 따라서 Body의 데이터를어떻게 읽을지를 결정한다. 따라서 전송 데이터에 맞는 Content-Type을 명시해야한다.



728x90
반응형

'개발' 카테고리의 다른 글

이클립스 workbench 문제해결 방법  (0) 2019.03.11
재미있는 개발  (0) 2018.05.21
http 프로토콜 -1  (0) 2017.03.08
네티(netty)  (0) 2017.03.06
전자정부프레임워크 개론  (0) 2016.05.30

댓글