[HTTP] HTTP μš”μ²­ λ©”μ‹œμ§€ & 응닡 λ©”μ‹œμ§€

HTTP μš”μ²­ λ©”μ‹œμ§€

HTTP μš”μ²­ λ©”μ‹œμ§€λž€? 

λΈŒλΌμš°μ €κ°€ μ„œλ²„μ—κ²Œ νŠΉμ • 객체λ₯Ό μš”μ²­ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” λ©”μ‹œμ§€ 
μ›ν™œν•œ 데이터 μ†‘μˆ˜μ‹ μ„ μœ„ν•΄ μ•½μ†λœ ν˜•νƒœλ₯Ό 가지고 있음 

 

HTTP μš”μ²­ λ©”μ‹œμ§€μ˜ νŠΉμ§•

  1. λ©”μ‹œμ§€κ°€ 일반 ASCII 기반 ν…μŠ€νŠΈλ‘œ 이루어짐 
  2. 각 쀄은 Carriage Return & Line Feed둜 ꡬ별됨 
  3. 첫쀄은 μš”μ²­λΌμΈμ΄λΌκ³  λΆ€λ₯΄κ³ , 이후 쀄듀은 헀더라인이라고 함
  4. 헀더라인 μ΄ν›„λ‘œ Entity Bodyκ°€ μ‘΄μž¬ν•˜μ§€λ§Œ GETμ—μ„œλŠ” λΉ„μ–΄μžˆμŒ

 

μš”μ²­λΌμΈ

  1. Method, URL, HTTP 버전을 λ‚˜νƒ€λ‚΄λŠ” 세가지 ν•„λ“œλ₯Ό 가짐
  2. Method : HTTP λ©”μ„œλ“œκ°€ 무엇인지 λ‚˜νƒ€λƒ„ 
  3. URL : 객체의 μœ„μΉ˜λ₯Ό λ‚˜νƒ€λƒ„ 
  4. HTTP 버전 : λΈŒλΌμš°μ €μ˜ HTTP 버전을 λ‚˜νƒ€λƒ„

 

헀더라인

  1. ꡉμž₯히 λ‹€μ–‘ν•œ Headerλ₯Ό λͺ…μ‹œν•  수 있음 

HTTP 응닡 λ©”μ‹œμ§€

HTTP 응닡 λ©”μ‹œμ§€λž€? 

μ„œλ²„κ°€ λΈŒλΌμš°μ €μ˜ μš”μ²­μ— λŒ€ν•΄ μ‘λ‹΅ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” λ©”μ‹œμ§€ 
μ›ν™œν•œ 데이터 μ†‘μˆ˜μ‹ μ„ μœ„ν•΄ μ•½μ†λœ ν˜•νƒœλ₯Ό 가지고 있음 

 

HTTP 응닡 λ©”μ‹œμ§€μ˜ νŠΉμ§• 

  1. λ©”μ‹œμ§€κ°€ 일반 ASCII 기반 ν…μŠ€νŠΈλ‘œ 이루어짐 
  2. 각 쀄은 Carriage Return & Line Feed둜 ꡬ별됨
  3. μƒνƒœλΌμΈ, 헀더라인, Entity Body둜 이루어짐
  4. Entity BodyλŠ” μš”μ²­λ°›μ€ 객체λ₯Ό 포함함 

 

μƒνƒœλΌμΈ

  1. μƒνƒœλΌμΈμ€ HTTP 버전, μƒνƒœμ½”λ“œ, μƒνƒœ λ©”μ‹œμ§€λ₯Ό 포함 
  2. HTTP 버전은 μ„œλ²„μ˜ HTTP 버전을 λ‚˜νƒ€λƒ„ 
  3. μƒνƒœμ½”λ“œλŠ” 말 κ·ΈλŒ€λ‘œ μš”μ²­μ— λŒ€ν•œ 결과의 HTTP μƒνƒœ μ½”λ“œλ₯Ό λͺ…μ‹œν•¨ Ex) 404
  4. μƒνƒœ λ©”μ‹œμ§€λŠ” μš”μ²­μ— λŒ€ν•œ 결과의 HTTP μƒνƒœ λ©”μ‹œμ§€λ₯Ό λͺ…μ‹œν•¨  Ex) ok 

 

