이번에는 HTTP 헤더 구조에 대해 살펴보겠습니다
HTTP 헤더 구조
HTTP는 브라우저와 서버가 통신할 수 있도록 하는 프로토콜입니다
이때 HTTP는 서버에 요청(Request) 할 때 요청 행과, 요청 헤더, 메시지 본문이라는 세 가지 정보를 담아서 요청하게 됩니다
📝 HTTP 요청 메시지 ( Request )
요청행 : HTTP 메소드, HTTP 버전
요청 헤더 : HTTP 요청에 대한 정보를 담고 있습니다 (서버에 전달하는 클라이언트 정보)
[ 요청 헤더에 포함된 정보 ]
host: www.naver.com // 요청 도메인
User-agent: MSIE 6.0; Windows NT 5.0 // 사용자 웹 브라우저 종류
Cookie: key:value // 쿠키 (인증정보)
Accept: text/html; */* //요청 데이터 타입
공백 행 : 메시지 본문 Body 부분이 있다면 공백행이 추가됩니다 (헤더와 본문의 경계를 표시함)
메시지 본문 : HTTP Request가 전송하는 데이터를 담고 있습니다
요청 메시지는 GET과 POST 메소드 방식이 있는데 대부분 웹 페이지에서 GET 방식을 많이 사용하고 폼 등을 사용해서 데이터를 전송할 때는 POST 방식을 사용합니다
📝 HTTP 응답 메시지 ( Response )
응답 행 : HTTP 상태 코드 및 버전
[ 응답 헤더에 포함된 정보 ]
Server : 웹 서버의 종류
Referrer-policy : 서버의 Referrer 정책을 알려준다
www-Authenticate : 사용자가 정보를 요청할 시 서버가 제공하는 인증 방식
Proxy-Authenticate : 요청한 서버가 프록시 서버일 경우 유저 인증을 위한 값
공백 행과 메시지 본문은 HTTP 요청 메시지와 동일합니다
추가로 특정 HTTP 요청이 성공적으로 연결되었는지 알려주는 상태 코드가 있습니다
분류 | 상태 코드 | 상태 설명 | 내용 |
성공 | 200 | OK | 요청을 성공함 |
클라이언트 오류 | 401 | unauthorized | 인증되지 않음 |
403 | Forbidden | 액세스가 허용되지 않음 | |
404 | Not Found | 요청한 리소스를 찾지 못함 | |
408 | Request Timeout | 요청 시간을 초과함 | |
서버 오류 | 500 | Internal Server Error | 서버 내부에서 오류가 발생함 |
503 | Service Unavailable | 서비스를 일시적으로 사용할 수 없음 |
클라이언트 오류는 대부분 특정 페이지에 접속했을 때 많이 보셨을 거라 생각합니다
💻 GET 메소드와 POST 메소드
앞서 HTTP 헤더 구조에서 요청 메시지는 GET과 POST 메소드 방식이 있다는 걸 설명했는데 이 GET 메소드와 POST 메소드가 어떤 식으로 작동되는지 알아봅시다
GET 메소드 : URL + Query String을 사용하여 웹 페이지에 데이터를 요청하게 됩니다
이때 필요한 데이터를 메시지 부분(Body)에 담지 않고 Query String의 붙여서 전송하기 때문에 보안적인 문제가 있고, URL 입력란에 길이 제한이 있습니다
Query String란 URL ? 뒤에 있는 파라미터 값(매개변수)을 의미합니다
ex) http://text.com/index.asp?cmd=view에서 ? 뒤에 있는 cmd=view 값을 의미합니다
POST 메소드 : GET 방식과 달리 데이터를 메시지 부분(Body)에 담아서 데이터를 전송합니다 이때 Query String 부분이 Body로 넘어가기 때문에 GET 메소드 보다 보안적인 면에서 안전하고, Body는 길이 제한 없이 데이터를 전송할 수 있습니다 (GET 메소드와 달리 대용량 데이터 전송 가능)
HTTP 응답 메시지에서 GET 방식과 POST 방식을 위 사진처럼 작동되게 됩니다
처리 방식 | GET 방식 | POST 방식 |
URL 데이터 노출 여부 | O | X |
URL 예시 | http://text.com/index.asp?contents=1 | http://text.com/index.asp |
데이터의 위치 | Header(헤더) | Body(바디) |
캐싱 가능 여부 | O | X |
GET 방식은 데이터 위치가 Header에 존재하고,
POST 방식은 데이터 위치가 Body에 존재합니다
📕 용어 정리
- 캐싱(Caching) : 데이터를 한번 접근 후, 다시 요청할 때 빠르게 접근하기 위해 레지스터에 데이터를 저장시켜 놓는 것을 뜻함
- 레지스터(Register) : 프로세서가 바로 사용할 수 있는 데이터를 담고 있는 영역
[ 참고 자료 ]