# HTTP ν‘œν˜„ 헀더
Study Repository

HTTP ν‘œν˜„ 헀더

by rlaehddnd0422

request message

  • message body(νŽ˜μ΄λ‘œλ“œ)λ₯Ό 톡해 ν‘œν˜„ 데이터 μ „λ‹¬ν•©λ‹ˆλ‹€.
  • ν‘œν˜„ λ°μ΄ν„°λŠ” μš”μ²­μ΄λ‚˜ μ‘λ‹΅μ—μ„œ 전달할 μ‹€μ œ 데이터
  • ν‘œν˜„ ν—€λ”λŠ” ν‘œν˜„ 데이터λ₯Ό 해석할 수 μžˆλŠ” 정보λ₯Ό 제곡
  • 해석 정보 -> 데이터 μœ ν˜•, 데이터 길이, μ••μΆ• 정보 λ“±

μ°Έκ³  : ν‘œν˜„ ν—€λ”λŠ” ν‘œν˜„ 메타 데이터와, νŽ˜μ΄λ‘œλ“œ λ©”μ‹œμ§€λ₯Ό ꡬ뢄해야 ν•˜μ§€λ§Œ, μ—¬κΈ°μ„œλŠ” μƒλž΅ν•˜κ² μŠ΅λ‹ˆλ‹€.

 

ν‘œν˜„ ν—€λ”μ˜ ν‘œν˜„

> Content Type : ν‘œν˜„ λ°μ΄ν„°μ˜ ν˜•μ‹

> Content-Length : ν‘œν˜„ λ°μ΄ν„°μ˜ 길이

> Content-Encoding : ν‘œν˜„ λ°μ΄ν„°μ˜ μ••μΆ• 방식

> Content-Language : ν‘œν˜„ λ°μ΄ν„°μ˜ μžμ—° μ–Έμ–΄

 

>> ν‘œν˜„ ν—€λ”λŠ” μš”μ²­(request), 응닡(response) λ‘˜λ‹€ μ‚¬μš©

 

Content Type (ν‘œν˜„ 데이터 ν˜•μ‹ μ„€λͺ…) 

HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8 
Content-Length: 3423

<html> <body>...</body>
</html>

> λ―Έλ””μ–΄ νƒ€μž…, 문자 인코딩 

ex) text/html; charset=utf-8

ex) application/json

ex) image/png

 

Content-Length (ν‘œν˜„ λ°μ΄ν„°μ˜ 길이)

HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8 Content-Length: 5

hello

> λ°”μ΄νŠΈ λ‹¨μœ„

> Transfer-Encoding(λΆ„ν•  전솑) 을 μ‚¬μš©ν•˜λ©΄ Content-Lengthλ₯Ό μ‚¬μš©ν•˜λ©΄ μ•ˆλ¨. ... λ°‘μ—μ„œ μžμ„Ένžˆ μ„€λͺ…

 

Content-Encoding (ν‘œν˜„ 데이터 인코딩)

HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8 
Content-Encoding: gzip 
Content-Length: 521

lkj123kljoiasudlkjaweioluywlnfdo912u34lj ko98udjkl

> ν‘œν˜„ 데이터λ₯Ό μ••μΆ•ν•˜κΈ° μœ„ν•΄ μ‚¬μš©

> 데이터λ₯Ό μ „λ‹¬ν•˜λŠ” κ³³μ—μ„œ μ••μΆ•ν›„ 인코딩 헀더 μΆ”κ°€

> 데이터λ₯Ό μ½λŠ” μͺ½μ—μ„œ 인코딩 ν—€λ”μ˜ μ •λ³΄λ‘œ μ••μΆ• ν•΄μ œ

ex) gzie, deflate, identity

 

Content-Language(ν‘œν˜„ λ°μ΄ν„°μ˜ μžμ—°μ–Έμ–΄)

ν‘œν˜„ λ°μ΄ν„°μ˜ μžμ—° μ–Έμ–΄λ₯Ό ν‘œν˜„

HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Language: ko
Content-Length: 521