헀더라인 

  1. ꡉμž₯히 λ‹€μ–‘ν•œ Headerλ₯Ό λͺ…μ‹œν•  수 있음 

 

μΏ ν‚€
HTTP μ„œλ²„λŠ” μƒνƒœλ₯Ό μœ μ§€ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ‚¬μš©μž 접속을 μ œν•œν•˜κ±°λ‚˜, νŠΉμ • μ‚¬μš©μžμ—κ²Œ νŠΉμ • 컨텐츠λ₯Ό μ œκ³΅ν•˜κΈ° μœ„ν•œ λ§€κ°œμ²΄κ°€ ν•„μš”ν•˜κ²Œ λ˜μ—ˆμŒ. μ΄λ•Œ μ‚¬μš©λ˜λŠ” 것이 μΏ ν‚€

 

μ°Έκ³ ) 헀더 μ˜ˆμ‹œ

곡톡 헀더

Date : ν˜„μž¬μ‹œκ°„ (Sat, 23 Mat 2019 GMT)

Pragma : μΊμ‹œμ œμ–΄ (no-cache), HTTP/1.0μ—μ„œ μ“°λ˜ κ²ƒμœΌλ‘œ HTTP/1.1μ—μ„œλŠ” Cache-Control이 쓰인닀.

Cache-Control : μΊμ‹œ μ œμ–΄

  •  no-store : μΊμ‹œλ₯Ό μ €μž₯ν•˜μ§€ μ•Šκ² λ‹€.
  •  no-cache : λͺ¨λ“  μΊμ‹œλ₯Ό μ“°κΈ° 전에 μ„œλ²„μ— ν•΄λ‹Ή μΊμ‹œλ₯Ό μ‚¬μš©ν•΄λ„ λ˜λŠ”μ§€ ν™•μΈν•˜κ² λ‹€.
  •  must-revalidate : 만료된 μΊμ‹œλ§Œ μ„œλ²„μ— ν™•μΈν•˜κ² λ‹€.
  •  public : 곡유 μΊμ‹œμ— μ €μž₯해도 λœλ‹€.
  •  private : 'λΈŒλΌμš°μ €' 같은 νŠΉμ • μ‚¬μš©μž ν™˜κ²½μ—λ§Œ μ €μž₯ν•˜κ² λ‹€.
  •  max-age : μΊμ‹œμ˜ μœ νš¨μ‹œκ°„μ„ λͺ…μ‹œν•˜κ² λ‹€.

Transfer-Encoding : body λ‚΄μš© 자체 μ••μΆ• 방식 지정

  • 'chunked'λ©΄ 본문의 λ‚΄μš©μ΄ λ™μ μœΌλ‘œ μƒμ„±λ˜μ–΄ 길이λ₯Ό λͺ¨λ₯΄κΈ° λ•Œλ¬Έμ— λ‚˜λˆ μ„œ λ³΄λ‚Έλ‹€λŠ” μ˜λ―Έλ‹€.
  • 본문에 데이터 길이가 λ‚˜μ™€μ„œ μ•ΌκΈˆμ•ΌκΈˆ λΈŒλΌμš°μ €κ°€ ν•΄μ„ν•΄μ„œ 화면에 λΏŒλ €μ€„ λ•Œ 이 κΈ°λŠ₯을 μ‚¬μš©ν•œλ‹€.

Upgrade : ν”„λ‘œν† μ½œ λ³€κ²½μ‹œ μ‚¬μš© ex) HTTP/2.0

