HTTP 메시지

ChoiYongHyeun·2023년 12월 19일
0

HTTP

목록 보기
2/17

HTTP 통신은 클라이언트와 서버 간의 요청과 응답을 하는 과정이라고 했다.

이 때 서로 통신하는 packet 은 시작줄 , 헤더 , 개체 본문 (엔터티)가 존재한다.

메시지의 흐름

HTTP 메시지는 HTTP 애플리케이션 간에 주고 받은 데이터의 블록들이다.

데이터 블록들은 주고 받은 데이터의 정보가 담긴 텍스트 메타 데이터와 엔터티가 존재한다.

메시지는 클라이언트, 서버, 프록시 사이를 흐르며 , 이 사이를 흐르는 움직임에 따라

인바운드 , 아웃바운드 , 업스트림, 다운스트림 으로 구분된다.

프록시

프록시란 클라이언트와 서버 사이에 존재하는 중계 역할 서버이다.
프록시는 클라이언트와 인터넷 사이에 존재하는 forward proxy , 서버와 인터넷 사이에 존재하는 reverse proxy 가 존재한다.
프록시를 통해 클라이언트나 서버는 본인의 정보를 익명화 할 수 있으며, 프록시의 캐싱 기능을 통해 불필요하게 동일한 요청을 반복 할 필요가 없다.

메시지는 원 서버 방향을 인바운드로 하여 송신된다.

메시지가 클라이언트에서 서버 방향으로 가는 트랜잭션 방향을 인바운드

서버에서 클라이언트 방향으로 가는 트랜잭션 방향을 아웃바운드 라고 한다.

또한 메시지는 다운스트림으로 흐른다.

요청 메시지, 응답 메시지에 관계 없이 모든 메시지는 다운 스트림으로 흐른다.

메시지의 발송자는 수신자의 업스트림이다.

이북을 캡쳐하는건 너무 양심에 찔려서 ..

클라이언트가 서버에게 보내는 요청 메소드와 서버가 클라이언트에게 보내는 상태 코드에 대해서만 가볍게 훑어보고 실제 예시들을 살펴보자

요청 메소드

메소드 설명 본문 존재 유무
GET 서버에서 특정 리소스의 정보를 요청 없음
POST 서버에 데이터를 제출하여 리소스의 상태를 변경하거나 처리 있음
PUT 서버에 특정 리소스를 업데이트 있음
DELETE 서버에서 특정 리소스를 삭제 없음
HEAD GET 메소드와 유사하지만, 응답 본문을 포함하지 않음 없음
OPTIONS 서버에서 지원되는 메소드를 확인하거나 서버의 기능을 확인 없음
PATCH 리소스의 일부를 업데이트 있음

GET

가장 흔히 쓰이넨 메소드로 주로 서버에게 리소스를 달라고 요청하기 위해 사용된다.

GET 요청을 보내고 Host 정보와 리소스 경로 를 담아 요청하면

서버 측에서 응답 코드 가 담긴 헤더와 본문에는 해당 리소스를 담아 반응한다.

HEADGET 요청과 비슷하지만 헤더만 올 뿐 본문은 결코 반환되지 않는다.

이를 통해 리소스를 가져오지 않고도 리소스가 서버에 존재하는지, 어떤 타입인지, 리소스가 변경 되었는지 등을 확인 할 수 있다.

PUT

PUT 은 클라이언트가 서버 측으로 문서를 쓰는 메소드이다.

요청 URLHOST 주소에 해당 URL 리소스의 정보가 존재하지 않는다면 새로운 문서를 생성하고 , 존재한다면 덮어씌우는 역할을 한다.

POST

POST 메소드는 서버에 입력 데이터를 전송하기 위해 설계되었다.

실제로는 HTML 폼을 지원하기 위해 흔히 사용된다.

채워진 폼에 담긴 데이터는 서버로 전송되며 서버는 이를 모아서 필요로 하는 곳에 보낸다.

TRACE

