πŸŽ„ HTTP 헀더 (κ°œμš”, ν‘œν˜„, μ½˜ν…μΈ ν˜‘μƒ, 전솑방식)

leehyunjuΒ·2021λ…„ 6μ›” 7일
1

λ„€νŠΈμ›Œν¬

λͺ©λ‘ 보기
5/14
post-thumbnail

μ•ˆλ…•ν•˜μ„Έμš” μ˜€λŠ˜μ€ HTTP 헀더에 λŒ€ν•˜μ—¬ κ³΅λΆ€ν•΄λ΄…λ‹ˆλ‹€.
HTTP 헀더에 λŒ€ν•œ κ°œλ…λ“€μ€ λ„ˆλ¬΄ λ§Žμ•„μ„œ μͺΌκ°œμ„œ 기둝할 κ²λ‹ˆλ‹€.


볡슡

  • header-field = field-name ":" OWS field-value OWS (OWS:띄어쓰기 ν—ˆμš©)
  • field-name은 λŒ€μ†Œλ¬Έμž ꡬ문 μ—†μŒ

μŠ€νƒ€νŠΈ 라인 λ‹€μŒμ— 헀더듀이 μ­‰ 였고, ν•œμΉΈ λ„μš°κ³  바디뢀뢄듀이 λ“€μ–΄μ˜€κ²Œ λ˜λŠ” ꡬ성이닀.

πŸŽ„ μš©λ„

  • HTTP 전솑에 ν•„μš”ν•œ λͺ¨λ“  뢀가정보
    - 예) λ©”μ‹œμ§€ 바디에 λ‚΄μš©, λ©”μ‹œμ§€ λ°”λ””μ˜ 크기, μ••μΆ•, 인증, μš”μ²­ ν΄λΌμ΄μ–ΈνŠΈ, μ„œλ²„ 정보, μΊμ‹œ 관리 정보...λ“±λ“± 정말 λ¬΄μˆ˜ν•œ 정보듀이 λ“€μ–΄κ°„λ‹€.

  • ν‘œμ€€ 헀더가 λ„ˆλ¬΄ λ§Žλ‹€.

  • ν•„μš”μ‹œ μž„μ˜μ˜ 헀더 μΆ”κ°€ κ°€λŠ₯
    - helloworld : hihi

πŸŽ„ HTTP 헀더

  • 헀더 λΆ„λ₯˜ (크게 4κ°€μ§€λ‘œ λΆ„λ₯˜λ˜μ–΄μžˆλ‹€)

1) General 헀더 : λ©”μ‹œμ§€ 전체에 μ μš©λ˜λŠ” 정보, 예) Connection: close
2) Request 헀더 : μš”μ²­ 정보, 예) User-Agent: Mozilla/5.0 (Macintosh;..) μ›ΉλΈŒλΌμš°μ € 정보가 뭔지
3) Response 헀더 : 응닡 정보, 예) Server: Apache μ„œλ²„ 정보가 뭔지
4) Entity 헀더 : μ—”ν‹°ν‹° λ°”λ”” 정보, 예) Content-Type:text/html, Content-Length:3423 μ½˜ν…μΈ  νƒ€μž…μ€ 바디와 κ΄€λ ¨λœ 정보라고 보면 λœλ‹€.

πŸŽ„ HTTP λ°”λ””

  • λ©”μ‹œμ§€ 본문은 μ—”ν‹°ν‹° 본문을 μ „λ‹¬ν•˜λŠ”λ° μ‚¬μš©ν•œλ‹€.
  • μ—”ν‹°ν‹° 본문은 μš”μ²­μ΄λ‚˜ μ‘λ‹΅μ—μ„œ 전달할 μ‹€μ œ 데이터
  • μ—”ν‹°ν‹° ν—€λ”λŠ” μ—”ν‹°ν‹° 본문의 데이터λ₯Ό 해석할 수 μžˆλŠ” 정보 제곡
    - 데이터 μœ ν˜•(html, json), 데이터 길이, μ••μΆ• 정보 λ“±λ“±

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

1999λ…„ RFC2616이 폐기가 λœλ‹€. 그리고 2014년에 RFE7230~7235 κ°€ λ“±μž₯ν•˜κ²Œ λœλ‹€.

RFC723x λ³€ν™”

  • μ—”ν‹°ν‹° -> ν‘œν˜„
  • Representation = representation Metadata + Representation Data Representation μ—¬κΈ°μ„œ R이 Rest Full에 λ‚˜μ˜€λŠ” κ·Έ R이닀.
  • ν‘œν˜„ = ν‘œν˜„ 메타데이터 + ν‘œν˜„ 데이터

