리퀘스트 메세지와 리스폰스 메세지 양쪽에서 사용되는 헤더.
디렉티브로 불리는 명령을 사용하여 캐싱 동작을 지정. 지정한 디렉티브에는 파라미터가 있는 것과 없는 것도 있음. 여러 개를 지정하는 경우 콤마(,) 사용.
Cache-Control: private, max-age=0, no-cache
디렉티브 | 파라미터 | 설명 |
---|---|---|
no-cache | 없음 | 오리진 서버에 강제적인 재검증 |
no-store | 없음 | 캐시는 리퀘스트, 리스폰스의 일부분을 보존해서는 안됨 |
max-age = [초] | 필수 | 리스폰스의 최대 age 값 |
max-state (= [초]) | 생략 가능 | 기한이 지난 리스폰스를 수신 |
min-fresh = [초] | 필수 | 지정한 시간 이후에 변경된 리스폰스를 보냄 |
no-transform | 없음 | 프록시는 미디어 타입을 변환해서는 안됨 |
only-if-cached | 없음 | 캐시에서 리소스를 취득 |
cache-extension | - | 새로운 디렉티브를 위해서 토큰 |
디렉티브 | 파라미터 | 설명 |
---|---|---|
public | 없음 | 어딘가에 리스폰스 캐시가 가능 |
private | 생략가능 | 특정 유저에 대해서만 리스폰스 |
no-cache | 생략가능 | 유효성의 재확인 없이는 캐시는 사용해서는 안됨 |
no-store | 없음 | 캐시는 리퀘스트, 리스폰스의 일부분을 보존해서는 안됨 |
no-transform | 없음 | 프록시는 미디어 타입을 변경해서는 안됨 |
must-revalidate | 없음 | 캐시 가능하지만 오리진 서버에 리소스의 재확인을 요구 |
proxy-revalidate | 없음 | 중간 캐시 서버에 대해서 캐시했던 리스폰스의 유효성의 재확인을 요구 |
max-age = [초] | 필수 | 리스폰스의 최대 age 값 |
s-maxage = [초] | 필수 | 공유 캐시 서버의 리스폰스 최대 age 값 |
cache-extension | - | 새로운 디렉티브를 위한 토큰 |
Connection: 더 이상 전송하지 않는 헤더 필드 명
Connection: Close
Connection: Keep-Alive
HTTP 메세지를 생성한 날짜.
Date: Tue, 03 Jul 2021 04:10:32 GMT
Date: Tue, 03-Jul-21 04:10:32 GMT
Date: Tue 03 Jul 21 04:10:32 2021
HTTP/1.1 보다 오래된 버전의 흔적으로 HTTP/1.0와의 후방 호환성만을 위해 정의.
Pragma: no-cache
Cache-Control: no-cache
Pragma: no-cache
메세지 바디의 뒤에 기술되어 있는 헤더 필드를 미리 전달. 청크 전송 인코딩을 사용하고 있는 경우에 사용 가능.
메세지 바디의 전송 코딩 형식을 지정하는 경우.
HTTP 및 다른 프로토콜의 새로운 버전이 통신에 이용되는 경우에 사용.
클라이언트와 서버 간의 리퀘스트 혹인 리스폰스 메세지의 경로를 알기 위해 사용. 프록시 혹은 게이트웨이는 자신의 서버 정보를 Via 헤더 필드에 추가한 뒤에 메세지를 전송.
HTTP/1.0 리스폰스 헤더(Retry-After)가 HTTP/1.1에서 변경된 것. 리스폰스에 관한 추가 정보를 전달.
Warning: [경고코드][경고한 호스트:포트번호]"[경고문]"([날짜])
클라이언트 측에서 서버 측으로 송신된 리퀘스트 메세지에 사용되는 헤더.
리퀘스트의 부가 정보와 클라이언트의 정보, 리스폰스의 콘텐츠에 관한 우선 순위 등을 추가.
유저 에이전트에 처리할 수 있는 미디어 타입과 미디어 타입의 상대적인 우선 순위를 전달하기 위해 사용.
Accpet: text/html, application/xhtml+xml, application/xml;1=0.9,*/*;q=0.8
유저 에이전트에서 처리할 수 있는 문자셋. 문자셋의 상대적인 우선 순위를 전달하기 위해 사용. 서버 구동형 네고시에이션에 이용.
Accept-Charset:iso-8859-5, unicode-1-1:q+0.8
유저 에이전트가 처리할 수 있는 콘텐츠 코딩과 콘텐츠 코딩의 상대적인 우선 순위를 전달하기 위해서 사용.
Accept-Encoding: gzip, deflate
유저 에이전트가 처리할 수 있는 자연어의 세트(한국어와 영어라는 의미)와 자연어 세트의 상대적인 우선 순위를 전달하기 위해 사용.
Accept-Language: ko-kr, en-us;q=0.7,en;q=0.3
유저 에이전트의 인증 정보(크리덴셜 값)을 전달하기 위해 사용.
Authorization: Basic dWVub3NidjajdADjw==
클라이언트가 서버에 특정 동작 요구를 전달.
Expect: 100-continue
유저 에이전트를 사용하고 잇는 유저의 메일 주소를 전달.
From:info@hackr.jp
리퀘스트한 리소스의 인터넷 호스트와 포트 번호를 전달.
Host:www.hackr.jp
조건부 리퀘스트. 조건부 리퀘스트를 받은 서버는 지정된 조건에 맞는 경우에만 리퀘스트를 받음. 엔티티 태그 값을 전달.
If-Match:"123456"
조건부 리퀘스트. 리소스 갱신 날짜가 필드 값보다 새롭지 않다면 리퀘스트를 받아들이겠다는 뜻을 전달.
If-Modified-Since: Thu, 15 Apr 2004 00:00:00 GMT
조건부 리퀘스트. If-Match 헤더 필드와는 반대로 동작. 엔티티 태그(ETag)값이 지정된 리소스의 ETag 값과 일치하지 않으면 리퀘스트를 받아들이겠다는 뜻.
조건부 리퀘스트. If-Range로 지정한 필드값(ETag 값, 혹은 날짜를 지정)과 지정한 리소스의 ETag값 혹은 날짜를 일치하면 Range 리퀘스트로서 처리하고 싶다는 것을 전달.
If-Modified-Since 헤더 필드와 반대로 동작. 지정된 리소스가 필드 값에 지정된 날짜 이후에 갱신 되어 있지 않는 경우에만 리퀘스트를 받아들이도록 전달.
TRACE 혹은 OPTIONS 메소드에 의한 리퀘스트를 할 때에 전송해도 좋은 서버 수의 최대치를 10진수로 저장.
Max-Forwards:10
프록시 서버에서의 인증 요구를 받아들인 때에 인증에 필요한 클라이언트의 정보를 전달.
리소스의 일부분만 취득하는 Range 리퀘스트를 할 때 지정 범위를 전달.
Range: bytes=5001-10000
리퀘스트가 발생한 본래 리소스의 URL 전달.
리스폰스로 받을 수 있는 전송 코딩의 형식과 상대적인 우선 순위를 전달.
TE: trailers
리퀘스트를 생성한 브라우저와 유저 에이전트의 이름 등을 전달.
물리 계층, 데이터 링크 계층, 네트워크 계층의 3계층이 있으면 목적지에 데이터를 보낼 수 있음.다만, 데이터가 손상되거나 유실되더라도 이들 계층에서는 아무것도 하지 않음.
전송 계층은 목적지에 신뢰할 수 있는 데이터를 전달하기 위해 필요.
전송 계층에 오류를 점검하는 기능이 있어, 오류가 있는 경우 데이터를 재전송하도록 함. 또한, 전송된 데이터의 목적지가 어떤 애플리케이션인지 식별하는 기능도 있음.
신뢰성/정확성 : 데이터를 목적지에 문제없이 전달하는 것, 연결형 통신
효율성 : 데이터를 빠르고 효율적으로 전달하는 것, 비연결형 통신
연결형 통신은 신뢰성/정확성이 우선인 통신이라 여러 번 확인하고 보내는데, 비연결형 통신은 효율성이 우선인 통신으로 확인 절차 업시 일방적으로 보냄.
연결형 통신 프로토콜은 TCP, 비연결형 통신 프로토콜은 UDP.
연결형 통신 프로토콜. TCP로 전송할 때 붙이는 헤더를 TCP 헤더. TCP 헤더가 붙은 데이터를 세그먼트(segment).
출발지 포트번호(16비트) | 목적지 포트번호(16비트) | ||
---|---|---|---|
일련번호(32비트) | |||
확인 응답 번호(32비트) | |||
헤더 길이(4비트) | 예약 영역(6비트) | 코드 비트(6비트) | 윈도우 크기(16비트) |
체크섬(16비트) | 긴급 포인터(16비트) | ||
옵션 |
URG | ACK | PSH | RST | SYN | FIN |
---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 |
초깃값은 0이고 비트가 활성화되면 1로 변경.
연결을 확립하려면 SYN(연결 요청)과 ACK(확인 응답)이 필요.
연결을 확립하려면 SYN(연결 요청)과 ACK(확인 응답)이 필요.
컴퓨터1에서 컴퓨터2로 통신을 할 때,
컴퓨터1 ----연결확립요청(SYN)---> 컴퓨터2
URG | ACK | PSH | RST | SYN | FIN |
---|---|---|---|---|---|
0 | 0 | 0 | 0 | 1 | 0 |
URG | ACK | PSH | RST | SYN | FIN |
---|---|---|---|---|---|
0 | 1 | 0 | 0 | 1 | 0 |
URG | ACK | PSH | RST | SYN | FIN |
---|---|---|---|---|---|
0 | 1 | 0 | 0 | 0 | 0 |
연결을 끊을 때는 FIN(연결 종료) ACK을 사용.
컴퓨터1 ----연결종료요청(FIN)---> 컴퓨터2
URG | ACK | PSH | RST | SYN | FIN |
---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 1 |
URG | ACK | PSH | RST | SYN | FIN |
---|---|---|---|---|---|
0 | 1 | 0 | 0 | 0 | 0 |
URG | ACK | PSH | RST | SYN | FIN |
---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 1 |
URG | ACK | PSH | RST | SYN | FIN |
---|---|---|---|---|---|
0 | 1 | 0 | 0 | 0 | 0 |
출발지 포트번호(16비트) | 목적지 포트번호(16비트) | ||
---|---|---|---|
일련번호(32비트) | |||
확인 응답 번호(32비트) | |||
헤더 길이(4비트) | 예약 영역(6비트) | 코드 비트(6비트) | 윈도우 크기(16비트) |
체크섬(16비트) | 긴급 포인터(16비트) | ||
옵션 |
받은 세그먼트를 버퍼(buffer)에 저장. 수신 측으로 대량으로 데이터가 전송되면 보관하지 못해 넘쳐 버림.(overflow)
오버플로우가 발생하지 않도록 버퍼의 한계 크기를 알고 있어야 하는데 TCP 헤더의 윈도우 크기(window size)값에 해당.
3-way 핸드셰이크를 하는 동안에 서로의 윈도우 크기를 확인.
따라서, 윈도우 크기 이내라면 연속해서 세그먼트를 송신.
출발지 포트번호(16비트) | 목적지 포트번호(16비트) | ||
---|---|---|---|
일련번호(32비트) | |||
확인 응답 번호(32비트) | |||
헤더 길이(4비트) | 예약 영역(6비트) | 코드 비트(6비트) | 윈도우 크기(16비트) |
체크섬(16비트) | 긴급 포인터(16비트) | ||
옵션 |
포트 번호는 0~65535번을 사용할 수 있음. 0~1023번 포트는 주요 프로토콜이 사용하도록 예약. (잘 알려진 포트,well-known ports)
1024번은 예약되어 있지만 사용되지는 않는 포트, 1025번 이상은 랜덤 포트(클라이언트 측의 송신 포트로 사용).
포트는 방 번호라고 생각하면 쉬움.
비연결형 통신 프로토콜. 데이터를 효율적으로 빠르게 보내는 것. TCP처럼 따로 확인 작업은 없음. 스트리밍 방식으로 전송하는 동영상 서비스 같은 곳에 사용.
UDP 헤더가 붙은 데이터는 UDP 데이터그램.
출발지 포트 번호(16비트) | 목적지 포트 번호(16비트) |
---|---|
길이(16비트) | 체크섬(16비트) |