<html> μ•ˆλ…•ν•˜μ„Έμš”.
</html>

  

Content Negotiation (μ½˜ν…μΈ  λ„€κ³ μ‹œμ—μ΄μ…˜)

ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„ ν˜Έν•˜λŠ” ν‘œν˜„ request 

ν΄λΌμ΄μ–ΈνŠΈκ°€ μ›ν•˜λŠ” μš°μ„ μ μΈ νƒ€μž…μ΄λ‚˜ 인코딩방식, 압좕방식, μ–Έμ–΄λ₯Ό μ„œλ²„μ— μš”μ²­ν•  수 μžˆμ–΄μš”.

  • Accept : ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„ ν˜Έν•˜λŠ” λ―Έλ””μ–΄ νƒ€μž… 전달
  • Accept-charset : ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„ ν˜Έν•˜λŠ” 문자 인코딩
  • Accept-Encoding : ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„ ν˜Έν•˜λŠ” μ••μΆ• 인코딩
  • Accept-Language : ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„ ν˜Έν•˜λŠ” μžμ—° μ–Έμ–΄

ν˜‘μƒ ν—€λ”λŠ” Requestν•  λ•Œλ§Œ μ‚¬μš©ν•©λ‹ˆλ‹€.

 

GET /event
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7

q(0~1)값을 μ‚¬μš©ν•΄μ„œ μš°μ„ μˆœμœ„λ₯Ό μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μƒλž΅ν•˜λ©΄ 1

GET /event
Accept: text/*, text/plain, text/plain;format=flowed, */*

q값을 μ„€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ ꡬ체적인 것을 κΈ°μ€€μœΌλ‘œ μš°μ„ ν•©λ‹ˆλ‹€

μš°μ„ μˆœμœ„

1. text/*

2. text/plain

3. text/plain;format=flowed

4. */*

 


HTTP - 전솑 방식 헀더 

Content-Length(λ‹¨μˆœ 전솑)

Content-Length만 λ‹΄μ•„μ„œ Response λ©”μ‹œμ§€λ₯Ό 보내면 λ‹¨μˆœ μ „μ†‘μž…λ‹ˆλ‹€.

❗️그λƒ₯ λ‹¨μˆœν•˜κ²Œ message bodyλ₯Ό 보낸닀고 μƒκ°ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€.

 

Transfer-Encoding(λΆ„ν•  전솑)

보낼 message bodyλ₯Ό λ‚˜λˆ μ„œ μ „μ†‘ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.

β—οΈνŒŒλΌλ―Έν„°λ‘œ Transfer-Encoding이 λ“€μ–΄κ°‘λ‹ˆλ‹€.

ex) Transfer-Encoding : chunked

❗️이 λ–„λŠ” Content-Lengthλ₯Ό μ‚¬μš©ν•˜λ©΄ μ•ˆλ©λ‹ˆλ‹€.

 

Range, Content-Encoding(λ²”μœ„ 전솑)

❗️ νŒŒλΌλ―Έν„°λ‘œ Content-Range κ°€ λ“€μ–΄κ°‘λ‹ˆλ‹€.

ex) Content-Range : bytes 1001-2000 / 2000

전체λ₯Ό μ „μ†‘ν•˜λŠ”κ²Œ μ•„λ‹ˆλΌ λ°μ΄ν„°μ˜ 일정 λΆ€λΆ„λ§Œ λ²”μœ„λ‘œ μ§€μ •ν•΄μ„œ requestν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

Content-Encoding(μ••μΆ• 전솑)

보낼 message bodyλ₯Ό μ••μΆ•ν•΄μ„œ λ³΄λ‚΄λŠ” λ°©μ‹μž…λ‹ˆλ‹€.

β—οΈνŒŒλΌλ―Έν„°λ‘œ  Content-Encoding이 λ“€μ–΄κ°‘λ‹ˆλ‹€.

ex) Content-Encoding : gzip

