πŸ“‹ HTTP μ™„λ²½ κ°€μ΄λ“œ - 1λΆ€:1μž₯ HTTP κ°œκ΄€ 정리

waterglassesΒ·2022λ…„ 5μ›” 26일
0

ν•˜λ£¨ 30λΆ„λ™μ•ˆ 책읽기λ₯Ό ν•˜λ©΄μ„œ μ •λ¦¬ν•œ λ‚΄μš©μž…λ‹ˆλ‹€!

1.1 HTTP: μΈν„°λ„·μ˜ λ©€ν‹°λ―Έλ””μ–΄ 배달뢀

1.2 μ›Ή ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„

1.3 λ¦¬μ†ŒμŠ€

μ–΄λ–€ μ’…λ₯˜μ˜ μ½˜ν…μΈ  μ†ŒμŠ€λ„ λ¦¬μ†ŒμŠ€κ°€ 될 수 μžˆλ‹€.

1.3.1 λ―Έλ””μ–΄ νƒ€μž…

HTTPλŠ” μ›Ήμ—μ„œ μ „μ†‘λ˜λŠ” 객체 각각에 μ‹ μ€‘ν•˜κ²Œ MIME(Multipurpose Internet Mail Extensions) νƒ€μž…μ΄λΌλŠ” 데이터 포맷 라벨을 뢙인닀. μ›Ή λΈŒλΌμš°μ €λŠ” μ„œλ²„λ‘œλΆ€ν„° 객체λ₯Ό 돌렀 받을 λ•Œ λ‹€λ£° 수 μžˆλŠ” 객체인지 MIME νƒ€μž…μ„ 톡해 ν™•μΈν•œλ‹€.

1.3.2 URI

정보 λ¦¬μ†ŒμŠ€λ₯Ό κ³ μœ ν•˜κ²Œ μ‹λ³„ν•˜κ³  μœ„μΉ˜λ₯Ό 지정할 수 μžˆλ‹€. URIλŠ” URLκ³Ό URN이 μžˆλ‹€.

1.3.3 URL

νŠΉμ • μ„œλ²„μ˜ ν•œ λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ ꡬ체적인 μœ„μΉ˜λ₯Ό μ„œμˆ ν•œλ‹€.

  • URL의 첫 번째 뢀뢄은 λ¦¬μ†ŒμŠ€μ— μ ‘κ·Όν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” ν”„λ‘œν† μ½œμ„ μ„œμˆ ν•œλ‹€. 보톡 HTTP ν”„λ‘œν† μ½œμ΄λ‹€.
  • 두 번째 뢀뢄은 μ„œλ²„μ˜ 인터넷 μ£Όμ†Œλ₯Ό μ œκ³΅ν•œλ‹€.
  • λ§ˆμ§€λ§‰μ€ μ›Ή μ„œλ²„μ˜ λ¦¬μ†ŒμŠ€λ₯Ό 가리킨닀.

1.3.4 URN

μ½˜ν…μΈ λ₯Ό μ΄λ£¨λŠ” ν•œ λ¦¬μ†ŒμŠ€μ— λŒ€ν•΄, κ·Έ λ¦¬μ†ŒμŠ€μ˜ μœ„μΉ˜μ— 영ν–₯ 받지 μ•ŠλŠ” μœ μΌλ¬΄μ΄ν•œ 이름 역할을 ν•œλ‹€.

1.4 νŠΈλžœμž­μ…˜

HTTP νŠΈλžœμž­μ…˜μ€ μš”μ²­ λͺ…λ Ήκ³Ό 응닡 결과둜 κ΅¬μ„±λ˜μ–΄ μžˆλ‹€. 이 μƒν˜Έμž‘μš©μ€ HTTP λ©”μ‹œμ§€λΌκ³  λΆˆλ¦¬λŠ” μ •ν˜•ν™”λœ 데이터 덩어리λ₯Ό μ΄μš©ν•΄ 이루어진닀.

1.4.1 λ©”μ„œλ“œ

HTTP μš”μ²­ λ©”μ‹œμ§€λŠ” ν•œ 개의 λ©”μ„œλ“œλ₯Ό κ°–λŠ”λ‹€. λ©”μ„œλ“œλŠ” μ„œλ²„μ—κ²Œ μ–΄λ–€ λ™μž‘μ΄ μ·¨ν•΄μ Έμ•Ό ν•˜λŠ”μ§€ λ§ν•΄μ£Όλ‚˜.

