✅ HTTP 데이터 구조
HTTP는 문자형태로 데이터 전송되고, 필요한 부분을 파싱함
시작줄
- 시작줄과 헤더는 줄 단위로 분리되있음
- 줄바꿈 문자열은 'CRLF' 라고 씀. 그러나 그냥 개행 문자로 받아들일 수 있어야 함
- 사유구절 : 숫자로 된 상태 코드를 사람이 이해할 수 있도록 설명한 짧은 문구
- 버전정보
: HTTP/<메이저>.<마이너> ex)HTTP/1.1
: 메이저,마이너는 정수고, 각각 분리된 숫자로 다뤄진다
: HTTP/2.22 는 HTTP/2.3보다 크다 (22>3)
: 요청은 HTTP/1.0으로, 응답은 HTTP/1.1로 받을 경우 : 이는 응답 보내는 애프리케이션은 1.1까지 이해할 수 있음을 뜻하는 것이다.
헤더
- 헤더는 빈줄(CRLF)로 끝남. 본문body가 없더라도!
본문
- 본문body는 비어있을 수도 있음
✅ 메서드
메세지 본문 필요 X : GET, HEAD, TRACE, OPTIONS, DELETE
메세지 본문 필요 O : POST,PUT
HEAD
- GET처럼 동작하지만, 응답에 헤더만 주고 본문(body)는 주지 않음
- 백엔드는 GET으로 얻는 것과 동일함을 보장해야 한다.
- HTTP/1.1 준수를 위해서는 HEAD메서드가 반드시 구현되어 있어야 한다.
- 사용1. 리소스를(본문을) 가져오지 않고도 정보를 알아낼 수 있다.
- 사용2. 응답의 상태코드를 통해 개체가 존재하는지 확인할 수 있다.
- 사용3. 헤더를 통해 리소스가 변경되었는지 검사할 수 있다.
Trace
- 클라이언트가 보낸 요청이 서버에 도달했을 때 어떻게 보이게 되는지 알려줌
- 클라이언트가 서버에게 보내는 요청 메세지가 어떻게 수정되서 도달하는지 확인할 수 있게 해줌
- 서버는 요청을 다시 클라이언트로 보내줌
- 보안상의 이유로 trace메서드는 대부분 비활성화됨.
OPTIONS
- 클라이언트가 서버에게 지원 범위(지원 메서드 등)에 대해 물어볼 수 있음.
- 실제 리소스를 요청하지 않고도, 어떻게 접근하는 것이 최선인지 확인할 수 있게됨.
- CORS와 연관있음
다른 도메인에 리소스 요청 보낼 때 '브라우저'는 먼저 OPTIONS요청 보내어 클라이언트의 요청을 허용하는지 확인해봄
> api요청 가능하다고 판단되면 본 api요청응 정상적으로 처리
> 가능치 않다면 cors 에러 반환
✅ 상태코드
100-199 : 정보성 상태 코드 . HTTP/1.1에서 도입됨
100 continue
- 요청의 시작 부분 일부가 받아졌으며, 클라이언트는 나머지를 계속 보내야 함을 의미
- 클라이언트가 서버에 본문을 전송하기 전에 서버가 그 본문을 받아들일 것인지 확인하기 위해 도입된 것임
- 클라이언트가 바디를 서버에 보내려고 하고 그 전에 100 continue응답을 기다리겠다면, Expect:100-continue 요청헤더를 보내야 함
300-399 : 리다이렉션 상태 코드
- 요청된 리소스가 다른 위치에 있음을 알려주고, 클라이언트가 새로운 위치로 요청 보낼 수 있도록 함
- 300번대 응답 헤더에 Location헤더가 있으면, 브라우저가 자동으로 새 위치로 다시 요청보냄.
- 304
클라이언트가 이전에 이미 요청한 리소스의 캐시된 버전을 갖고 있을 때 서버와 비교했을 때 유효한지 확인하여
로컬 복사본이 여전히 최신이면 304 응답, 최신이 아니면 새로운 데이터 응답하게 됨
✅ 헤더
1. 일반헤더 (General header)
요청,응답 모두에 적용됨. 바디에서 최종적으로 전송되는 데이터와 관련 없는 헤더
2. 요청헤더 (Request header)
클라이언트 자체에 대한 자세한 정보를 포한하는 헤어 (클라이언트가 보내는 메세지 헤더)
[Accept관련 헤더]
- 클라이언트는 자신의 선호와 능력을 서버에게 알려줄 수 있다.
- 서버는 이를 통해 무엇을 보낼지 결정할 수 있다.
- Accept : 서버가 보내도 되는 "미디어 종류"를 서버에게 말해줌
- Accept-Charset : 서버가 보내도 되는 "문자집한"를 서버에게 말해줌
- Accept-Encoding : 서버가 보내도 되는 "인코딩"를 서버에게 말해줌
- Accept-Language : 서버가 보내도 되는 "언어"를 서버에게 말해줌
[조건부 요청 헤더]
- If-Match , If-Modified-Since, If-Range 등...
- Expect
: 100 continue 응답을 요청할 때
POST /resource HTTP/1.1
Host: example.com
Expect: 100-continue
Content-Length: 100
Content-Type: application/json
: 클라이언트가 요청 보낼 때 서버에게 특정 동작 수행할 것을 요청할 때
GET /resource HTTP/1.1
Host: example.com
Accept-Encoding: gzip, deflate
Expect: feature-compression // 서버에게 압축 기능을 활성화 할 것을 요청함
[요청 보안 헤더]
Authorization, Cookie, Cookie2
3. 응답헤더 (Response header)
응답에 대한 부가적인 정보를 갖는 헤더 (클라이언트가 응답 받는 메세지 헤더)
Age: 응답이 얼마나 오래되었는지
Retry-After : 현재 리소스가 사용 불가능한 상태일 때, 언제 가능해지는지 날짜 또는 시각
4. 엔터티 헤더 (Entity header)
: 메시지 본문(데이터 바디)에 대한 정보를 포한하는 헤더
: 요청,응답 헤더 모두에 나타날 후 있다.
Allow : 이 엔터티에 대해 수행될 수 있는 요청 메서드
Location : 엔터티가 실제 어디에 위치하고 있는지 (리다이렉션 응답에서 새로운 위치를 알릴 때 사용)
Content-Location : 리소스의 실제 위치를 나타내어, 클라이언트가 캐시할 때 사용됨
Etag :
Expires: 이 엔터티가 더이상 유효하지 않아, 원본을 다시 받아와야 하는 일시
Last-Modified : 가장 최근 이 엔터티가 변경된 일시
'CS > 네트워크' 카테고리의 다른 글
HTTP 완벽 가이드 7장. 캐시 (0) | 2024.05.13 |
---|