[HTTP] 7.HTTP 헀더1 - μΌλ°˜ν—€λ”

 

 

 

1. ν‘œν˜„

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

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

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

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

 

ex) νšŒμ› λ¦¬μ†ŒμŠ€

-> HTML ν˜•μ‹/ν‘œν˜„μœΌλ‘œ 전솑?

-> JSON  ν˜•μ‹/ν‘œν˜„μœΌλ‘œ 전솑?

 

- ν‘œν˜„ ν—€λ”λŠ” 전솑, 응닡 λ‘˜ λ‹€ μ‚¬μš©

 

Content-Type (ν‘œν˜„ λ°μ΄ν„°μ˜ ν˜•μ‹)
- λ―Έλ””μ–΄ νƒ€μž…, 문자 인코딩
ex) text/html; charset=utf-8
      application/json
      image/png
Content-Encoding (ν‘œν˜„ λ°μ΄ν„°μ˜ μ••μΆ• 방식)
- ν‘œν˜„ 데이터λ₯Ό μ••μΆ•ν•˜κΈ° μœ„ν•΄ μ‚¬μš©
- 데이터λ₯Ό μ „λ‹¬ν•˜λŠ” κ³³μ—μ„œ μ••μΆ• ν›„ 인코딩 헀더 μΆ”κ°€
- 데이터λ₯Ό μ½λŠ” μͺ½μ—μ„œ 인코딩 ν—€λ”μ˜ μ •λ³΄λ‘œ μ••μΆ• ν•΄μ œ
ex) gzip
      deflate
      identity 
Content-Language (ν‘œν˜„ λ°μ΄ν„°μ˜ μžμ—° μ–Έμ–΄)
- ν‘œν˜„ λ°μ΄ν„°μ˜ μžμ—° μ–Έμ–΄λ₯Ό ν‘œν˜„
ex) ko
      en
      en-US
Content-Length (ν‘œν˜„ λ°μ΄ν„°μ˜ 길이)
- λ°”μ΄νŠΈ λ‹¨μœ„
- Transfer-Encoding(전솑코딩)을 μ‚¬μš©ν•˜λ©΄
   Content-Lengthλ₯Ό μ‚¬μš©ν•˜λ©΄ μ•ˆλ¨

2. ν˜‘μƒ (Contents Negotiation)

- ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„ ν˜Έν•˜λŠ” ν‘œν˜„ μš”μ²­

 

Accept: ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„ ν˜Έν•˜λŠ” λ―Έλ””μ–΄ νƒ€μž… 전달

Accept-Charset: ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„ ν˜Έν•˜λŠ” 문자 인코딩

Accept-Encoding: ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„ ν˜Έν•˜λŠ” μ••μΆ• 인코딩

Accept-Language: ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„ ν˜Έν•˜λŠ” μžμ—° μ–Έμ–΄

 

* ν˜‘μƒ ν—€λ”λŠ” μš”μ²­μ‹œμ—λ§Œ μ‚¬μš©

 

 

Accept-Language 적용 μ „

- μ„œλ²„μ—μ„œ μ„ ν˜Έ μ–Έμ–΄ μžλ™μœΌλ‘œ 제곡 (Content-Language)

- λ§Œμ•½ 닀쀑 μ–Έμ–΄ 쀑 koκ°€ μ—†μ„λ•Œ? -> 기본이 독일어고 κ·Έ λ‹€μŒμ΄ μ˜μ–΄μΌλ•Œ? -> μš°μ„ μˆœμœ„ ν•„μš”

 

ν˜‘μƒκ³Ό μš°μ„ μˆœμœ„1

- Quality Values(q)

- 0~1 클수둝 μš°μ„ μˆœμœ„

- μƒλž΅ν•˜λ©΄ 1 (default)

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

 

ν˜‘μƒκ³Ό μš°μ„ μˆœμœ„2

- ꡬ체적인 것이 μš°μ„ 

- Accpet: text/*, text/plain, text/plain;format=flowed, */*

(1) text/plain;format=flowed

(2) text/plain

(3) text/*

(4) */*

 

ν˜‘μƒκ³Ό μš°μ„ μˆœμœ„3

- ꡬ체적인 것을 κΈ°μ€€μœΌλ‘œ λ―Έλ””μ–΄ νƒ€μž…μ„ 맞좀

- Accept: text/*;q=0.3, text/html;q=0.7, text/html;level=1,text/html;level=2;q=0.4, */*;q=0.5

 


3. 전솑방식

- λ‹¨μˆœ 전솑

- μ••μΆ• 전솑

- λΆ„ν•  전솑

- λ²”μœ„ 전솑

 

(1) λ‹¨μˆœ 전솑

- ν•œλ²ˆμ— μš”μ²­ν•˜κ³  ν•œλ²ˆμ— λ°›λŠ” 것

 

(2) μ••μΆ• 전솑

- μš”μ²­ν•˜κ³  μ••μΆ•ν•΄μ„œ λ°›λŠ” 것

ex) Content-Encoding: gzip

 

