IP 패킷에는 출발지, 목적지의 IP 주소가 포함된다.
IP 주소는 네트워크에서 장치들이 서로를 인식하고 통신하기 위해서 사용하는 특수한 번호이다.
IP 패킷에는 PORT 정보가 포함되어 있지 않기 때문에 IP 주소 내에서 프로세스를 구분할 수 없다.
Accept-Language: ko, us;q=0.9, ja;q=0.8
Accept-Language: ko;q=1, us;q=0.9, ja;q=0.8
우선 순위는 0~1사이의 숫자로 표현하며 숫자가 높을 수록 우선순위를 가진다.
Transmission Control Protocol약어로 서버와 클라이언트간에 데이터를 신뢰성 있게 전달하기 위해 만들어진 프로토콜
TCP 장치들 사이에 논리적인 접속을 위하여 3 way handshake를 사용하는 연결 지향형 프로토콜
TCP는 데이터 전송이 성공적으로 이루어지면, 이에 대한 응답을 돌려준다.
Packet이 순서대로 도착하지 않으면, TCP 세그먼트에 있는 정보를 토대로 Packet 전송을 다시 요청한다.
TCP는 UDP보다 속도가 느리고, 신뢰성이 높다.
TCP는 UDP에 비해 속도가 느리고, 3 way handshake를 사용하기 때문에 신뢰성을 보장합니다.
UDP는 HTTP3부터 사용이 가능하며, 여러 기능을 커스터마이징하여 사용할 수 있다는 장점이 있습니다.
UDP는 데이터 수신 여부와 전송순서를 보장하지 않습니다.
UDP는 IP 프로토콜에 PORT, 체크섬 필드 정보만 추가된 단순한 프로토콜입니다.
HTTP를 사용하면 해당 자원들을 보낼 때마다 매번 연결을 반복해야 하며, 비효율성을 해결하기 위해 지속적 연결(Persistent Connections)를 사용합니다.
비연결성을 가지는 HTTP에서는 실제로 요청을 주고받을 때만 연결을 유지하고 응답을 주고 나면 TCP/IP연결을 끊습니다.
HTTP에서는 서버가 클라이언트 상태를 보존하지 않는 무상태 프로토콜입니다.
HTTP는 무상태성을 특징으로 가지고 서버를 확장하는데 용이하고, 클라이언트는 추가 데이터를 전송해야 합니다.
2021년 기준, 가장 많이 사용되는 HTTP 버전은 HTTP /1.1 입니다.
TCP의 3 way handshake는 논리적 연결(가상 연결)로 이루어집니다.
UDP는 데이터 전달 여부 및 순서를 보장하지 않습니다.
IP는 지정한 IP 주소 (IP Address)에 패킷(Packet)이라는 통신 단위로 데이터를 전달합니다.
HTTP 메시지는 헤더와 바디로 구분할 수 있습니다.
HTTP 바디(메시지 본문)에서 모든 표현(Representation) 데이터를 전달합니다.
메시지의 본문인 바디는 페이로드로 불립니다.
HTTP 헤더는 HTTP 전송에 필요한 모든 부가정보를 담기 위해 사용합니다.
HTTP 헤더는 HTTP 전송에 필요한 모든 부가정보를 담습니다.
표현 헤더는 요청, 응답 둘 다 사용합니다.
Content-Type 헤더는 표현 데이터 형식을 나타내며, 대표적으로는 application/json, Text/html 등이 있습니다.
Content-Language 헤더는 표현 데이터의 자연언어를 의미합니다.
Content-Type: 표현 데이터의 형식을 설명하며, 미디어 타입 및 문자 인코딩의 내용을 담고 있습니다.
Content-Language: 표현 데이터의 자연 언어를 의미합니다.
Content-Encoding: 표현 데이터를 압축하기 위해서 사용하며, 데이터를 전달하는 쪽에서 압축 후 인코딩 헤더를 추가합니다.
Content-Length: 표현 데이터의 길이를 의미하며, Transfer-Encoding과 함께 사용할 수 없습니다.
Referer: 현재 요청된 페이지 이전 웹 페이지 주소를 의미하며, 만약 링크를 타고 들어왔다면 해당 링크를 포함하고 있는 페이지의 주소가 헤더에 포함됩니다.
User-Agent: 클라이언트 애플리케이션 정보를 의미하며, 해당 애플리케이션, OS등의 정보를 제공합니다.
Host: 요청한 호스트 정보(도메인명)을 의미하며, 하나의 IP 주소에 여러 도메인이 적용되어 있을 때 호스트 정보를 명시하기 위해 사용합니다.
Origin: 서버로 POST 요청을 보낼 때, 요청을 시작한 주소를 나타냅니다.
Server: 요청을 처리하는 ORIGIN 서버의 소프트웨어 정보를 나타내며, 프록시 서버를 사용하는 경우, 프록시 서버의 정보를 나타내기도 합니다.
Location: 리다이렉트 할 페이지의 URL을 의미하며, 웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 리다이렉트 합니다.
Allow: 허용 가능한 HTTP 메소드를 의미합니다.
Retry-After: 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간을 의미하며, 503(Service Unavailable) 응답 코드와 함께 보내지면, 언제까지 기다려야 하는지 알 수 있습니다.
협상 헤더는 요청에서만 사용 가능합니다.
협상 헤더에서는 원하는 콘텐츠에 대한 우선 순위를 지정할 수 있습니다.
Accept-Language: ko-KR,ko:q=0.9, en-US;q=0.8 일 경우 우선순위는 한국어가 됩니다. (0~1까지 높은 숫자가 우선)
Accept는 클라이언트가 선호하는 미디어 타입을 전달합니다.
컴퓨터 과학에서 데이터나 값을 미리 복사해 놓는 임시 장소 혹은 그러한 행위를 의미한다.
캐시를 사용하면 브라우저 로딩 속도가 빨라지고, 비싼 네트워크 사용량을 줄일 수 있다.
Cache-Control 헤더를 통해 캐시 유지 시간, 캐시 여부, 프록시 캐시의 유지 시간을 설정 할 수 있다.
클라이언트와 서버 사이에 대리로 통신을 수행하는 것을 프록시(Proxy), 중계 기능을 하는 서버를 프록시 서버라고 한다.
캐시 유효기간이 지난 후 Last-Modified, If-Modified-Since와 Etag, If-None-Match 두 쌍의 헤더를 통해, 검증하고 사용할 수 있습니다.
Last-Modified는 데이터가 마지막으로 수정된 시간 정보를 헤더에 포함하며, 응답 결과를 캐시에 저장할 때 데이터 최종 수정일도 저장됩니다.
서버에서 완전히 캐시를 컨트롤하고 싶은 경우 Etag를 사용할 수 있습니다.
If-None-Match를 요청 헤더에 작성하여 보내면, Etag 값을 검증하고 수정되지 않았다면 응답 결과를 재사용하고, 헤더 데이터를 갱신합니다.
Cache-Control: no-store: 데이터에 민감한 정보가 있으므로 저장하면 안된다는 의미이며, 메모리에서 사용하고 최대한 빨리 삭제되어야 한다.
Cache-Control: no-cache: 데이터는 캐시해도 되지만, 항상 원 서버에 검증하고 사용해야 합니다.
Cache-Control: must-revalidate: 캐시가 만료된 후, 최초 조회 시 원 서버에 검증을 해야 하며, 원 서버 접근에 실패하면 반드시 오류가 발생해야 합니다.
캐시를 무효화를 확실히 해야 하는 경우, Pragma와 같은 하위 호환까지 포함하여 적용해야 합니다.