HTTP : Header

GreenBeanΒ·2021λ…„ 7μ›” 26일
0
post-thumbnail

HTTP : Header

πŸ’‘ HTTPλž€?

  • HyperText Transfer Protocol
  • ν•˜μ΄νΌν…μŠ€νŠΈ(HTML) λ¬Έμ„œλ₯Ό κ΅ν™˜ν•˜κΈ° μœ„ν•΄ λ§Œλ“€μ–΄μ§„ 톡신 κ·œμ•½(protocol)

πŸ” HTTP 톡신 방식

  • HTTPλŠ” 기본적으둜 μš”μ²­(request)‒응닡(response) ꡬ쑰둜 이루어짐
    • ν΄λΌμ΄μ–ΈνŠΈκ°€ HTTP requestλ₯Ό μ„œλ²„μ— 보내면 μ„œλ²„λŠ” HTTP responseλ₯Ό λ³΄λ‚΄λŠ” ꡬ쑰
    • ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„μ˜ λͺ¨λ“  톡신이 μš”μ²­κ³Ό μ‘λ‹΅μœΌλ‘œ 이루어짐

  • Stateless
    • Statelessλž€ λ§κ·ΈλŒ€λ‘œ state(μƒνƒœ)λ₯Ό μ €μž₯ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 뜻
      • 각각의 μš”μ²­β€’μ‘λ‹΅μ€ 독립적인 μš”μ²­β€’μ‘λ‹΅
      • ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­μ„ 보내고 μ„œλ²„μ˜ 응닡을 받은 ν›„ λ‹€μ‹œ μš”μ²­μ„ 보낼 λ•Œ, μ΄μ „μ˜ μš”μ²­β€’μ‘λ‹΅μ— λŒ€ν•΄ μ•Œμ§€ λͺ»ν•œλ‹€λŠ” 뜻

🎩 HTTP : Header

  • ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„λ‘œ μš”μ²­μ„ ν•  λ•Œ ν˜Ήμ€ μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈμ— 응닡할 λ•Œ 뢀가적인 정보λ₯Ό λ‹΄λŠ” 곳이 헀더(header)λΌλŠ” κ³³
    -파이썬(Python)의 λ”•μ…”λ„ˆλ¦¬(Dictionary)와 λΉ„μŠ·ν•˜κ²Œ 킀와 값이 μŒμ„ μ΄λ£¨λŠ” κ°’μœΌλ‘œ 이루어져 있음
    - 예λ₯Ό λ“€μ–΄ ν‚€μ—λŠ” Content-Type λΌλŠ” 킀와 κ°’μ—λŠ” application/json 등이 μ˜€λŠ”λ° 이 λ‘˜μ„ 콜둠으둜 ꡬ뢄
    - μ΅œμ’…μ μœΌλ‘œλŠ” Content-Type: application/json ν˜•μ‹μœΌλ‘œ 이루어짐
  • ν—€λ”λŠ” λ¬Έλ§₯에 따라 μ’…λ₯˜λ₯Ό λ‚˜λˆŒ 수 있음
    • λŒ€ν‘œμ μœΌλ‘œ μš”μ²­κ³Ό 응닡에 λͺ¨λ‘ μ‹€μ–΄λ‚˜λ₯Ό 수 μžˆλŠ” General Headerκ°€ 쑴재
    • ν΄λΌμ΄μ–ΈνŠΈ 자체 정보 등을 λ‹΄λŠ” Request Header
    • μ„œλ²„μ˜ 자체 정보 등을 λ‹΄λŠ” Response Header
    • 컨텐츠 길이 ν˜Ήμ€ MIME νƒ€μž…μ— κ΄€ν•œ 정보λ₯Ό λ‹΄λŠ” Entity Header

Tip! MIMEμ΄λž€?
Multipurpose Internet Mail Extensions의 μ•½μžλ‘œ κ°„λ‹¨νžˆ λ§ν•˜λ©΄ 파일 λ³€ν™˜μ„ μ˜λ―Έν•œλ‹€.ν˜„μž¬λŠ” 웹을 톡해 μ—¬λŸ¬ ν˜•νƒœμ˜ νŒŒμΌμ„ μ „λ‹¬ν•˜λŠ”λ° μ‚¬μš©ν•˜κ³  μžˆμ§€λ§Œ 이 μš©μ–΄κ°€ 생길 땐 이메일과 ν•¨κ»˜ 동봉할 νŒŒμΌμ„ ν…μŠ€νŠΈ 문자둜 μ „ν™˜ν•΄μ„œ 이메일 μ‹œμŠ€ν…œμ„ 톡해 μ „λ‹¬ν•˜κΈ° μœ„ν•΄ κ°œλ°œλ˜μ–΄ Internet Mail Extensions라고 뢈리기 μ‹œμž‘ν–ˆλ‹€κ³  ν•œλ‹€.