ν΄λΌμ΄μ–ΈνŠΈλŠ” response message의 Content-Encoding을 보고 μ–΄λ–€ λ°©μ‹μœΌλ‘œ 압좕을 ν•΄μ œν•΄μ•Ό ν•  지 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.


HTTP - 정보성 헀더 (일반)

From : μœ μ € μ—μ΄μ „νŠΈμ˜ 이메일 정보

  • 일반적으둜 잘 μ‚¬μš© X
  • 검색 엔진 같은 κ³³μ—μ„œ, 주둜 μ‚¬μš©

Referer : 이전 μ›Ή νŽ˜μ΄μ§€ μ£Όμ†Œ

  • ν˜„μž¬ μš”μ²­λœ νŽ˜μ΄μ§€μ˜ 이전 μ›Ή νŽ˜μ΄μ§€ μ£Όμ†Œ
  • A->B둜 μ΄λ™ν•˜λŠ” 경우 Bλ₯Ό μš”μ²­ν•  λ•Œ Referer: Aλ₯Ό ν¬ν•¨ν•΄μ„œ μš”μ²­
  • requestμ—μ„œ μ‚¬μš©

Referer을 μ‚¬μš©ν•΄μ„œ μœ μž… 경둜 뢄석 κ°€λŠ₯

User-Agent : μœ μ € μ—μ΄μ „νŠΈ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 정보

  • user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/ 537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36
  • ν΄λΌμ΄μ–ΈνŠΈμ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 정보(μ›Ή λΈŒλΌμš°μ € 정보 λ“±λ“±)
  • requestμ—μ„œ μ‚¬μš©
  • μ–΄λ–€ μ’…λ₯˜μ˜ λΈŒλΌμš°μ €μ—μ„œ μž₯μ• κ°€ λ°œμƒν•˜λŠ”μ§€ νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Server : μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” ORIGIN μ„œλ²„μ˜ μ†Œν”„νŠΈμ›¨μ–΄ 정보

  • Server: Apache/2.2.22 (Debian)
  • server: nginx
  • response(응닡)μ—μ„œ μ‚¬μš©

Date : λ©”μ‹œμ§€κ°€ λ°œμƒν•œ λ‚ μ§œ/μ‹œκ°„

  • Date: Tue, 15 Nov 1994 08:12:31 GMT
  • μ‘λ‹΅μ—μ„œ μ‚¬μš©

 


HTTP - 정보성 헀더(특수)

Host : μš”μ²­ν•œ 호슀트 정보(도메인)

ν•˜λ‚˜μ˜ μ„œλ²„κ°€ μ—¬λŸ¬ 도메인을 μ²˜λ¦¬ν•  λ•Œμ— μ‚¬μš©ν•©λ‹ˆλ‹€.

λ§Œμ•½ μ„œλ²„ ν•˜λ‚˜κ°€ μ—¬λŸ¬κ°€μ§€μ˜ 도메인을 관리할 λ•Œ, ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— μ—°κ²° μš”μ²­μ„ ν•˜λ©΄ μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 무슨 도메인에 μ—°κ²°ν•΄μ£Όμ–΄μ•Ό ν•  지 μ•Œ 수 μ—†μŠ΅λ‹ˆλ‹€.

ν΄λΌμ΄μ–ΈνŠΈκ°€ Host에 μ›ν•˜λŠ” 도메인을 λ‹΄μ•„μ„œ 보내면 이 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 

Location: νŽ˜μ΄μ§€ λ¦¬λ‹€μ΄λ ‰μ…˜

μ›Ή λΈŒλΌμš°μ €λŠ” 3xxμ‘λ‹΅μ˜ 결과에 Location 헀더가 있으면, Location μœ„μΉ˜λ‘œ μžλ™ λ¦¬λ‹€μ΄λ ‰νŠΈ

Location 값은 λ¦¬λ‹€μ΄λ ‰μ…˜ ν•˜κΈ° μœ„ν•œ λŒ€μƒ λ¦¬μ†ŒμŠ€λ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€.

 

Allow: ν—ˆμš© κ°€λŠ₯ν•œ HTTP λ©”μ„œλ“œ