HTTP λ©”μ„œλ“œ λ‹€μ„― 개

  • GET, POST, PUT, DELETE, HEAD

1.4.2 μƒνƒœ μ½”λ“œ

λͺ¨λ“  HTTP 응닡 λ©”μ‹œμ§€λŠ” μƒνƒœ μ½”λ“œμ™€ ν•¨κ»˜ λ°˜ν™˜λœλ‹€. μƒνƒœ μ½”λ“œλŠ” ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μš”μ²­μ΄ μ„±κ³΅ν–ˆλŠ”μ§€ μ•„λ‹ˆλ©΄ μΆ”κ°€ μ‘°μΉ˜κ°€ ν•„μš”ν•œμ§€ μ•Œλ €μ£ΌλŠ” μ„Έ 자리 μˆ«μžλ‹€.

1.4.3 μ›Ή νŽ˜μ΄μ§€λŠ” μ—¬λŸ¬ 객체둜 μ΄λ£¨μ–΄μ§ˆ 수 μžˆλ‹€.

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ 보톡 ν•˜λ‚˜μ˜ μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ μ—¬λŸ¬ HTTP νŠΈλžœμ μ…˜μ„ μˆ˜ν–‰ν•œλ‹€.

1.5 λ©”μ‹œμ§€

HTTP λ©”μ‹œμ§€λŠ” λ‹¨μˆœν•œ 쀄 λ‹¨μœ„μ˜ λ¬Έμžμ—΄μ΄λ‹€. HTTP μš”μ²­κ³Ό 응닡 λ©”μ‹œμ§€μ˜ λ‘κ°€μ§€μ˜ λ©”μ‹œμ§€κ°€ μžˆλ‹€.

HTTP λ©”μ‹œμ§€λŠ” λ‹€μŒ μ„Έ λΆ€λΆ„μœΌλ‘œ 이루어진닀.
μ‹œμž‘μ€„ : λ©”μ‹œμ§€μ˜ 첫 쀄, μš”μ²­μ΄λΌλ©΄ 무엇을 ν•΄μ•Όν•˜λŠ”μ§€, 응닡이라면 무슨 일이 μΌμ–΄λ‚¬λŠ”μ§€ λ‚˜νƒ€λƒ„
헀더 : 0개 μ΄μƒμ˜ 헀더 ν•„λ“œκ°€ 이어지고 각 헀더 ν•„λ“œλŠ” μ‰¬μš΄ ꡬ문 뢄석을 μœ„ν•΄ 콜둠(:)으둜 κ΅¬λΆ„λ˜μ–΄ μžˆλŠ” ν•˜λ‚˜μ˜ 이름과 ν•˜λ‚˜μ˜ κ°’μœΌλ‘œ κ΅¬μ„±λœλ‹€.
λ³Έλ¬Έ : μš”μ²­μ˜ 본문은 μ›Ή μ„œλ²„λ‘œ 데이터λ₯Ό μ‹€μ–΄ 보내며, μ‘λ‹΅μ˜ 본문은 ν΄λΌμ΄μ–ΈνŠΈλ‘œ μš”μ²­μ„ λ°˜ν™˜ν•œλ‹€.

1.6 TCP 컀λ„₯μ…˜

1.6.1 TCP/IP

HTTPλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 계측 ν”„λ‘œν† μ½œμ΄λ‹€. λŒ€μ€‘μ μ΄κ³  μ‹ λ’°μ„± μžˆλŠ” 인터넷 전솑 ν”„λ‘œν† μ½œμΈ TCP/IPμ—κ²Œ 맑긴닀.

TCPλŠ” λ‹€μŒμ„ μ œκ³΅ν•œλ‹€.
1. 였λ₯˜ μ—†λŠ” 데이터 전솑
2. μˆœμ„œμ— λ§žλŠ” 전달
3. μ‘°κ°λ‚˜μ§€ μ•ŠλŠ” 데이터 슀트림

일단

1.6.2 접속, IPμ£Όμ†Œ 그리고 포트번호

TCPμ—μ„œλŠ” μ„œλ²„ 컴퓨터에 λŒ€ν•œ IP μ£Όμ†Œμ™€ κ·Έ μ„œλ²„μ—μ„œ μ‹€ν–‰ 쀑인 ν”„λ‘œκ·Έλž¨μ΄ μ‚¬μš© 쀑인 포트 λ²ˆν˜Έκ°€ ν•„μš”ν•˜λ‹€.