πŸŽ„ ν‘œν˜„

  • Content-Type : ν‘œν˜„ λ°μ΄ν„°μ˜ ν˜•μ‹ (HTML, JSON)

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

  • Content-Language : ν‘œν˜„ λ°μ΄ν„°μ˜ 지연 μ–Έμ–΄ (ν•œκ΅­μ–΄μΈμ§€, μ˜μ–΄μΈμ§€)

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

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

Content-Type νšŒμ›μ΄λΌλŠ” λ¦¬μ†ŒμŠ€κ°€ μžˆλ‹€. 이걸 HTMLμ΄λΌλŠ” ν˜•μ‹μœΌλ‘œ 전달할거야, JSONμ΄λž€ 데이터 ν˜•μ‹μ˜ ν‘œν˜„μœΌλ‘œ 전달할거야. λΌλŠ” λœ»μ΄λ‹€.

Content-Type (ν‘œν˜„ λ°μ΄ν„°μ˜ ν˜•μ‹ μ„€λͺ…)

  • λ―Έλ””μ–΄ νƒ€μž…, 문자 인코딩
    예) text/html; charest=utf-8
  • application/json
  • image/png

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

  • ν‘œν˜„ 데이터λ₯Ό μ••μΆ•ν•˜κΈ° μœ„ν•΄ μ‚¬μš©
  • 데이터λ₯Ό μ „λ‹¬ν•˜λŠ” κ³³μ—μ„œ μ••μΆ• ν›„ 인코딩 헀더 μΆ”κ°€
  • 데이터λ₯Ό μ½λŠ” μͺ½μ—μ„œ 인코딩 ν—€λ”μ˜ μ •λ³΄λ‘œ μ••μΆ• ν•΄μ œ
    - 예제 ✨
    - gzip
    • deflate
    • identity (압좕을 μ•ˆν•œλ‹€λŠ” λœ»μ΄λ‹€)

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

  • ν‘œν˜„ λ°μ΄ν„°μ˜ μžμ—° μ–Έμ–΄λ₯Ό ν‘œν˜„
    -예제
    • ko
    • en
    • en-US

πŸŽ„ ν˜‘μƒ (μ½˜ν…μΈ  λ„€κ³ μ‹œμ—μ΄μ…˜/ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„ ν˜Έν•˜λŠ” ν‘œν˜„ μš”μ²­)

  • Accept : ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„ ν˜Έν•˜λŠ” λ―Έλ””μ–΄ νƒ€μž… 전달
  • Accept-Charset : ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„ ν˜Έν•˜λŠ” 문자 인코딩
  • Accept-Encoding : ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„ ν˜Έν•˜λŠ” μ••μΆ• 인코딩
  • Accept-Language : ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„ ν˜Έν•˜λŠ” μžμ—° μ–Έμ–΄
  • ν˜‘μƒ ν—€λ”λŠ” μš”μ²­μ‹œμ—λ§Œ μ‚¬μš©

πŸŽ„ Accept-Language

ν•œκ΅­μ–΄ λΈŒλΌμš°μ €λ₯Ό μ‚¬μš©ν•˜μ—¬ μ™Έκ΅­ μ‚¬μ΄νŠΈμ— λ“€μ–΄κ°„λ‹€.
근데 μ™Έκ΅­ μ‚¬μ΄νŠΈμ— κΈ°λ³Έ μ–Έμ–΄λŠ” μ˜μ–΄κ³  μ„œλΈŒ μ–Έμ–΄λ‘œ ν•œκ΅­μ–΄λ„ μ§€μ›ν•œλ‹€κ³  λ˜μ–΄μžˆλ‹€. 그러면 ν΄λΌμ΄μ–ΈνŠΈκ°€ ν•œκ΅­μ–΄μΈμ§€ μ•„λ‹Œμ§€ μ•„λ¬΄λŸ° 정보가 μ—†μœΌλ‹ˆ μ„œλ²„μ—μ„œλŠ” μ˜μ–΄ κ΄€λ ¨ 된 λ‚΄μš©μœΌλ‘œ ν•œκ΅­μ–΄ λΈŒλΌμš°μ €μ— 응닡을 ν•΄μ€€λ‹€.

그런데 !! Accept-Language:KO둜 μ „λ‹¬ν•˜λ©΄ 'λ‚΄κ°€ μ›ν•˜λŠ”κ±΄ ν•œκ΅­μ–΄μ—μš”.' 라고 ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ„œλ²„λ‘œ μ•Œμ•„μ„œ 전달이 λœλ‹€. 그럼 μ„œλ²„μ—μ„œλŠ” κΈ°λ³Έ μ–Έμ–΄λŠ” μ˜μ–΄μ΄μ§€λ§Œ ν•œκ΅­μ–΄λ„ μ§€μ›ν•˜κΈ° λ•Œλ¬Έμ— μ•Œμ•„μ„œ ν΄λΌμ΄μ–ΈνŠΈκ°€ μ›ν•˜λŠ” ν•œκ΅­μ–΄λ‘œ 바디에 λΏŒλ €μ€€λ‹€.

