나의 독학은
6장 - HTTP 헤더 본문
6.1 HTTP 메시지
✅ HTTP 메시지 구조 (리퀘스트 메시지, 리스폰스 메시지)
6.2 HTTP 헤더 필드
✅목적
- 클라이언트와 서버간의 통신을 위해
- 중요한 정보 전달을 위해
- 메시지 바디의 크기나 사용 언어, 인증 정보를 서버에 제공하기 위해
✅구조
- 헤더 필드 명 : 필드 값
ex) Content-Type : text/html
✅ HTTP 헤더 필드는 4종류로 나뉜다
- 일반 헤더 필드
- 리퀘스트 헤더 필드
- 리스폰스 헤더 필드
- 엔티티 헤더 필드
✅ HTTP1.1 이외의 헤더 필드
Set-Cookie, Content-Disposition와 같이 RFC에 정의되어 폭 넓게 사용되기도 한다.
*RFC : HTTP, TCP/IP, DNS와 같이 인터넷에 쓰이는 기술들을 다 적어 놓은 문서
✅ End-to-end 헤더와 Hop-by-hop 헤더
End-to-End 헤더 : 메시지의 최종 수신자와 송신자 간의 통신을 관리하고 유지하는 데 사용
Hop-by-Hop 헤더 : 메시지의 경로 동안 중간 단계에서 처리하는 데 사용되는 정보를 포함
6.3 일반 헤더 필드
- 리퀘스트 메시지와 리스폰스 메시지 양쪽에 사용
✅ Cache-control 헤더 : 디렉티브로 불리는 명령을 사용해 캐싱을 관리
디렉티브 종류 | 설명 | 예시 |
public | 아무에게나 캐시를 해도 좋다 | Cache-control: 디렉티브 |
private | 특정 유저만을 대상으로 캐시한다. | |
no-cache | 캐시된 리소스를 받지 않고, 서버에서 리소스를 받는다. | |
no-store | 메시지에 기밀 정보가 있으니 캐시로 보존하지 않는다 | |
max-age | 캐시 서버가 리소스를 저정하는 시간을 정함 |
- 이 외에도 다양한 디렉티브가 있다.
✅ Connection 헤더
- 프록시에 더 이상 전송하지 않는 헤더 필드를 지정
- 지속적 접속이 디폴트값이다, 접속을 끊고 싶다면 서버에서 Connection:Close를 작성한다.
✅ 그 외 헤더
헤더 필드 | 설명 | 예시 |
Date | HTTP 메시지를 생성한 날짜 | Date: Tue, 03 Jul 2012 04:40:59 GMT |
Trailer | 메시지 바디 뒤에 기술된 헤더 필드를 미리 전달 청크 전송 인코딩을 사용할 때만 사용 |
Trailer: Expires // 헤더필드 ... ...메시지 바디... Expires: Tue, 28 // 메시지 바디 |
Transfer-Encoding | 메시지 바디의 전송 형식을 지정 HTTP/1.1에서는 필드 값으로 chunked밖에 없다. |
Transfer-Encoding: chunked |
Upgrade | HTTP이외에 다양한 프로토콜과의 통신을 용이 | Upgrade: TLS/1.0 Connection: Upgrade |
Via | 메시지의 경로를 알기 위해 사용 | Via: 1.0 gw.hack.jp |
Warning | 캐시에 관한 경고를 전달 | Warning: [경고코드][경고한 호스트: 포트번호]"[경고문]" |
6.4 리퀘스트 헤더 필드
리퀘스트 헤더 필드 | 설명 | 예시 |
Accept | 미디어 타입 우선 순위 지정 ex)텍스트, 이미지, 동영상 등 우선 순위 지정 ":" 품질 지수 "q=" , 품질 계수 "0~1" |
Accept: text/html, application/xhtml+xml;q=0.9 |
Accept-Charset | 문자셋 우선 순위 지정 여러개 지정 가능 |
Accept-Charset: iso-8859-5, unicode |
Accept-Encoding | 콘텐츠 우선 순위 지정 ex) gzip, compress, identity |
Accept-Encoding: gzip, deflate |
Accept-Language | 언어 지정 | Accept-Language: ko-kr, en |
Authorization | 인증 정보 전달 | Authorization: Basic dWVub3Ni== |
Expect | 서버에 특정 동작을 요구 서버가 응답 못하면 417 상태코드를 반환 |
Expect: 100-continue |
From | 사용자의 메일 주소를 전달 | From: info@hackr.jp |
Host | 인터넷 호스트와 포트 번호를 전달 HTTP/1.1의 유일한 필수 헤더 |
Host: www.hackr.jp |
If-Match | 클라이언트는 엔티티 태그(ETag) 값을 전달 서버는 If-Match의 ETag 값과 리소스의 ETag값이 일치하면 리퀘스트 받음 불 일치시 412 상태코드 반환 "*"을 전달하면 ETag값에 상관 없이 |
If-Match: "123456" |
If-Modified-Since | 필드 값의 날짜 이후 갱신된 리소스면 받아들임 | If-Modified-Since: Thu, 15 Apr 2004 |
If-None-Match | If-Match와의 반대 동작 | If-None-Match: * |
If-Range | 필드 값과 지정한 리소스의 ETag값이 일치하면 Range 리퀘스트로 처리 불 일치하면 리소스 전체를 반환 |
If-Range: "123456" |
If-Unmodified-Since | If-Modified-Since와 반대동작 | - |
Max-Forwards | 리퀘스트 전송이 실패 시 원인을 알기 위함 | Max-Forwards: 10 |
Proxy-Authorization | 프록시 서버가 인증 요구할 때 | Proxy-Authorization: Basic dGlwOjk5 |
Range | 일정 범위의 리소스만을 얻을 때 | Range: bytes=5001-10000 |
Referer | 요청이 발생한 URI를 전달 | Referer: http://www.hak.jp/index.html |
User-Agent | 요청을 요구한 브라우저와 이름을 전달 | User-Agent: Moziila/5.0 Chrome/18.0 |
6.5 리스폰스 헤더 필드
리스폰스 헤더 필드 | 설명 | 예시 |
Accept-Ranges | Range 리퀘스트 헤더 필드에 대한 응답이다. 가능은 bytes, 불가능은 none |
Accept-Ranges: bytes |
Age | 오리진 서버에서 리스폰스가 생성된 시간을 초 단위로 기록 프록시가 리스폰스를 생성했다면 Age헤더 필드는 필수 |
Age: 600 |
ETag | 서버는 리소스 마다 ETag 값을 할당함 ETag는 강한 ETag, 약한 ETag로 나뉨 강한 ETag 값은 리소스가 조금만 다르더라도 값을 새로 할당 약한 ETag값은 리소스가 같다는 것을 W/ 로 나타냄. |
강한 ETag ETag: "82e22293907" 약한 ETag ETag: W/"usagi-1234" |
Location | 요청한 URI이외의 리소스에 액세스를 유도할 때 사용 | Location: http://www.design.com/ |
Proxy-Authenticate | 프록시 서버에서의 인증 요구를 전달 | Proxy-Authenticate: Basic realm="Auth" |
Retry-After | 클라이언트가 언제 리퀘스트를 다시 시행할 지 시간을 전달 | Retry-After: 120 |
Server | 서버에 설치된 HTTP서버의 명칭, 버전, 옵션을 전달 | Server: Apache/2.2.17(Unix) |
Vary | 프록시 서버에 로컬 캐시를 사용하는 방법에 대해 지시. 같은 Vary에 지정된 헤더 필드를 가진 요청에 대해서만 캐시를 반환 |
Vary: Accept-Language |
WWW-Authenticate | HTTP 액세스 인증에 사용 | WWW-Authenticate: Basic realm="Usa Auth" |
6.6 엔티티 헤더 필드
엔티티 헤더 필드 | 설명 | 예시 |
Allow | Request-URI에 지정된 리소스가 제공하는 메소드를 알려줌 | Allow: GET, HEAD |
Content-Encoding | 엔티티 바디에 대해 실시한 콘텐츠 코딩 형식을 알려줌 | Content-Encoding: gzip |
Content-Language | 엔티티 바디에 사용된 언어를 알려줌 | Content-Language: en |
Content-Length | 엔티티 바디의 크기를 bytes로 전달 엔티티 바디에 전송 코딩이 실시된 경우에는 사용하면 안됨 |
Content-Length: 15000 |
Content-Location | 메시지 바디에 대응하는 URI를 전달 | Content-Location: http://www.hack.jp/index-ja.html |
Content-MD5 | 메시지 바디가 변경됐는지 여부를 MD5 알고리즘으로 값을 생성하여 전달. 단, 악의를 가진 변조는 검출 불가능 |
Content-MD5: OGFkZDUwNGV== |
Content-Range | Range리퀘스트에 대한 응답 | Content-Range: bytes 5001-10000/10000 |
Content-Type | 엔티티 바디에 포함된 오브젝트의 미디어 타입을 전달 | Content-Type: text/html; charset=UTF-8 |
Expires | 리소스의 유효 기한 날짜를 캐시 서버에 전달 | Expires: Wed, 04 Jul 2012 08:26:05 GMT |
Last-Modified | 리소스가 마지막으로 갱신된 날짜 정보를 전달 | Last-Modified: Wed, 23 May 2012 |
6.7 쿠키를 위한 헤더 필드
✅ Set-Cookie 헤더 필드
Set-Cookie 필드 속성 | 설명 |
NAME=VALUE | 쿠키에 부여된 이름과 값(필수) |
Expires=DATE | 쿠키 유효 기한 기본값 : 브라우저를 닫을 때까지 |
Path=PATH | 쿠기 적용 대상이 되는 서버 상의 디렉토리로 지정 하지 않는 것이 안전 기본값 : 도큐먼트와 같은 디렉토리 |
Domain=도메인 명 | 쿠키 적용 대상이 되는 도메인 기본값 : 쿠키를 생성한 서버의 도메인 |
Secure | HTTPS로 통신할 때만 쿠키를 송신 |
HttpOnly | 쿠키를 JavaScript에서 액세스 못하도록 제한. XSS로 보호 |
✅ Cookie 헤더 필드
- 클라이언트가 HTTP의 상태 관리 지원을 원할 때 전달
6.8 그 외의 헤더 필드
✅ X-frame-Option
- 클릭 재킹이라는 공격을 막는 것을 목적으로 함
- 값은 Deny(거부) 와 SAMEORIGIN(프로토콜, 호스트, 포트번호가 다 일치) 가 있다.
- 모든 웹 서버에서 설정하는 것이 바람직
✅ X-XSS-Protection
- 브라우저의 XSS 보호기능을 제어하는 헤더
- 값은 0 (XSS 필터를 무효) 과 1 (XSS 필터를 유효)이 있다.
✅ DNT
- 개인 정보 수집을 거부하는 의사
- 값은 0 (트래킹 동의) 과 1 (트래킹 거부)가 있다.
출처 : 그림으로 배우는 Http & Network Basic
'학습 > 그림으로 배우는 Http & Network Basic' 카테고리의 다른 글
8장 - 누가 액세스하고 있는지를 확인하는 인증 (0) | 2023.09.14 |
---|---|
7장 - 웹을 안전하게 지켜주는 HTTPS (0) | 2023.09.11 |
5장 - HTTP와 연계하는 웹 서버 (0) | 2023.09.07 |
4장 - 결과를 전달하는 HTTP 상태 코드 (0) | 2023.09.07 |
3장 - HTTP 정보는 HTTP 메서드에 있다 (0) | 2023.09.05 |