Via : 쀑계(ν”„λ‘μ‹œ)μ„œλ²„μ˜ 이름, 버전, 호슀트λͺ…

Content-Encoding : 본문의 λ¦¬μ†ŒμŠ€ μ••μΆ• 방식 (transfer-encoding은 body μžμ²΄μ΄λ―€λ‘œ 닀름)

Content-type : 본문의 λ―Έλ””μ–΄ νƒ€μž…

Content-Length : 본문의 길이

Content-language : 본문을 μ΄ν•΄ν•˜λŠ”λ° κ°€μž₯ μ μ ˆν•œ μ–Έμ–΄ 

Expires : μžμ›μ˜ 만료 일자

Allow : μ‚¬μš©μ΄ κ°€λŠ₯ν•œ HTTP λ©”μ†Œλ“œ 방식 

Last-Modified : μ΅œκ·Όμ— μˆ˜μ •λœ λ‚ μ§œ

ETag : μΊμ‹œ μ—…λ°μ΄νŠΈ 정보λ₯Ό μœ„ν•œ μž„μ˜μ˜ 식별 숫자

Connection : ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„μ˜ μ—°κ²° 방식 μ„€μ • HTTP/1.1은 kepp-alive 둜 μ—°κ²° μœ μ§€ν•˜λŠ”κ²Œ λ””ν΄νŠΈ.

 

μš”μ²­ 헀더

Host : μš”μ²­ν•˜λ €λŠ” μ„œλ²„ 호슀트 이름과 포트번호

User-agent : ν΄λΌμ΄μ–ΈνŠΈ ν”„λ‘œκ·Έλž¨ 정보 ex) Mozilla/4.0, Windows NT5.1

Referer : λ°”λ‘œ 직전에 λ¨Έλ¬Όλ €λ˜ μ›Ή 링크 μ£Όμ†Œ(ν•΄λ‹Ή μš”μ²­μ„ ν•  수 있게된 νŽ˜μ΄μ§€)