주로 진단을 위해 사용되며 서버와 클라이언트는 다양한 프록시나 게이트웨이를 통과하며 연결 되어 있다.

TRACE 메시지는 클라이언트가 서버 측으로 보낸 메시지가 서버가 수신 되었을 때의 형태를 응답 받는다.

이를 통해 보낸 메시지가 어떻게 망가지거나 수정되었는지 확인 할 수 있다.

OPTION

웹 서버에게 여러가지 종류의 지원 범위에 대해 물어본다.

서버에게 특정 리소스에 대해 어떤 메소드가 지원되는지 물어 볼 수 있다.

DELETE

DLETE 는 요청 URL 을 호스트에게서 삭제 할 것을 요청한다.

상태 코드

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

100 - 199 : 정보성 상태 코드

상태 코드 사유 구절 의미
100 Continue 클라이언트가 요청을 계속할 수 있음을 나타냅니다.
101 Switching Protocols 서버가 프로토콜 변경을 요청한 클라이언트에게 응답하는 상태 코드입니다.
102 Processing 요청이 수신되었으며, 서버는 처리 중이지만 응답을 아직 완료하지 않은 상태 코드입니다.

상태코드 100은 클라이언트 애플리케이션이 서버에 엔터티 본문을 전송하기 전에 엔터티 본문을 서버가 받아들일 것인지 확인하려고 할 때, 그 확인 작업을 최적화 하기 위한 읟로 도입 되었다.

  • 클라이언트와 100-continue

클라이언트가 서버 측에게 엔터티를 보내려고 하는 과정에서, 서버가 준비됐음을 확인하기 위해 클라이언트가 서버 측에게 100-continue 요청을 보낸다.

서버는 클라이언트 측에 요청에 맞춰 100-continue 요청에 대한 응답을 보낸다.

특별한 엔터티를 보내지 않을 것이라면 무의미한 100-continue 요청을 보내면 안된다.

서버측에서는 100-continue요청을 받으면 엔터티를 받을 준비를 하고 있을 것이기 때문이다.

200-299 : 성공 상태 코드

상태 코드 사유 구절 의미
200 OK 요청이 성공적으로 처리되었음을 나타냅니다.
201 Created 새로운 리소스가 성공적으로 생성되었음을 나타냅니다.
202 Accepted 요청이 받아들여졌지만, 아직 처리되지 않았음을 나타냅니다.
204 No Content 응답이 본문을 포함하지 않음을 나타냅니다. 주로 업데이트 후 응답이 필요 없는 경우에 사용됩니다.
206 Partial Content 일부만 요청이 성공적으로 전송되었음을 나타냅니다.
207 Multi-Status 다양한 상태 코드를 포함한 응답이 있음을 나타냅니다.
208 Already Reported 리소스가 이미 이전 요청에서 보고되었음을 나타냅니다.
226 IM Used 서버가 요청의 첫 번째 부분을 성공적으로 처리하였고, 리소스의 상태를 나타냅니다.
  • 300-399 : 리다이렉션 상태 코드
상태 코드 사유 구절 의미
300 Multiple Choices 여러 리소스가 존재하고, 사용자 혹은 에이전트가 선택할 수 있음을 나타냅니다.
301 Moved Permanently 요청한 리소스가 새로운 위치로 영구적으로 이동되었음을 나타냅니다.
302 Found 요청한 리소스가 일시적으로 다른 위치로 이동되었음을 나타냅니다. (HTTP/1.0에서는 Moved Temporarily)
303 See Other 리다이렉션 결과로 다른 URI를 참조하라는 의미를 나타냅니다.
304 Not Modified 조건부 GET 요청에서 리소스가 수정되지 않았음을 나타냅니다.
307 Temporary Redirect 요청한 리소스가 일시적으로 다른 위치로 이동되었음을 나타냅니다. (HTTP/1.1에서는 Temporary Redirect)
308 Permanent Redirect 요청한 리소스가 영구적으로 다른 위치로 이동되었음을 나타냅니다.

