티스토리 뷰

728x90
반응형

HTTP 메세지 :  클라이언트, 서버, 프록시 사이를 흐르는 HTTP 어플리케이션 간의 데이터 블록



서버로의 요청은 인바운드   응답으로 되돌아오는것은 아웃바운드



모든 HTTP 메세지는 다운스트림이다  



요청 프록시 1 ->                                                     프록시 1이 요청시엔 프록시 3의 업스트림이지만

프록시 2 ->                                     응답시엔 프록시 3이 프록시 1의 업스트림

프록시 3  ->

서버

프록시 3<-

프록시 2 <-

요청 프록시 1 <-




HTTP메세지는 시작점, 헤더, 본문 으로 구성된다     본문은 없어도된다.



시작점 : 이것이 어떤 메세지인가에 대한 정보가 나타나있음

헤더 : 이 메세지의 속성들 기술

본문 : 이 메세지의 데이터



시작점과 헤더는 문장이 끝날때 줄바꿈 문자열(CRLF)로 끝나야한다    개행 문자열도 가능



Content-type : 본문이 무엇인지 알려줌

Content-length: 본문의 크기를 알려줌



요청 : 서버의 어떤 동작을 요구

응답 : 요청의 결과를 전달


요청 메세지


<메소드> <요청 URL> <버전>

<헤더>

<본문>


응답 메세지


<버전> <상태코드> <사유구절>

<헤더>

<본문>



메소드 : 클라이언트 측에서 서버가 리소스에 대해 이렇게 동작해줬으면하는걸 말함


버전 : HTTP (메이저) / (마이너)   메이저, 마이너 부분 둘다 정수


헤더 : 헤더는 반드시 CRLF(빈줄)로 끝나야함     본문과 구별하기위해


상태 코드 : 클라이언트의 요청에 무슨일이 일어났는지 상태를 나타내는 코드


사유구절 : 상태코드를 인간이 이해하기쉬운 문자로 표현     오로지 인간을 위해서 사용되는것


본문 : 데이터들


본문에 아무것도없어도 CRLF를 해야한다     하지만 사람이 잊을수있기때문에 CRLF가 없어도 받아들일수있도록 호환성을 


갖추어야한다

모든 HTTP 메세지는 시작줄로부터 시작한다 요청 메세지의 시작줄은 무엇을 해야할지 전달하고


응답 메세지의 시작줄은 요청의 결과에대한 정보를 전달한다



요청 메세지의 시작줄 : 서버가 요청URL에 대해 요청 메소드 기능을 수행하기를 요청  HTTP버전도 알려줌

응답 메세지의 시작줄 : HTTP버전과 요청의 결과에 따른 상태코드와 사유구절을 전달 



요청메세지, 응답메세지의 각 필드는 공백으로 구분


메소드 : 서버에게 무엇을 해야하는지 알려줌


HTTP메소드


메서드

 설명

 메시지 본문 

 GET

 서버에서 어떤 문서를 가져온다.

 없음

 HEAD

 서버에서 어떤 문서에 대해 헤더만 가져온다.

 없음

 POST

 서버가 처리해야 할 데이터를 보낸다.

 있음

 PUT

 서버에 요청 메시지의 본문을 저장한다. 

 있음

 TRACE

 메시지가 프락시를 거쳐 서버에 도달하는 과정을 추적한다.

 없음

 OPTIONS

 서버가 어떤 메서드를 수행할 수 있는지 확인한다.

 없음

 DELETE

 서버에서 문서를 제거한다.  

 없음



모든 서버가 위 메소드들을 다 구현해놓진 않는다


어떤 서버는 위의 메소드에는 없는 확장메소드를 구현해서 사용할수도있다


상태코드 : 클라이언트의 요청에 따른 결과가 어떤지 나타내준다


사유구절이 인간이 보기쉽다면 상태코드 프로그램이 처리하기쉽다


200  == OK

401  == Unauthorized

404  == NotFound


상태코드 분류


전체 범위        정의된 범위        분류

100 - 199         100 - 101         정보 

200 - 299         200 - 206         성공 

300 - 399         300 - 305         리다이렉션 

400 - 499         400 - 415         클라이언트 에러 

500 - 599         500 - 505         서버 에러


실제 정의된범위의 아닌 상태코드의 에러도 그 분류에맞는 의미를 내포하고있어야한다


