본문 바로가기
컴퓨터

HTTP 프로토콜 알아보기-2

by 카앙구운 2016. 1. 6.
728x90
반응형

요청 데이터 포맷

웹 브라우저는 웹 서버에 데이터를 요청하는 클라이언트 프로그램이다. 요청은 서버가 인식할 수 있는 약속된 형식(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.naver.com\r\n 9 \r\n

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

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

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

2. 요청 URL : 요청하는자원의 위치를 명시한다.

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


응답 헤더 포맷

응답 헤더는 서버의 여러 상태 정보를 포함하기 때문에 , 꽤 복잡해질 수 있다.

1 # wget -S http://www.naver.com 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 Expires: Mon, 26 Jul 1997 05:00:00 GMT\r\n 6 Last-Modified: Fri, 08 Jul 2011 00:59:41 GMT\r\n 7 Cache-Control: no-store, no-cache, must-revalidate\r\n 8 Content-Length: 102\r\n 9 Keep-Alive: timeout=15, max=100\r 10 Connection: Keep-Alive\r\n Content-Type: text/html\r\n \r\n

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

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

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

2. 200 : 응답코드

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

3. 날짜

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

5. 응답헤더에는 다양한 정보를 추가할 수 있다. 어떤 정보를 추가할지는 사실상 개발자 마음이다.

6. 컨텐츠 마지막 수정일

7. 캐쉬 제어 방식

8. 컨텐츠 길이

9. Keep Alive 기능설정이다. keep alive는 클라이언트측에 연결을 유지하라는 신호를 보내기 위해서 사용한다. 그러면 클라이언트가 최대 timeout에 지정된 시간동안 연결을 유지한다..

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

10. Content-Type. 응답에 실어 보내는 컨텐츠가 HTML문서인지, 이미지, CSS, JavaScript 인지 혹은 다른 애플리케이션 형태인지를 알려준다. 웹 애플리케이션들은 Content-Type에 따라서 Body의 데이터를 어떻게 읽을지를 결정한다. 따라서 전송데이터에 맞는 Content-Type를 명시해야한다.


응답 코드

서버는 응답코드로 서버의 상태를 알려준다. 3가지의 숫자로 이루어져 있다. 응답코드는 응답헤더의 첫번째 줄에 위치한다.

다음은 주요 응답코드를 정리하였다.

● HTTP/1.1 200 OK \r\n

● HTTP/1.1 404 Not Found\r\n

● HTTP/1.1 500 internal error\r\n


2xx 성공

서버가 요청을 성공적으로 처리했음을 이미한다.


코드번호

설명

비고 

200

성공 

서버가 요청을 제대로 처리했다.

201

생성됨 

요청이 성공했으며, 새로운 리소스를 만들었다. 

 202 

허용됨 

요청은 받았으나, 아직 처리하지는 못했다. 

204

컨텐츠 없음 

요청을 처리했지만, 컨텐츠를 제공하지 않는다. 

205

컨텐츠 재설정 

요청을 처리했지만 컨텐츠를 표시하지 않는다. 그리고 문서를 재 설정할 것을 요구한다. 

206

일부 성공 

요청의 일부만 성공적으로 처리 

207

다중상태 

 


3xx 리다이렉션

때때로 요청을 완료하기 위해서, 다른 페이지로 보내야 할 때가 있다. 예컨데, 로그인을 성공하고 나서 대문 페이지로 보낸다거나, 다운로드 페이지로 보내는 등의 용도로 사용할 수 있다.


코드번호

설명 

비고 

300 

여러 선택 항목 

 

301 

영구이동 

요청한 페이지가 다른 위치로 영구이동 했다. 

302 

임시이동 

요청한 페이지가 다른 위치로 임시이동 했다. 요청자는 여전히 현재 페이지를 요청해야 한다. 

303

기타위치보기 

요청자가 다른 위치에 별로의 GET 요청을 하여 응답을 검색할 경우 

304 

수정되지 않음 

마지막요청 이후 요청한 페이지가 수정되지 않았다. IF-MODIFIED-SINE 헤더에 지정된 날짜/시간 이래로 지정된 문서가 변경된 사실이 없는 경우 이 code로 응답한다. 

305 

프록시 사용 

요청자는 프록시를 사용하여 요청한 페이지만 접근 할 수 있다. 


4xx 요청 오류

클라이언트 요청에 오류가 있음을 의미한다.


 코드번호

설명

비고 

400 

잘못된 요청 

주로 헤더포맷이 HTTP규약에 맞지 않은 경우

401 

권한 없음 

인증을 필요로 하는 요청이다. Basic access autherntication에 사용한다. 

403 

금지 

서버가 요청을 거부한다. 

404 

찾을 수 없음 

요청한 자원이 서버에 존재하지 않는다.

405 

허용하지 않는 방법 

요청에 지정한 방법을 사용할 수 없다. 

406 

허용되지 않음 

요청한 페이지를 컨텐츠 특성 때문에 응답할 수 없다. 

408 

요청시간 초과 

서버의 요청대기 시간을 초과 

410 

사라짐 

요청한 자원이 삭제되었음. 404와 비슷하지만 410은 과거에 있었으나, 지금 없는 자원이다. 예컨데, 게시판에서 삭제한 포스트로 접근하는 경우

411

길이필요 

유효한 컨텐츠 길이를 명시해야한다. 



728x90
반응형

'컴퓨터' 카테고리의 다른 글

Checkout conflict with files:  (0) 2022.05.18
Servlet 개념 정확히 알아가기  (0) 2016.01.11
HTTP 프로토콜 알아보기-1  (0) 2016.01.05
svn 서버 설치하기  (0) 2015.11.23
인터넷 사진 저장 방법  (0) 2015.11.11

댓글