405 (Method Not Allowed) μ—μ„œ response에 포함해야 ν•©λ‹ˆλ‹€.

μƒνƒœμ½”λ“œ 405λŠ” λ©”μ†Œλ“œ 맀칭이 λ˜μ§€ μ•Šμ•„ μƒκΈ°λŠ” 였λ₯˜μž…λ‹ˆλ‹€.

ex) μ„œλ²„λŠ” GET,HEAD,PUT만 지원할 λ•Œ, ν΄λΌμ΄μ–ΈνŠΈκ°€ POSTλ₯Ό μš”μ²­ν–ˆμ„ λ•Œμ—

request λ©”μ‹œμ§€μ˜ 헀더에 Allow : GET, HEAD, PUT

Retry-After: μœ μ € μ—μ΄μ „νŠΈκ°€ λ‹€μŒ μš”μ²­μ„ ν•˜κΈ°κΉŒμ§€ κΈ°λ‹€λ €μ•Ό ν•˜λŠ” μ‹œκ°„

503(Service Unavailable) μƒνƒœμ½”λ“œμ—μ„œ μ„œλΉ„μŠ€κ°€ μ–Έμ œκΉŒμ§€ μ‚¬μš© λΆˆκ°€λŠ₯인지 μ•Œλ €μ£ΌκΈ° μœ„ν•œ request message header

ex) Retry-After: Fri, 31 Dec 1999 23:59:59 GMT (λ‚ μ§œ ν‘œκΈ°)


HTTP - 인증성 헀더

Autorization

ν΄λΌμ΄μ–ΈνŠΈ 인증 정보λ₯Ό λ‹΄μ•„ μ„œλ²„μ— 전달 / 주둜 μš”μ²­ λ©”μ‹œμ§€μ— μ‚¬μš©λ¨

WWW-Authenticate

401 Unauthorized 응닡 λ©”μ‹œμ§€μ™€ ν•¨κ»˜ μ‚¬μš©λ˜κ³ , λ¦¬μ†ŒμŠ€ μ ‘κ·Ό μ‹œ ν•„μš”ν•œ 인증 방법 μ •μ˜

ex) WWW-Authenticate : Newauth realm="apps", type=1, 
title="Login to \"apps\"", Basic realm="simple"


HTTP - μΏ ν‚€ 헀더

HTTPλŠ” stateless ν”„λ‘œν† μ½œμ΄κΈ° λ•Œλ¬Έμ— ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„κ°€ μš”μ²­κ³Ό 응닡을 μ£Όκ³  λ°›μœΌλ©΄ 연결이 λŠμ–΄μ§‘λ‹ˆλ‹€.

ν΄λΌμ΄μ–ΈνŠΈκ°€ λ‹€μ‹œ μš”μ²­ν•˜λ©΄ μ„œλ²„λŠ” 이전 μš”μ²­μ„ κΈ°μ–΅ν•˜μ§€ λͺ»ν•˜κΈ° λ•Œλ¬Έμ—, λͺ¨λ“  μš”μ²­μ— μ‚¬μš©μž 정보λ₯Ό 포함해야 ν•©λ‹ˆλ‹€.

 

μΏ ν‚€λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ λͺ¨λ“  μš”μ²­κ³Ό 링크에 μ‚¬μš©μž 정보λ₯Ό 포함해야 ν•˜κ² μ£ ?

이 λ•Œ λΈŒλΌμš°μ €λ₯Ό μ™„μ „νžˆ μ’…λ£Œν•˜κ³  λ‹€μ‹œ μ—΄λ©΄ μ΄ˆκΈ°ν™” λœλ‹€λŠ” λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€. μΏ ν‚€λ₯Ό μ‚¬μš©ν•˜λ©΄ 이 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

1. ν΄λΌμ΄μ–ΈνŠΈκ°€ POSTλ₯Ό 톡해 login request

2. μ„œλ²„μ—μ„œ Set-cookieλ₯Ό 톡해 ν΄λΌμ΄μ–ΈνŠΈλ‘œ μΏ ν‚€λ₯Ό 전달