μ›Ή λΈŒλΌμš°μ €κ°€ HTTPλ¦¬μ†ŒμŠ€λ₯Ό μ‚¬μš©μžμ—κ²Œ λ³΄μ—¬μ£ΌλŠ” 절차
1) μ›Ή λΈŒλΌμš°μ €λŠ” μ„œλΈŒμ˜ URLμ—μ„œ 호슀트 λͺ…을 μΆ”μΆœν•œλ‹€.
2) μ›Ή λΈŒλΌμš°μ €λŠ” μ„œλ²„μ˜ 호슀트 λͺ…을 IP둜 λ°˜ν™˜ν•œλ‹€.
3) μ›Ή λΈŒλΌμš°μ €λŠ” URLμ—μ„œ 포트번호(μžˆλ‹€λ©΄)λ₯Ό μΆ”μΆœν•œλ‹€.
4) μ›Ή λΈŒλΌμš°μ €λŠ” μ›Ή μ„œλ²„μ™€ TCP 컀λ„₯μ…˜μ„ λ§ΊλŠ”λ‹€.
5) μ›Ή λΈŒλΌμš°μ €λŠ” μ„œλ²„μ— HTTP μš”μ²­μ„ 보낸닀.
6) μ„œλ²„λŠ” μ›Ή λΈŒλΌμš°μ €μ— HTTP 응닡을 λŒλ €μ€€λ‹€.
7) 컀λ„₯μ…˜μ΄ λ‹«νžˆλ©΄, μ›Ή λΈŒλΌμš°μ €λŠ” λ¬Έμ„œλ₯Ό 보여쀀닀.

1.7 ν”„λ‘œν† μ½œ 버전

HTTP/0.9

μ‹¬κ°ν•œ λ””μžμΈ 결함이 λ‹€μˆ˜ 있고 ꡬ식 ν΄λΌμ΄μ–ΈνŠΈν•˜κ³ λ§Œ 같이 μ‚¬μš©ν•  수 μžˆλ‹€. 였직 GET λ©”μ„œλ“œλ§Œ μ§€μ›ν•˜κ³ , λ©€ν‹°λ―Έλ””μ–΄ μ½˜ν…μΈ μ— λŒ€ν•œ MIME νƒ€μž…μ΄λ‚˜, HTTP 헀더, 버전 μ •λ³΄λŠ” μ§€μ›ν•˜μ§€ μ•ŠλŠ”λ‹€.

HTTP/1.0

버전 번호, HTTP 헀더, μΆ”κ°€ λ©”μ„œλ“œ, λ©€ν‹°λ―Έλ””μ–΄ 객체 처리λ₯Ό μΆ”κ°€ν•˜μ˜€λ‹€. μ‹œκ°μ μœΌλ‘œ 맀λ ₯적인 μ›Ή νŽ˜μ΄μ§€μ™€ μƒν˜Έμž‘μš©ν•˜λŠ” 폼을 μ‹€ν˜„ν–ˆκ³  μ΄λŠ” μ›”λ“œ μ™€μ΄λ“œ 웹을 λŒ€μ„Έλ‘œ λ§Œλ“€μ—ˆλ‹€.

HTTP/1.0+

였래 μ§€μ†λ˜λŠ” "keep-alive" 컀λ„₯μ…˜, 가상 ν˜ΈμŠ€νŒ… 지원, ν”„λ½μ‹œ μ—°κ²° 지원을 포함해 λ§Žμ€ κΈ°λŠ₯이 HTTP에 μΆ”κ°€λ˜μ—ˆλ‹€.

HTTP/1.1

HTTP μ„€κ³„μ˜ ꡬ쑰적 결함 ꡐ정, λ‘λ“œλŸ¬μ§„ μ„±λŠ₯ μ΅œμ ν™”, 잘λͺ»λœ κΈ°λŠ₯ μ œκ±°μ— μ§‘μ€‘ν•˜μ˜€λ‹€.

HTTP/2.0

HTTP/1.1 μ„±λŠ₯ 문제λ₯Ό κ°œμ„ ν•˜κΈ° μœ„ν•΄ κ΅¬κΈ€μ˜ SPDY ν”„λ‘œν† μ½œμ„ 기반으둜 섀계가 진행 쀑인 ν”„λ‘œν† μ½œμ΄λ‹€.

1.8 μ›Ήμ˜ κ΅¬μ„±μš”μ†Œ