리다이렉션 상태 코드는 클라이언트가 관심 있어 하는 리로스에 대해 다른 위치를 사용하라고 말해주거나 리소스의 내용 대신 다른 대안 응답을 제공한다.

클라이언트가 찾는 리소스의 위치가 바뀐 경우 서버 측은 바뀐 리소스의 경로를 제공 할 수 있다.

또한 클라이언트가 찾는 리소스가 사실은 원본의 복사본일 경우, 해당 복사본이 원본ㄱ고가 버전이 같은지, 수정되었는지 등 또한 알 수 있다.

  • 400-499 : 클라이언트 에러 상태 코드

가끔은 클라이언트는 서버가 다룰 수 없는 요청을 하곤 한다.

잘못된 요청이나 존재하지 않는 URL 에 대한 요청일 것이다.

이에 대해 서버는 다룰 수 없는 요청에 대해 에러 상태를 전달하고 , 브라우저는 에러 상태 코드에 맞춰 알아서 처리 할 것이다.

상태 코드 사유 구절 의미
400 Bad Request 클라이언트의 요청이 부적절하거나 유효하지 않음을 나타냅니다.
401 Unauthorized 인증이 필요한 리소스에 접근하려고 할 때, 유효한 인증 자격증명이 없음을 나타냅니다.
403 Forbidden 클라이언트가 요청한 리소스에 접근할 권한이 없음을 나타냅니다.
404 Not Found 요청한 리소스를 서버에서 찾을 수 없음을 나타냅니다.
405 Method Not Allowed 클라이언트가 허용되지 않는 메서드로 리소스에 접근하려고 할 때 나타납니다.
429 Too Many Requests 클라이언트가 일정 시간 동안 너무 많은 요청을 보낸 경우를 나타냅니다.
  • 500-599 : 서버 에러 상태 코드

때로는 클라이언트의 올바른 요청을 보냈음에도 서버 자체에서 에러가 발생하는 경우도 있다.

프록시는 클라이언트의 입장에서 서버와 대화를 시도 할 때 자주 에러를 만난다.

상태 코드 사유 구절 의미
500 Internal Server Error 서버에서 요청을 처리하는 동안 예상치 못한 오류가 발생함을 나타냅니다.
501 Not Implemented 서버가 요청한 기능을 수행할 수 없음을 나타냅니다.
502 Bad Gateway 게이트웨이나 프록시 서버가 서버로부터 유효하지 않은 응답을 받았음을 나타냅니다.
503 Service Unavailable 서버가 현재 요청을 처리할 수 없음을 나타냅니다. 이는 일시적인 상태일 수 있습니다.
504 Gateway Timeout 게이트웨이나 프록시 서버가 서버로부터 제때 응답을 받지 못했음을 나타냅니다.
505 HTTP Version Not Supported 서버가 요청에 사용된 HTTP 프로토콜 버전을 지원하지 않음을 나타냅니다.

메시지의 각 부분

메시지는 시작줄, 헤더, 본문 (엔터티) 로 나뉜다.

예시를 통해 살펴보자

헤더

네이버에서 해당 증시 이미지를 가져오는 요청을 살펴보자

개발자 관리 도구 - 네트워크 에서 확인 할 수 있는데 여기서 request Headers 를 살펴보도록 하겠다.

General header

항목 의미
Request URL https://ssl.pstatic.net/imgfinance/chart/mobile/mini/KOSDAQ_naverpc_l.png 요청한 자원의 URL
Request Method GET HTTP 메서드로, 서버에게 자원을 요청하는 방법
Status Code 200 OK 서버의 응답 상태 코드로, 요청이 성공했음을 나타냄
Remote Address 43.250.152.47:443 서버의 원격 주소 및 포트 번호
Referrer Policy origin 리퍼러 헤더를 어떻게 처리할지를 나타내는 정책

일반적 헤더는 HTTP 메시지의 전반적인 내용이 모두 담긴 헤더들로 응답 , 요청자 모두에게 적용 가능하다.