πŸ“” General Header

  • HTTP 곡톡 헀더라고도 뢈림
  • HTTP 톡신을 ν•˜λŠ” μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ μΈ‘μ—μ„œ λͺ¨λ‘ μ‚¬μš©ν•  수 μžˆλŠ” 헀더λ₯Ό 말함
  • 이 곡톡 ν—€λ”λŠ” 일반적인 λͺ©μ μœΌλ‘œ μ‚¬μš©λ˜λ©° κ°€μž₯ 기본적인 정보 등을 λ‹΄λŠ” 헀더듀이 쑴재
  • Date
    • HTTP 메세지λ₯Ό μƒμ„±ν•œ μΌμ‹œλ₯Ό λœ»ν•¨
    • ν‚€λŠ” Date둜 μ‚¬μš©λ˜λ©° Date: Wed, 20 May 2020 02:44:49 GMT ν˜•μ‹μœΌλ‘œ 이루어짐
  • Connection
    • HTTP 톡신이 μ™„λ£Œλœ 후에 λ„€νŠΈμ›Œν¬ 접속을 μœ μ§€ν• μ§€ 말지λ₯Ό κ²°μ •ν•˜λŠ” 헀더
    • κ°’μœΌλ‘œλŠ” close와 keep-alive 두 가지가 쑴재
    • close의 경우 톡신이 μ™„λ£Œλœ 후에 λ°”λ‘œ 연결을 λŠκ² λ‹€λŠ” 의미둜, HTTP/1.0μ—μ„œλŠ” 이 값이 κΈ°λ³Έ κ°’
    • keep-alive의 κ²½μš°μ—λŠ” 연결을 μ—΄λ¦° μƒνƒœλ‘œ μœ μ§€ν•˜λŠ” 것을 λ‚˜νƒ€λ‚΄λ©°, HTTP/1.1μ—μ„œμ˜ κΈ°λ³Έ κ°’
  • Cache-control
    • μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­ μ‘λ‹΅κ°„μ˜ 캐싱 λ§€μ»€λ‹ˆμ¦˜μ„ μœ„ν•΄ μ •μ˜ν•˜λŠ” 헀더
    • ν‚€:κ°’μœΌλ‘œ 이루어진 ν—€λ”μ—μ„œ 'κ°’'을 'λ””λ ‰ν‹°λΈŒ'λΌλŠ” λͺ…μΉ­μœΌλ‘œ μ‚¬μš©
    • 이 λ””λ ‰ν‹°λΈŒμ—λŠ” 맀우 λ‹€μ–‘ν•œ 값이 올 수 있으며 주둜 μ“°μ΄λŠ” 것 λͺ‡ κ°€μ§€λ§Œ 정리
      • max-age=[seconds] : λ¦¬μ†ŒμŠ€κ°€ μ΅œμ‹  μƒνƒœλΌκ³  νŒλ‹€ν•  μ΅œλŒ€ μ‹œκ°„μ„ μ§€μ •ν•˜λŠ” λ””λ ‰ν‹°λΈŒ, μš”μ²­ μ‹œκ°„κ³Ό 관련이 있음
      • no-store : μ–΄λ– ν•œ μš”μ²­κ³Ό 응닡에 λŒ€ν•œ 정보λ₯Ό μΊμ‹œν•˜μ§€ μ•ŠμŒ
      • no-transform : 응닡에 λŒ€ν•΄ λ³€ν˜•μ΄λ‚˜ λ³€ν™˜μ΄ μΌμ–΄λ‚˜λ©΄ μ•ˆλ¨. μ»¨ν…μΈ μ˜ ν—€λ”λŠ” ν”„λ‘μ‹œμ— μ˜ν•΄ μˆ˜μ •λ˜λ©΄ μ•ˆλœλ‹€κ³  λͺ…μ‹œν•˜κ³  이λ₯Ό ν—ˆμš©ν•˜μ§€ μ•ŠμŒ
      • no-cache : μΊμ‹œλœ 볡사본을 보여주기 전에 μž¬κ²€μ¦μ„ μœ„ν•œ μš”μ²­μ„ μ„œλ²„λ‘œ 보내도둝 κ°•μ œν•¨
      • public : 응닡은 μ–΄λ– ν•œ μΊμ‹œμ— μ˜ν•΄μ„œλ“  μΊμ‹œλ  수 있음
      • private : 응닡은 곡유 μΊμ‹œμ— μ˜ν•΄ μ €μž₯λ˜μ§€ μ•Šμ•„μ•Ό 함