Accept-Language λ³΅μž‘ν•œ μ˜ˆμ‹œ

μ΄λ ‡κ²Œ ν΄λΌμ΄μ–ΈνŠΈκ°€ μ›ν•˜λŠ”κ±΄ ν•œκ΅­μ–΄μΈλ°, μ„œλ²„μ—μ„œλŠ” κΈ°λ³Έμ–Έμ–΄κ°€ 독일어고 μ„œλΈŒ μ–Έμ–΄κ°€ μ˜μ–΄μ΄λ‹€. μ΄λŸ΄κ²½μš°μ—λŠ”, μš°μ„ μˆœμœ„κ°€ ν•„μš”ν•˜λ‹€.

ν˜‘μƒκ³Ό μš°μ„ μˆœμœ„ 1 (Quality Values)

  • Quality Values(q)κ°’ μ‚¬μš©
  • 0~1, 클수둝 높은 μš°μ„ μˆœμœ„
  • μƒλž΅ν•˜λ©΄ 1
  • Accept-Language: ko-KR, ko; q=0.9, en-US; q=0.8, en; q=0.7
    1. ko-KR;q=1 (qμƒλž΅)
    1. ko;q=0.9
    2. en-US;q=0.8
    3. en:q=0.7

ko-KR은 μƒλž΅λ˜μ–΄ μžˆμœΌλ‹ˆ 1이닀. koλŠ” 퀄리티 값이 0.9λ‹€. en-USλŠ” μ˜μ–΄μΈλ° 퀄리티 벨λ₯˜λ₯Ό 0.8둜 λ„£κ³  곡톡은 0.7을 λ„£μ—ˆλ‹€.

✨ 이 μ˜ˆμ‹œλ₯Ό 보고 μ‹€μ œλ‘œ ꡬ글에 검색을 해보면

μ΄λ ‡κ²Œ λ„€νŠΈμ›Œν¬ 헀더뢀뢄에 Accept-Language 응닡도 μ°ν˜€μžˆκ³  accept-encodingμ΄λž‘ path μΏΌλ¦¬κΉŒμ§€ λ‹€ μ‘λ‹΅λ˜μ–΄ λ‚˜μ˜¨λ‹€.

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

  • ꡬ체적인 것이 μš°μ„ μ΄λ‹€.
  • Accept: text/, text/plain, text/palin;format=flowed, /*
  1. text/plain;format=flowed
  2. text/plain
  3. text/*
4. */*

πŸŽ„ 전솑 방식 μ„€λͺ…

  • λ‹¨μˆœ 전솑
  • μ••μΆ• 전솑
  • λΆ„ν•  전솑
  • λ²”μœ„ 전솑

λ‹¨μˆœμ „μ†‘

μš”μ²­μ„ ν•˜λ©΄ 응닡을 μ£ΌλŠ”λ°, λ©”μ‹œμ§€ 바디에 λŒ€ν•œ 컨텐츠 길이λ₯Ό 지정을 ν•œλ‹€. 컨텐츠 길이 lengthλ₯Ό μ•Œκ³  μ€€λ‹€. 그럼 μ½˜ν…μΈ μ— λŒ€ν•œ 길이λ₯Ό 바디에 μ€€λ‹€. (ν•œ λ²ˆμ— μš”μ²­ν•˜κ³  ν•œ λ²ˆμ— 쭈욱 λ°›λŠ”λ‹€.)

압좕전솑

μ„œλ²„μ—μ„œ Gzip으둜 압좕을 ν•œλ‹€. 그러면 μš©λŸ‰μ΄ 정말 많이 쀄어든닀.

μœ„μ— 처럼 content-encoding 을 gzip으둜 λ„£μ–΄μ€€λ‹€. 이λ₯Ό 압좕전솑이라고 ν•œλ‹€.


Transfer-Encoding:chunked 덩어리λ₯Ό μͺΌκ°œμ„œ μΈμ½”λ”©ν•œλ‹€. λΌλŠ” λœ»μ΄λ‹€. ✨참고둜 λΆ„ν•  μ „μ†‘λ•ŒλŠ” content-lengthλ₯Ό λ„£μœΌλ©΄ μ•ˆλœλ‹€. (μ£Όμ˜ν•˜μ‚Ό)

λ²”μœ„μ „μ†‘

Range, Content-Range

λ‚˜λŠ” 절반 λ°›μ•˜κ³  λ‚˜λ¨Έμ§€ 절반 μ£Όμ„Έμš”. ν•˜λ©΄ μ„œλ²„μ—μ„œ μ•Œμ•„μ„œ μ€€λ‹€

profile
μ•„λŠ‘ν•œ λ‡Œκ³΅κ°„ 🧠

0개의 λŒ“κΈ€