Accept : ν΄λΌμ΄μ–ΈνŠΈκ°€ 처리 κ°€λŠ₯ν•œ λ―Έλ””μ–΄ νƒ€μž… μ’…λ₯˜ λ‚˜μ—΄ ex) */* - λͺ¨λ“  νƒ€μž… 처리 κ°€λŠ₯

Accept-charset : ν΄λΌμ΄μ–ΈνŠΈκ°€ 지원가λŠ₯ν•œ λ¬Έμžμ—΄ 인코딩 방식

Accept-language : ν΄λΌμ΄μ–ΈνŠΈκ°€ 지원 κ°€λŠ₯ν•œ μ–Έμ–΄ λ‚˜μ—΄

Accept-encoding : ν΄λΌμ΄μ–ΈνŠΈκ°€ 해석 κ°€λŠ₯ν•œ μ••μΆ• 방식 지정 ex) gzip, deflate

Content-location : ν•΄λ‹Ή 개체의 μ‹€μ œ μœ„μΉ˜

Content-disposition : 응닡 메세지λ₯Ό λΈŒλΌμš°μ €κ°€ μ–΄λ–»κ²Œ μ²˜λ¦¬ν• μ§€ μ•Œλ €μ€Œ

Content-Security-Policy : λ‹€λ₯Έ μ™ΈλΆ€ νŒŒμΌμ„ λΆˆλŸ¬μ˜€λŠ” 경우 차단할 λ¦¬μ†ŒμŠ€μ™€ 뢈러올 λ¦¬μ†ŒμŠ€ λͺ…μ‹œ

  • default-src https -> https둜만 νŒŒμΌμ„ κ°€μ Έμ˜΄
  • default-src 'self' -> 자기 λ„λ©”μΈμ—μ„œλ§Œ κ°€μ Έμ˜΄
  • default-src 'none' -> μ™ΈλΆ€νŒŒμΌμ€ κ°€μ Έμ˜¬ 수 μ—†μŒ

If-Modified-Since : 여기에 쓰여진 μ‹œκ°„ μ΄ν›„λ‘œ λ³€κ²½λœ λ¦¬μ†ŒμŠ€ 취득. νŽ˜μ΄μ§€κ°€ μˆ˜μ •λ˜μ—ˆμœΌλ©΄ μ΅œμ‹  νŽ˜μ΄μ§€λ‘œ κ΅μ²΄ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λœλ‹€.

Authorization : 인증 토큰을 μ„œλ²„λ‘œ 보낼 λ•Œ μ“°μ΄λŠ” 헀더

Origin : μ„œλ²„λ‘œ Post μš”μ²­μ„ 보낼 λ•Œ μš”μ²­μ΄ μ–΄λŠ μ£Όμ†Œμ—μ„œ μ‹œμž‘λ˜μ—ˆλŠ”μ§€ λ‚˜νƒ€λ‚΄λŠ” κ°’

  • 이 κ°’μœΌλ‘œ μš”μ²­μ„ 보낸 μ£Όμ†Œμ™€ λ°›λŠ” μ£Όμ†Œκ°€ λ‹€λ₯΄λ©΄ CORS μ—λŸ¬κ°€ λ‚œλ‹€.

Cookie : μΏ κΈ° κ°’ key-value둜 ν‘œν˜„λœλ‹€.

 

응닡 헀더

Location : 301, 302 μƒνƒœμ½”λ“œμΌ λ–„λ§Œ λ³Ό 수 μžˆλŠ” ν—€λ”λ‘œ μ„œλ²„μ˜ 응닡이 λ‹€λ₯Έ 곳에 μžˆλ‹€κ³  μ•Œλ €μ£Όλ©΄μ„œ ν•΄λ‹Ή μœ„μΉ˜(URI)λ₯Ό μ§€μ •ν•œλ‹€.

Server : μ›Ήμ„œλ²„μ˜ μ’…λ₯˜ ex) nginx

Age : max-age μ‹œκ°„λ‚΄μ—μ„œ μ–Όλ§ˆλ‚˜ ν˜λ €λŠ”μ§€ 초 λ‹¨μœ„λ‘œ μ•Œλ €μ£ΌλŠ” κ°’

Referrer-policy : μ„œλ²„ referrer 정책을 μ•Œλ €μ£ΌλŠ” κ°’ ex) origin, no-referrer, unsafe-url

WWW-Authenticate : μ‚¬μš©μž 인증이 ν•„μš”ν•œ μžμ›μ„ μš”κ΅¬ν•  μ‹œ, μ„œλ²„κ°€ μ œκ³΅ν•˜λŠ” 인증 방식

Proxy-Authenticate : μš”μ²­ν•œ μ„œλ²„κ°€ ν”„λ‘μ‹œ μ„œλ²„μΈ 경우 μœ μ € 인증을 μœ„ν•œ κ°’

 

 

 

Reference

https://jeong-pro.tistory.com/181

 

HTTP Header 정리, 각 Http Headerκ°€ κ°–λŠ” 의미λ₯Ό μ•Œμ•„μ•Ό Httpλ₯Ό 배운 것이닀.

HTTP Header μ •λ¦¬λ₯Ό ν•˜λŠ” 이유 KOCW의 "컴퓨터 λ„€νŠΈμ›Œν¬ - ν•œμ–‘λŒ€ν•™κ΅ 이석볡 κ΅μˆ˜λ‹˜" κ°•μ˜ 쀑에 이런 ν‘œν˜„μ΄ μžˆλ‹€. "TCPλ₯Ό μ΄ν•΄ν•˜λ €λ©΄ TCP Headerλ₯Ό μ΄ν•΄ν•˜λ©΄ λœλ‹€." "UDPλ₯Ό μ΄ν•΄ν•˜λ €λ©΄ UDP Headerλ₯Ό μ΄ν•΄ν•˜

jeong-pro.tistory.com