해당 증시 이미지를 가져오기 위해 GET 요청을 보냈고, 서버 측에게 응답으로 200 ok 를 받은 모습을 볼 수 있다.

응답 코드에 대해서는 추후 자세히 다룬다.

Request Header

헤더 값 (예시) 의미
:authority ssl.pstatic.net 서버의 호스트명을 나타냅니다.
:method GET 사용된 HTTP 메서드를 나타냅니다.
:path /imgfinance/chart/mobile/mini/KOSDAQ_naverpc_l.png 요청한 자원의 경로를 나타냅니다.
:scheme https 사용된 프로토콜 스킴을 나타냅니다 (여기서는 HTTPS).
Accept image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8 클라이언트가 받아들일 수 있는 미디어 타입을 나타냅니다.
Accept-Encoding gzip, deflate, br 클라이언트가 지원하는 데이터 인코딩 방법을 나타냅니다.
Accept-Language ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7 응답에 대한 우선적인 언어를 나타냅니다.
If-Modified-Since Tue, 19 Dec 2023 03:35:18 GMT 수정 시간을 기반으로 자원을 조건적으로 요청합니다.
If-None-Match "12a1-60cd48e2a4980" 엔터티 태그를 기반으로 자원을 조건적으로 요청합니다.
Referer https://www.naver.com/ 현재 요청된 리소스에 대한 이전 웹 페이지의 참조 주소를 나타냅니다.
Sec-Ch-Ua "Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120" 사용자 에이전트에 대한 정보를 나타냅니다.
Sec-Ch-Ua-Mobile ?0 사용자 에이전트가 모바일 디바이스인지를 나타냅니다.
Sec-Ch-Ua-Platform "Windows" 사용자 에이전트의 플랫폼 정보를 나타냅니다.
Sec-Fetch-Dest image 요청의 대상이 되는 리소스의 종류를 나타냅니다.
Sec-Fetch-Mode no-cors 리소스를 가져오는 모드를 나타냅니다.
Sec-Fetch-Site cross-site 요청의 대상이 되는 사이트의 종류를 나타냅니다.
User-Agent Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 사용자 에이전트 및 플랫폼 정보를 나타냅니다.

Response Header

헤더 값 (예시) 의미
Accept-Ranges bytes 서버가 지원하는 리소스의 범위 단위를 나타냅니다.
Access-Control-Allow-Origin * 클라이언트에게 응답 리소스에 접근할 권한을 부여하는 출처을 나타냅니다.
Age 33 리소스가 얼마나 오래된 것인지를 나타냅니다 (초 단위).
Cache-Control max-age=60 캐시 동작을 지정하며, 최대 캐시 유지 시간을 나타냅니다 (초 단위).
Content-Length 4836 응답 본문의 크기를 바이트 단위로 나타냅니다.
Content-Type image/png 응답 본문의 미디어 타입을 나타냅니다.
Date Tue, 19 Dec 2023 03:42:31 GMT 응답이 생성된 날짜와 시간을 나타냅니다.
Etag "12e4-60cd4a4568e80" 리소스의 엔터티 태그를 나타내며, 리소스가 어떻게 변경되었는지를 식별합니다.
Expires Tue, 19 Dec 2023 03:43:31 GMT 응답이 만료되는 날짜와 시간을 나타냅니다.
Last-Modified Tue, 19 Dec 2023 03:41:30 GMT 리소스가 마지막으로 수정된 날짜와 시간을 나타냅니다.
Server Testa/6.1.4 응답을 생성한 서버의 소프트웨어 및 버전을 나타냅니다.
Strict-Transport-Security max-age=31536000 HTTPS를 통해 통신하는 동안 클라이언트가 지켜야 하는 보안 정책을 나타냅니다.

헤더가 하나하나 무엇을 의미하는지 암기하려고 해도 못할 것 같으니
이런게 있구나 하고 넘어간 다음 필요 할 때마다 찾아야겠다.

profile
빨리 가는 유일한 방법은 제대로 가는 것이다

0개의 댓글