버전번호 : 요청의 시작점 응답의 시작점 양쪽 다 들어있다 자신의 http프로토콜 버전을 알려준다


어떤 버전이 전해지면 그 버전은 그 어플리케이션의 가장 높은버전이며 그 아래 버전들은 다 이해할수있다


http 헤더필드는 요청과 응답 메세지에 추가정보를 더한다


헤더의 분류


1. 일반 헤더 : 요청과 응답 양쪽 모두에 나타날수있는 헤더


2. 요청 헤더 : 요청에 대한 부가정보를 제공


3. 응답 헤더 : 응답에 대한 부가정보를 제공


4. 엔티티 헤더 : 본문 크기와 콘텐츠 or 리소스 그 자체를 서술


5. 확장 헤더 : 명세에 정의되지않은 새로운 헤더



헤더의 문법


헤더의 예                                                             설명 

Date: Tue, 3 Oct 1997 02:16:03 GMT             서버가응답을만들어 낸 시각 

Content-length: 15040                         15,040바이트의 데이터를 포함한 엔터티 본문 

Content-type: image/gif                             엔터티 본문은 GIF 이미지다. 

Accept: image/gif, image/jpeg, text/html     클라이언트는 GIF, JPEG 이미지와 HTML을 받아들일 수 있다. 



헤더는 보기좋게 줄로 나눌수있다 줄의 맨앞부분은 스페이스바 or tab키의 공백이 와야한다


HTTP/1.0 200 0K 

Content-Type: image/gif 

Content-Length: 8572 

Server: Test Server 

Version 1.0



엔티티 본문

http의 메세지를 전달


안전한 메소드 : 요청을 처리해도 서버에서는 아무일도 일어나지않는 메소드


하지만 꼭 안전한 메소드가 안전을 보장하지는않는다. (쓰는 개발자에게 달렸다)


POST같은 경우에는 사용자의 요청을 처리하기위해서 서버에서 일이 일어난다


안전한 메소드의 목적은 어플리케이션에서 안전하지않은 메소드의 일을 처리할때 그것을 사용자에게 알려주는 어플리케이션을 만드는데 있다



GET

가장 흔히쓰이는 메소드    서버에게 어떤 리소스를 달라고 요청하는것


HEAD

GET과 유사한 메소드 요청을 보내면 응답은 반드시 헤더만 존재해야한다 엔티티본문은 절대 존재해선안된다


내가 요청하는 리소스가 존재하는지 

요청한 리소스에 대한 정보

리소스가 변경되었는지


확인할수있다


GET을 사용했을때 헤더와 반드시 일치해야한다

HTTP /1.1 준수을 위해 서버는 반드시 HEAD메소드를 구현해두어야한다



PUT

서버에 문서를 쓸때 사용한다

문서가 없다면 새 문서

문서가 존재한다면 수정을 한다


POST

서버에 입력한 데이터들을 보낼때 사용



TRACE

서버에게 도착할때까지 내가 보낸 요청에 무슨일있는지 확인할수있는 메소드


주로 진단을 위해 사용한다


요청에 대한 응답은 내가 보낸 요청에 관한 메세지들을 넣어 응답한다


프록시는 POST를 그냥보내지만 TRACE는 메소드를 구별할수없다


어떠한 엔티티본문도 보낼수없다 


TRACE 요청처리를 결정하는것은 중간 어플리케이션이 처리한다



OPTIONS

서버에게 어떤 리소스에대한 접근가능한 메소드들의 정보를 요청할수있다


리소스에 실제 접근하지않아도 그 리소스에 대한 정보를 얻을수있다



DELETE

요청한 리소스를 삭제한다


하지만 삭제를 보장하진못한다 HTTP명세에  서버가 클라이언트의 요청을 무시하는게 가능하도록 되어있다





확장 메소드

HTTP 는 필요에따라 확장해도 문제가 되지않도록 설계되어있으며 새로 기능을추가해도 전혀 문제가되지않는다



메서드                 설명 

LOCK         사용자가 리소스를 잠글 수 있게 해준다. 예를 들어, 문서를 편집하는 동안 다른 사람이 동시에 같은 문서를                 편집 하지 못하도록 문서를 잠글 수 있다. 