3. 둜그인 이후 welcome νŽ˜μ΄μ§€ μ ‘κ·Όν•  λ•Œ, μΏ ν‚€μ €μž₯μ†Œμ—μ„œ μ‘°νšŒν•΄μ„œ μœ μ € 정보λ₯Ό μ‚¬μš©

 

 

Set-Cookie : μ„œλ²„μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈλ‘œ μΏ ν‚€ 전달(응닡)

 

Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value>; Secure; HttpOnly

νŒŒλΌλ―Έν„°

 

1. expiresλ‚˜ max-ageλ₯Ό 톡해 μΏ ν‚€ 생λͺ…μ£ΌκΈ° μ„€μ • κ°€λŠ₯.

 

2. domain

> λͺ…μ‹œν•œ λ¬Έμ„œ κΈ°μ€€ 도메인 + μ„œλΈŒ 도메인 포함

ex) domain=example.org λ₯Ό μ§€μ •ν•΄μ„œ μΏ ν‚€ 생성 μ‹œ 

      example.org 물둠이고, dev.example.org도 μΏ ν‚€ μ ‘κ·Ό.

 

ex) μƒλž΅ μ‹œ ν˜„μž¬ λ¬Έμ„œ κΈ°μ€€ λ„λ©”μΈλ§Œ μ μš©λ©λ‹ˆλ‹€.

example.orgμ—μ„œ μΏ ν‚€λ₯Ό μƒμ„±ν•˜κ³  domain 지정 μƒλž΅ μ‹œ dev.example.orgλŠ” 쿠킀에 μ ‘κ·Όν•  수 μ—†μŠ΅λ‹ˆλ‹€.

 

3. path 

> 이 경둜λ₯Ό ν¬ν•¨ν•œ ν•˜μœ„ 경둜 νŽ˜μ΄μ§€λ§Œ μΏ ν‚€ μ ‘κ·Ό

 

4. Secure, HttpOnly, SameSite

> Secureλ₯Ό μ μš©ν•˜λ©΄ https인 κ²½μš°μ—λ§Œ μΏ ν‚€ 전달

> HttpOnlyλŠ” HTTP μ „μ†‘μ—λ§Œ μΏ ν‚€ 전달 / xss 곡격 방지

> SameSiteλŠ” μš”μ²­ 도메인과 쿠킀에 μ„€μ •λœ 도메인이 같은 경우만 μΏ ν‚€ 전달 

 

 

Cookie : ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ—μ„œ 받은 μΏ ν‚€λ₯Ό μ €μž₯ν•˜κ³ , HTTP μš”μ²­ μ‹œ μ„œλ²„λ‘œ 전달.

  • μΏ ν‚€ μ •λ³΄λŠ” 항상 μ„œλ²„μ— μ „μ†‘λ˜κΈ° λ•Œλ¬Έμ— λ„€νŠΈμ›Œν¬μ— μΆ”κ°€ νŠΈλž˜ν”½μ„ μœ λ°œν•©λ‹ˆλ‹€.
  • λ”°λΌμ„œ μ΅œμ†Œν•œμ˜ 정보(μ„Έμ…˜ id, 인증 토큰)만 μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.
  • μ„œλ²„μ— μ „μ†‘ν•˜μ§€ μ•Šκ³ , μ›Ή λΈŒλΌμš°μ € 내뢀에 데이터λ₯Ό μ €μž₯ν•˜κ³  μ‹ΆμœΌλ©΄ μ›Ή μŠ€ν† λ¦¬μ§€ (localStorage, sessionStorage) μ°Έκ³ .
  • λ³΄μ•ˆμ— λ―Όκ°ν•œ λ°μ΄ν„°λŠ” μ €μž₯ν•˜λ©΄ μ•ˆλ¨.

 

 

 

 

 

 

 

λΈ”λ‘œκ·Έμ˜ 정보

Study Repository

rlaehddnd0422

ν™œλ™ν•˜κΈ°