πŸ“” Entity Header

  • 주둜 μ»¨ν…μΈ μ˜ 정보λ₯Ό λ‹΄κΈ° μœ„ν•œ 헀더
  • Content- 둜 μ‹œμž‘ν•˜λŠ” 헀더 킀듀이 쑴재
  • Content-Type
    • μ‘λ‹΅ν•˜λŠ” 컨텐츠가 μ–΄λ–€ μœ ν˜•μΈμ§€ μ•Œλ €μ£ΌλŠ” 헀더
    • λ””λ ‰ν‹°λΈŒμ—λŠ” media-type, charset, boundary 등이 쑴재
      • media-typeμ΄λž€ 말 κ·ΈλŒ€λ‘œ μ»¨ν…μΈ μ˜ μœ ν˜•μ„ MIME Type으둜 μž‘μ„±ν•˜λ©΄ 되며, 주둜 μ‚¬μš©λ˜λŠ” application/json, text/html, font/woff, image/jpeg, image/png, video/mp4 등이 있음
  • Content-Length
    • λ°”μ΄νŠΈ λ‹¨μœ„μ˜ 컨텐츠 길이λ₯Ό 보냄
  • Content-Location
    • μ»¨ν…μΈ μ˜ λŒ€μ²΄ μœ„μΉ˜λ₯Ό 가리킴
    • 이 μœ„μΉ˜λŠ” μƒλŒ€μ μΈ μ£Όμ†Œκ°€ 될 μˆ˜λ„ 있으며 μ ˆλŒ€μ μΈ μ£Όμ†Œκ°€ 될 μˆ˜λ„ 있음 (λ¦¬λ‹€μ΄λ ‰μ…˜μ˜ λŒ€μƒμ„ κ°€λ¦¬ν‚€λŠ” Location ν—€λ”μ™€λŠ” 닀름)
    • Content-Location: https://example.com/index.html ν˜•μ‹μœΌλ‘œ μ‚¬μš©
  • Content-Range
    • μ»¨ν…μΈ μ˜ λΆ€λΆ„ μœ„μΉ˜λ₯Ό μ•Œλ €μ€Œ
    • 예λ₯Ό λ“€μ–΄ 총 67800bytes 크기λ₯Ό κ°€μ§€λŠ” 컨텐츠λ₯Ό λΆ€λΆ„μ μœΌλ‘œ 보낸닀면 Content-Range: bytes 100-1000/67800둜 ν‘œν˜„
      • "이 ν—€λ”λŠ” μ‘λ‹΅μœΌλ‘œ 내보낸 컨텐츠가 총 컨텐츠 κΈΈμ΄λŠ” 67800bytes이고, κ·Έ 쀑 100bytesμ—μ„œ 1000bytesκΉŒμ§€μ˜ 컨텐츠이닀." 라고 의미의 헀더