(3) λΆ„ν•  전솑

- Transfer-Encoding: chunked

- 5λ°”μ΄νŠΈ λ¨Όμ € 보내면 ν΄λΌμ΄μ–ΈνŠΈ λ°›μ•„λ³Όμˆ˜μžˆμŒ

- 5λ°”μ΄νŠΈ 또 보내고

- λ§ˆμ§€λ§‰μ— 0 + \r\n

 

-> μš©λŸ‰μ΄ μ»€μ„œ λΆ„ν• ν•΄μ„œ μ „μ†‘ν•˜λ©΄ μ˜€λŠ”λŒ€λ‘œ λ³Ό 수 있음

-> Content-length λ„£μœΌλ©΄ μ•ˆλ¨!!!

 

(4) λ²”μœ„ 전솑

- Range, Content-Range

- μš”μ²­ λ³΄λ‚Όλ•Œ Range: bytes=1001~2000

- μ‘λ‹΅μœΌλ‘œ Content-Range: bytes 1001~2000/2000


4. νŠΉλ³„ν•œ 정보

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

- μš”μ²­μ—μ„œ μ‚¬μš©

- ν•„μˆ˜κ°’

- ν•˜λ‚˜μ˜ μ„œλ²„κ°€ μ—¬λŸ¬ 도메인을 μ²˜λ¦¬ν•΄μ•Ό ν•  λ•Œ

- ν•˜λ‚˜μ˜ IPμ£Όμ†Œμ— μ—¬λŸ¬ 도메인이 μ μš©λ˜μ–΄ μžˆμ„ λ•Œ

 

μ„€λͺ…)

ν•˜λ‚˜μ˜ μ„œλ²„κ°€ IPκ°€ μ •ν•΄μ Έμžˆλ”λΌλ„ λ‚΄λΆ€μ—μ„œ μ—¬λŸ¬ λ„λ©”μΈμ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ꡬ동 쀑일 수 있음

μ΄λ•Œ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ HTTP μš”μ²­ 보낼 λ•Œ Host에 μ–΄λ–€ 도메인인지 λ§ν•΄μ£ΌλŠ” 것

 

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

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

- μ‘λ‹΅μ½”λ“œ 3xxμ—μ„œ μ„€λͺ…

- 201 (Created) : Location 값은 μš”μ²­μ— μ˜ν•΄ μƒμ„±λœ λ¦¬μ†ŒμŠ€ URI

- 3xx (Redirection) : Location 값은 μš”μ²­μ„ μžλ™μœΌλ‘œ λ¦¬λ‹€μ΄λ ‰μ…˜ν•˜κΈ° μœ„ν•œ λŒ€μƒ λ¦¬μ†ŒμŠ€λ₯΄ 가리킴

 

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

- 405(Method Not Allowed)μ—μ„œ 응닡에 포함해야함

- Allow: GET, HEAD, PUT

* μ„œλ²„μ—μ„œ 많이 κ΅¬ν˜„μ•ˆλ˜μ–΄μžˆμ–΄μ„œ 참고만

 

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

- 503(Service Unavailable) : μ„œλΉ„μŠ€κ°€ μ–Έμ œκΉŒμ§€ 뢈λŠ₯인지 μ•Œλ €μ€„ 수 있음

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

- Retry-After : 120 (μ΄ˆλ‹¨μœ„ ν‘œκΈ°)


5. 인증

(1) Authorization : ν΄λΌμ΄μ–ΈνŠΈ 인증 정보λ₯Ό μ„œλ²„μ— 전달

- Authorization: Basic xxxxx

- O Auth λ“± 인증방법에 따라 헀더에 μ–΄λ–€ 값을 λ„£λŠ”μ§€ 닀름

 

(2) WWW-Authenticate : λ¦¬μ†ŒμŠ€ μ ‘κ·Όμ‹œ ν•„μš”ν•œ 인증 방법 μ •μ˜

- λ¦¬μ†ŒμŠ€ μ ‘κ·Όμ‹œ ν•„μš”ν•œ 인증 방법 μ •μ˜

- 401 Unauthorized 응닡과 ν•¨κ»˜ μ‚¬μš©

 

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


6. μΏ ν‚€

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

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

 

[μΏ ν‚€ λ―Έμ‚¬μš©]

1) 처음 welcome νŽ˜μ΄μ§€ μ ‘κ·Ό

2) 둜그인

3) 둜그인 ν›„ welcome νŽ˜μ΄μ§€ μ ‘κ·Ό

* 홍길동이 μ•„λ‹ˆλΌ μ†λ‹˜μ΄λΌκ³ ν•¨

 

Stateless

- HTTPλŠ” λ¬΄μƒνƒœ(Stateless) ν”„λ‘œν† μ½œ

- ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„κ°€ μš”μ²­κ³Ό 응닡을 μ£Όκ³  λ°›μœΌλ©΄ 연결이 λŠμ–΄μ§