MKCOL         사용자가 문서를 생성할 수 있게 해준다.



COPY         서버에 있는 리소스를 복사한다. 


MOVE         서버에 있는 리소스를 옮긴다.



모든 확장 메서드가 형식을 갖춘 명세로 정의된 것은 아니라는 점에 주의


당신의 HTTP 애플리케이션이 이해할 수 없는 확장 메서드를 사용하는 애플리케이션과 마주칠 수도 있다


이런 상황에서는 확장 메서드에 대해 관용적인 것이 최고다



 프락시는,종단 간 (end-to-end) 행위를 망가뜨리지 않을 수 있다면,알려지지 않은 메서드가 담긴 메 시지를 다운스트림 서버로 전달하려고 시도한다. 


그렇지 않다면 프락시는 501 Not Implemented 상태 코드로 응답해야 한다. 확장 메서드(그리고 대부분의 HTTP 확 장)를 다룰 때는 “엄격하게 보내고 관대하게 받아들여라” 라는 오랜 규칙에 따르는 것이 가장 좋다



상태 코드는 클라이언트에게 그들의 트랜잭션을 이해할 수 있는 쉬운 방법을 제공한다




100-199: 정보성 상태 코드


HTTP / 1.1에 도입


복잡함을 감수할 만한 가치가 있는지에 대해 논란이 되고 있다



100     Continue     요청의 시작 부분 일부가 받아들여졌으며, 클라이언트는 나머지를 계속 이어서 보내야 함을 의미한다. 이것을 보낸 후, 서버는 반드시 요청을 받 아 응답해야 한다. 


 101 Switching Protocols 클라이언트가 Upgrade 헤더에 나열한 것 중 하나로 서버가 프로토콜을 바꾸었음을 의미한다



100 Continue는 HTTP 클라이 언 트 애플리케이션이 서버에 엔터티 본문을 전송하기 전에 그 엔터티 본문을 서버가 받아들일 것인지 확인하려고 할 때,그 확인 작업을 최적화하기 위한 의도로 도입





------------------------------------------------------------------------------------------------------------


요청헤더


Accept헤더 : 클라이언트가 무엇을 원하고 무엇을 할수있고 무엇을 원치않는지 알려준다


이 정보를 통해 더 똑똑한 결정을 내릴수있다


헤더                                     설명 

Accept                  서버에게 서버가 보내도 되는 미디어 종류를 말해준다. 

Accept-Charset       서버에게 서버가 보내도 되는 문자집합을 말해준다. 

Accept-Encoding     서버에게 서버가 보내도 되는 인코딩을 말해준다. 

Accept-Language    서버에게 서버가 보내도 되는 언어를 말해준다. 

TEa                      서버에게 서버가 보내도 되는 확장 전송 코딩을 말해준다.


조건부 요청 헤더 : 서버에게 응답을 받기전 어떤 제약을 줄수있다


헤더                         설명 

Expect                  클라이언트가 요청에 필요한 서버의 행동을 열거할 수 있게 해준다. 

If-Match               문서의 엔터티 태그가 주어진 엔터티 태그와 일치하는 경우에만 문서를 가져온다. 

If-Modified-Since    주어진 날짜 이후에 리소스가 변경되지 않았다면 요청을 제한한다. 

If-None-Match       문서의 엔터티 태그가 주어진 엔터티 태그와 일치하지 않는 경우에만 문서를 가져온다. 

If-Range                문서의 특정 범위에 대한 요청을 할 수 있게 해준다. 

If-Unmodified-Since 주어진 날짜 이후에 리소스가 변경되었다면 요청을 제한한다. 

Range                    서버가 범위 요청을 지원한다면,리소스에 대한 특정 범위를 요청한다.



요청 보안 헤더 : 리소스에 접근하기전 인증을 통해 트랜잭션을 좀더 안전하게 만들어줄수있다

프록시 요청 헤더



응답 헤더 : 누가 응답을 보내고있는지 응답자의 능력은 어떻게되는지 알려주며 응답에 대한 특별한 설명도 제공가능




728x90
반응형

' > HTTP 완벽 가이드' 카테고리의 다른 글

HTTP 완벽 가이드 5장 웹서버  (0) 2019.03.22
HTTP 완벽 가이드 4장 커넥션 관리  (0) 2019.03.19
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함