πŸ“” Request Header

  • μš”μ²­μ— μ‹€λ¦¬λŠ” 헀더듀
  • 주둜 ν΄λΌμ΄μ–ΈνŠΈμ˜ 자체 정보λ₯Ό λ‹΄λŠ” 것듀이 쑴재
  • Host
    • μš”μ²­μ„ ν•˜λŠ” 주체에 λŒ€ν•œ 정보λ₯Ό λ‹΄λŠ” 헀더
    • HTTP/1.1 이후 이 ν—€λ”λŠ” ν•„μˆ˜ ν•­λͺ©
    • Host: developers.facebook.com ν˜•μ‹μœΌλ‘œ μ‚¬μš©
  • User-Agent
    • ν΄λΌμ΄μ–ΈνŠΈμ˜ 정보λ₯Ό λ‹΄κ³  있음
    • μ—¬κΈ°μ—λŠ” λΈŒλΌμš°μ € 엔진, 버전, 운영체제 등이 λ‹΄κΈΈ 수 있음
    • User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0 ν˜•μ‹μœΌλ‘œ μ‚¬μš©
  • Accept
    • ν΄λΌμ΄μ–ΈνŠΈκ°€ μ–΄λ–€ 컨텐츠 νƒ€μž…μ„ 이해할 수 μžˆλŠ”μ§€μ— λŒ€ν•œ 정보λ₯Ό λ‹΄λŠ” 헀더
    • MIME νƒ€μž…μœΌλ‘œ μž‘μ„±ν•  수 있으며 μ„œλ²„λŠ” 이 헀더λ₯Ό μ°Έκ³ ν•΄μ„œ μ μ ˆν•˜κ²Œ 응닡할 수 있음
    • Accept ν—€λ”λ‘œ ν΄λΌμ΄μ–ΈνŠΈκ°€ 이해할 수 μžˆλŠ” 컨텐츠 νƒ€μž…μ„ λ‚˜μ—΄ν•˜κ³ , μ„œλ²„λŠ” κ·Έ 쀑 ν•˜λ‚˜λ₯Ό 선택해 Content-Type 헀더에 컨텐츠 νƒ€μž…μ„ 내보냄
  • Accept-Language
    • λ‹€κ΅­μ–΄λ₯Ό 지원해야 ν•˜λŠ” μ„œλΉ„μŠ€λ₯Ό μš΄μ˜ν•˜κ³  μžˆμ„ 경우 도메인을 λ‹€λ₯΄κ²Œ ν•΄ 각ꡭ의 μ–Έμ–΄λ‘œ μž‘μ„±λœ νŽ˜μ΄μ§€λ₯Ό 보여쀄 수 μžˆλŠ”λ°, 이런 방법을 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ—κ²Œ 직접 이해할 수 μžˆλŠ” μ–Έμ–΄λ₯Ό 헀더에 μ‹€μ–΄μ„œ 보낼 수 있음
    • Accept-Language: ko-KR, ko;q=0.5 ν˜•μ‹μœΌλ‘œ μ‚¬μš©
  • Accept-Encoding
    • μš”μ²­ν•΄μ„œ 응닡 받을 λ°μ΄ν„°μ˜ μ••μΆ• 방식을 μ§€μ •ν•˜λŠ” 헀더
  • Authorization
    • 주둜 인증 토큰을 보낼 λ•Œ μ“°λŠ” 헀더
    • λ‹€μ–‘ν•œ μ–Έμ–΄μ—μ„œ κ΅¬ν˜„λœ JWT 라이브러리둜 λ§Œλ“€μ–΄μ§„ 토큰을 이 헀더에 μ‹€μ–΄μ„œ μ„œλ²„μ— 보낼 수 있으며, 주둜 Authorization: Type Token ν˜•μ‹μœΌλ‘œ μ‚¬μš©
    • μΌλ°˜μ μœΌλ‘œλŠ” Type에 Bearerλ₯Ό μ“°κ³  Token에 Access Token을 λ‹΄μ•„μ„œ μ„œλ²„μ— 보내면, μ„œλ²„λŠ” μ΄λŸ¬ν•œ 토큰을 λ°›μ•„ κ²€μ¦ν•˜κ³  κ²€μ¦λœ 토큰이면 μžμ›μ„ 내보내고 그렇지 μ•Šλ‹€λ©΄ μ μ ˆν•œ 응닡을 ν•  수 있음
  • Referer
    • 이 ν—€λ”λŠ” ν˜„μž¬ μš”μ²­λœ νŽ˜μ΄μ§€μ—μ„œ 이전에 λ°©λ¬Έν•œ, ν˜„μž¬ νŽ˜μ΄μ§€κ°€ μ–΄λ””λ‘œλΆ€ν„° λ“€μ–΄μ˜€κ²Œ λ˜μ—ˆλŠ”μ§€ ν‘œμ‹œν•˜λŠ” 헀더
    • λ‹€μ–‘ν•œ μ• λ„λ¦¬ν‹±μŠ€ μ„œλΉ„μŠ€μ—μ„œλŠ” μ΄λŸ¬ν•œ 헀더λ₯Ό 톡해 μ‚¬μ΄νŠΈκ°€ μ–΄λ””λ‘œλΆ€ν„° μœ μž…λ˜μ—ˆλŠ”μ§€ 정보λ₯Ό 얻어냄