1.8.1 ν”„λ½μ‹œ

ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ 사이에 μœ„μΉ˜ν•œ HTTP μ€‘κ°œμžμ΄λ‹€. 주둜 λ³΄μ•ˆμ„ μœ„ν•΄ μ‚¬μš©λ˜κ³  λͺ¨λ“  μ›Ή νŠΈλž˜ν”½ 흐름 μ†μ—μ„œ μ‹ λ’°ν• λ§Œν•œ μ€‘κ°œμž 역할을 ν•œλ‹€. λ˜ν•œ μš”μ²­κ³Ό 응닡을 ν•„ν„°λ§ν•œλ‹€.

1.8.2 μΊμ‹œ

많이 μ°ΎλŠ” μ›Ή νŽ˜μ΄μ§€λ₯Ό ν΄λΌμ΄μ–ΈνŠΈ κ°€κΉŒμ΄μ— λ³΄κ΄€ν•˜λŠ” HTTP 창고이닀. λ‹€μŒλ²ˆμ— ν΄λΌμ΄μ–ΈνŠΈκ°€ 같은 λ¬Έμ„œλ₯Ό μš”μ²­ν•˜λ©΄ κ·Έ μΊμ‹œκ°€ κ°–κ³  μžˆλŠ” 사본을 받을 수 μžˆλ‹€.

1.8.3 κ²Œμ΄νŠΈμ›¨μ΄

λ‹€λ₯Έ μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό μ—°κ²°λœ νŠΉλ³„ν•œ μ›Ή μ„œλ²„μ΄λ‹€. 주둜 HTTP νŠΈλž˜ν”½μ„ λ‹€λ₯Έ ν”„λ‘œν† μ½œλ‘œ λ³€ν™”ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λœλ‹€. μ–Έμ œλ‚˜ 슀슀둜기 λ¦¬μ†ŒμŠ€λ₯Ό 자고 μžˆλŠ” μ§„μ§œ μ„œλ²„μΈ κ²ƒμ²˜λŸΌ μš”μ²­μ„ 닀룬닀.

1.8.4 터널

λ‹¨μˆœνžˆ HTTP 톡신을 μ „λ‹¬ν•˜κΈ°λ§Œ ν•˜λŠ” νŠΉλ³„ν•œ ν”„λ½μ‹œμ΄λ‹€. λΉ„HTTP 데이터λ₯Ό ν•˜λ‚˜ μ΄μƒμ˜ HTTP 연결을 톡해 κ·ΈλŒ€λ‘œ 전솑해주기 μœ„ν•΄ μ‚¬μš©λœλ‹€.

1.8.5 μ—μ΄μ „νŠΈ

μžλ™ν™”λœ HTTP μš”μ²­μ„ λ§Œλ“œλŠ” 쀀지λŠ₯적 μ›Ήν΄λΌμ΄μ–ΈνŠΈμ΄λ‹€.

πŸ“¨ λŠλ‚€μ 

HTTP의 μ „λ°˜μ μΈ μ—­ν• , νŠΈλžœμ μ…˜, μ›Ήμ—μ„œ 기본적인 νŠΈλžœμ μ…˜μ„ κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ μ–΄λ–»κ²Œ λ©”μ‹œμ§€λ₯Ό μ£Όκ³ λ°›λŠ”μ§€ μ—¬λŸ¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 등에 λŒ€ν•΄μ„œ ν•˜λ‚˜ν•˜λ‚˜ 무엇인지 λ‹€μ‹œ μ•Œκ²Œ λ˜μ—ˆλ‹€.

κ·Έλ™μ•ˆ 곡뢀λ₯Ό ν•˜λ©΄μ„œλ„ 전체적인 흐름을 λŒ€λž΅λ§Œ μ•Œμ•˜λŠ”λ° 이번 κΈ°νšŒμ— μƒˆμ‚Ό λ¦¬λ§ˆμΈλ“œκ°€ λ˜μ—ˆλ‹€.

Ref

데이빗 고울리 , λΈŒλΌμ΄μ–Έ ν† ν‹° , 마쑰리 세이어 , 세일루 λ ˆλ”” , μ•ˆμŠˆ μ•„κ°€μ™ˆ μ§€μŒ, ⌜HTTP μ™„λ²½ κ°€μ΄λ“œβŒŸ, μΈμ‚¬μ΄νŠΈ

profile
맀 μˆœκ°„ μ„±μž₯ν•˜λŠ” κ°œλ°œμžκ°€ 되렀고 λ…Έλ ₯ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

0개의 λŒ“κΈ€