- ν΄λΌμ΄μ–ΈνŠΈκ°€ λ‹€μ‹œ μš”μ²­ν•˜λ©΄ μ„œλ²„λŠ” 이전 μš”μ²­μ„ κΈ°μ–΅ν•˜μ§€ λͺ»ν•¨

- ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„λŠ” μ„œλ‘œ μƒνƒœλ₯Ό μœ μ§€ν•˜μ§€ μ•ŠμŒ

 

λŒ€μ•ˆ)

λͺ¨λ“  μš”μ²­μ— μ‚¬μš©μž 정보 포함 -> λ³΄μ•ˆ & 뢈편

 

[μΏ ν‚€ μ‚¬μš©]

1) 둜그인

2) 둜그인 이후 welcome νŽ˜μ΄μ§€ μ ‘κ·Ό

* μΏ ν‚€ 값을 HTTP 헀더에 μžλ™μœΌλ‘œ λ„£μ–΄μ„œ 보냄

 

μΏ ν‚€

- 예) set-cookie : sessionId=abcde1234, expires=Sat,26-Dec-2020 00:00:00 GMT; path=/; domain=google.com; Secure

- μ‚¬μš©μ²˜

   μ‚¬μš©μž 둜그인 μ„Έμ…˜

   κ΄‘κ³  정보 νŠΈλž˜ν‚Ή

- μΏ ν‚€ μ •λ³΄λŠ” 항상 μ„œλ²„μ— 전솑됨

   λ„€νŠΈμ›Œν¬ νŠΈλž˜ν”½ μΆ”κ°€ 유발

   μ΅œμ†Œν•œμ˜ μ •λ³΄λ§Œ μ‚¬μš© (μ„Έμ…˜ id, 인증 토큰)

   μ„œλ²„에 μ „μ†‘ν•˜μ§€ μ•Šκ³  μ›ΉλΈŒλΌμš°μ € 내뢀에 데이터λ₯Ό μ €μž₯ν•˜κ³  μ‹ΆμœΌλ©΄ μ›Ή μŠ€ν† λ¦¬μ§€ (localStorage, sessionStorage) μ°Έκ³ 

- 주의

   λ³΄μ•ˆμ— λ―Όκ°ν•œ λ°μ΄ν„°λŠ” μ €μž₯ X (주민번호, μ‹ μš©μΉ΄λ“œ 번호 λ“±)

 

μΏ ν‚€ 생λͺ… μ£ΌκΈ°

- Set-Cookie : expires=Sat,26-Dec-2020 00:00:00 GMT

  만료일이 되면 μΏ ν‚€ μ‚­μ œ

- Set-Cookie : max-age=3600 (3600초)

   0,음수면 μΏ ν‚€ μ‚­μ œ

- μ„Έμ…˜ μΏ ν‚€ : 만료 λ‚ μ§œ μƒλž΅ν•˜λ©΄ λΈŒλΌμš°μ € μ’…λ£Œμ‹œκΉŒμ§€

- μ˜μ† μΏ ν‚€ : 만료 λ‚ μ§œ μž…λ ₯ν•˜λ©΄ ν•΄λ‹Ή λ‚ μ§œκΉŒμ§€ μœ μ§€

 

μΏ ν‚€ - 도메인

- ex) domain=example.org

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

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

   > example.orgλŠ” 물둠이고 dev.example.org도 μΏ ν‚€ μ ‘κ·Ό

- μƒλž΅ : ν˜„μž¬ λ¬Έμ„œ κΈ°μ€€ λ„λ©”μΈλ§Œ 적용

   example.orgμ—μ„œ μΏ ν‚€ μƒμ„±ν•˜κ³  domain 지정 μƒλž΅

   > example.orgμ—μ„œλ§Œ μΏ ν‚€ μ ‘κ·Ό

   > dev.example.orgλŠ” μΏ ν‚€ λ―Έμ ‘κ·Ό

 

μΏ ν‚€ - 경둜

- ex) path=/home

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

- 일반적으둜 path=/루트둜 지정

- ex) 

   path=/home 지정

   --κ°€λŠ₯--

   /home 

   /home/level1

   /home/level1/level2

   --λΆˆκ°€λŠ₯--

   /hello

 

μΏ ν‚€ - λ³΄μ•ˆ

Secure

- https인 κ²½μš°μ—λ§Œ 전솑

- μ›λž˜λŠ” http https κ΅¬λΆ„ν•˜μ§€ μ•ŠμŒ

 

HttpOnly

- XSS 곡격 방지

- μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ μ ‘κ·Ό λΆˆκ°€ (document.cookie)

- HTTP μ „μ†‘μ—λ§Œ μ‚¬μš©

 

SameSite

- XSRF 곡격 방지

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

  • 넀이버 λΈ”λŸ¬κ·Έ κ³΅μœ ν•˜κΈ°
  • 넀이버 λ°΄λ“œμ— κ³΅μœ ν•˜κΈ°
  • 페이슀뢁 κ³΅μœ ν•˜κΈ°
  • μΉ΄μΉ΄μ˜€μŠ€ν† λ¦¬ κ³΅μœ ν•˜κΈ°