πŸ“” Response Header

  • μ„œλ²„ 자체의 정보λ₯Ό λ‹΄λŠ” 헀더, 컨텐츠에 λŒ€ν•œ 정보λ₯Ό 담을 μˆ˜λ„ 있음
  • Server
    • 기본적인 μ„œλ²„μ˜ 정보λ₯Ό λ‹΄λŠ” 헀더
    • λ„ˆλ¬΄ λ§Žμ€ μ„œλ²„μ˜ 정보λ₯Ό λ‹΄κ²Œ 되면 곡격을 받을 수 μžˆμœΌλ―€λ‘œ μ„ΈλΆ€μ μœΌλ‘œ μž‘μ„±ν•˜λŠ” 건 피해야함
    • μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” μ„œλ²„ 츑이 μ–΄λ– ν•œ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ‚¬μš©ν•˜κ³  μžˆλŠ”μ§€ ν˜Ήμ€ ν•˜μœ„ μ œν’ˆμ— λŒ€ν•œ λ‚΄μš©μ„ λ‹΄κ³  있음
    • server: Netlify ν˜•μ‹μœΌλ‘œ μ‚¬μš©
  • Access-Control-Allow-Origin
    • ν•΄λ‹Ή Origin(μ£Όμ†Œ)μœΌλ‘œλΆ€ν„° μ˜€λŠ” μš”μ²­μ„ ν—ˆμš©ν•œλ‹€λŠ” 정보λ₯Ό μ•Œλ €μ£ΌλŠ” 헀더
    • access-control-allow-origin: * ν˜•μ‹μœΌλ‘œ μ‚¬μš©
      • μ™€μΌλ“œ μΉ΄λ“œ *κ°€ 였게되면 λͺ¨λ“  Origin을 ν—ˆμš©ν•œλ‹€λŠ” 의미
      • 그렇지 μ•Šκ³  Origin을 적게 되면 κ·Έ Origin으둜 μ˜€λŠ” μš”μ²­λ§Œ ν—ˆμš©ν•œλ‹€λŠ” 의미
    • λ§Œμ•½ ν—ˆμš©λ˜λŠ” Origin이 μ•„λ‹Œ λ‹€λ₯Έ κ³³μ—μ„œ μš”μ²­μ΄ 였게 λœλ‹€λ©΄ λΈŒλΌμš°μ €μ—μ„œ CORS 였λ₯˜λ₯Ό 냄

Tip! CORSλž€?
Cross-Origin Resource Sharing의 μ•½μžλ‘œ 좔가적인 HTTP headerλ₯Ό μ‚¬μš©ν•΄μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λ‹€λ₯Έ origin의 λ¦¬μ†ŒμŠ€μ— μ ‘κ·Όν•  수 μžˆλ„λ‘ ν•˜λŠ” λ©”μ»€λ‹ˆμ¦˜μ„ λœ»ν•œλ‹€. λ‹€λ₯Έ originμ—μ„œ λ‚΄ λ¦¬μ†ŒμŠ€μ— ν•¨λΆ€λ‘œ μ ‘κ·Όν•˜μ§€ λͺ»ν•˜κ²Œ ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λœλ‹€.

  • Expires
    • λ¦¬μ†ŒμŠ€κ°€ μ§€μ •λœ μΌμ‹œκΉŒμ§€ μœ νš¨ν•˜λ‹€κ³  λ‚˜νƒ€λ‚΄λŠ” 헀더
    • μΊμ‹œμ™€ 관련이 있으며 λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ μΊμ‹œκ°€ μ–Έμ œ λ§Œλ£Œλ˜λŠ”μ§€λ₯Ό μ•Œλ €μ£ΌλŠ” 헀더
  • ETag
    • HTTP 컨텐츠가 λ°”λ€Œμ—ˆλŠ”μ§€μ— λŒ€ν•œ 검증을 ν•  수 μžˆλŠ” νƒœκ·Έ
    • 응닡 본문이 λ³€ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ 항상 λ˜‘κ°™μ€ 값을 내뱉고 λ³€ν•œλ‹€λ©΄ λ‹€λ₯Έ 값을 내뱉기 λ•Œλ¬Έμ— 이둜 인해 컨텐츠가 λ°”λ€Œμ—ˆλŠ”μ§€ 검증이 κ°€λŠ₯ν•˜λ©° λ§Œμ•½ λ°”λ€Œκ²Œ λœλ‹€λ©΄ μΊμ‹œλ₯Ό μ§€μš°κ³  μƒˆλ‘œ λ‚΄λ €λ°›κ²Œ 됨
profile
🌱 Backend-Dev | hwaya2828@gmail.com

0개의 λŒ“κΈ€