Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 관점지향프로그래밍
- 스프링부트
- 인터셉터
- Redis
- MYSQL
- request
- 스프링 시큐리티
- 객체지향프로그래밍
- aop
- git
- 트랜잭션
- OOP
- Spring
- response
- java
- 스프링
- aspect
- 디자인패턴
- Spring Security
- 자바
- http
- RestControllerAdvice
- Interceptor
- proxy pattern
- mybatis
- Filter
- exception
- network
- spring boot
- SQL
Archives
- Today
- Total
장쫄깃 기술블로그
[Network] HTTP Request/Response 메시지 구조 본문
728x90
들어가며
HTTP에 대한 설명은 해당 글을 참고
링크 : https://jangjjolkit.tistory.com/12
HTTP Request와 Response는 기본적으로 같은 구조를 가지고 있지만 세부적으로 다른 점들이 존재한다.
HTTP Request와 Response의 구조에 대해 자세하게 알아보려 한다.
HTTP Request 메시지 구조
1. Start Line (시작줄)
HTTP 메소드, Request Target, HTTP version이 있다.
- HTTP 메소드 : 요청의 의도를 담고있는 메소드로, GET, POST, PUT, DELETE 등이 있음
- Request Target : 요청이 전송되는 목표 주소
- HTTP version : version에 따라 요청 메시지 구조나 데이터가 다를 수 있기 때문에 version을 명시
2. Header
HTTP Request 그 자체에 대한 정보를 담고 있다. key : value 형태로 이루어져 있다.
Header의 경우 Request, Response 각각이 쓰는 항목 외에 공통 항목이 있지만, 여기선 우선 Request Header에 있는 정보만 설명하겠다.
- Host : 요청하려는 서버 호스트 이름과 포트번호
- User-agent : 클라이언트 프로그램 정보로, 이 정보를 통해 서버는 클라이언트 프로그램(브라우저, 기기 등)에 맞는 최적의 데이터를 보낼 수 있음
- Referrer : 바로 직전에 머물렀던 웹 링크 주소
- Accept : 클라이언트가 처리 가능한 미디어 타입 종류 나열
- If-Modified-Since : 여기에 써여진 시간 이후로 변경된 리소스 취득하고, 페이지가 수정되었으면 최신 페이지로 교체
- Authorization : 인증 토큰을 서버로 보낼 때 쓰이는 항목
- Origin : 서버로 POST 요청을 보낼 때 요청이 어느 주소에서 시작되었는지 나타내는 값으로, 요청을 보낸 주소와 받는 주소가 다르면 CORS(Cross-Origin Resource Sharing) 에러가 발생한다.
- Cookie : 쿠키 값이 key : value 로 표현
3. Body
HTTP Request가 전송하는 데이터를 담고있는 부분이다. 전송하는 데이터가 없으면 비어있을 수 있다.
보통 POST 요청일 경우, HTML 폼 데이터가 포함되어 있다.
HTTP Response 메시지 구조
1. Start Line (시작줄)
HTTP version, Status Code, Status Text가 있다.
- Status Code : Response 상태를 나타내는 코드
- Status Text : Response 상태를 간략하게 글로 설명
2. Header
- Location : 301, 302 상태코드일 때만 볼 수 있는 항목으로, 서버의 응답이 다른 곳에 있다고 알려주면서 해당 위치(URI)를 지정
- Server : 웹 서버의 종류
- Age : max-age 시간 내에서 얼마나 흘렀는지 초 단위로 알려주는 값
- Referrer-policy : 서버 referrer 정책을 알려주는 값 ex) origin, no-referrer, unsafe-url
- WWW-Authenticate : 사용자 인증이 필요한 자원을 요구할 시, 서버가 제공하는 인증방식
- Proxy-Authenticate : 요청한 서버가 프록시 서버인 경우 유저 인증을 위한 값
3. Body
HTTP Request 메시지의 Body와 동일하다.
공통 Header
- Date : 현재 시간
- Cache-Control : 캐시 제어
- no-store : 캐시를 저장하지 않음
- no-cache : 모든 캐시를 쓰기 전에 서버에 해당 캐시를 사용해도 되는지 확인
- must-revalidate : 만료된 캐시만 서버에 확인
- public : 공유 캐시에 저장 가능
- private : 브라우저같은 특정 사용자 환경에만 저장
- max-age : 캐시의 유효기간 명시
- Transfer-Encoding : Body 내용 자체 압축 방식을 지정
- Content-Encoding : Body의 리소스 압축 방식 (Transfer-Encoding은 Body 자체이므로 다름)
- Content-Type : Body의 미디어 타입 ex) application/json, text/html
- Content-Length : Body의 길이
- Content-Language : Body를 이해하는데 가장 적절한 언어 ex) ko
- Connection : 클라이언트와 서버의 연결 방식 설정 항목으로, HTTP/1.;1은 keep-alive로 연결 유지하는게 default
728x90
'ETC > Network' 카테고리의 다른 글
[Network] HTTP 캐시 (캐시란, Cache-Control, 유효성 검증 및 조건부 사용) (0) | 2022.09.12 |
---|---|
[Network] 포워드 프록시와 리버스 프록시 (0) | 2022.09.12 |
[Network] URI, URL, URN 차이 (0) | 2022.04.24 |
[Network] HTTP 상태 코드 정리 (0) | 2022.04.24 |
[Network] HTTP Request/Response 란 (0) | 2022.04.18 |