Jastes 2022. 5. 25. 09:08

http(Hyper Text Transfer Protocol)에 λŒ€ν•˜μ—¬

μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈμ˜ 데이터 κ΅ν™˜μ„ μš”μ²­(Request)κ³Ό 응닡(Response) ν˜•μ‹μœΌλ‘œ μ •μ˜

HTTP의 κΈ°λ³Έ λ©”μ»€λ‹ˆμ¦˜μ€ ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ—κ²Œ μš”μ²­ν•˜λ©΄, μ„œλ²„κ°€ μ‘λ‹΅ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.
μ›Ή μ„œλ²„λŠ” HTTP μ„œλ²„λ₯Ό HTTP μ„œλΉ„μŠ€ ν¬νŠΈμ— λŒ€κΈ°μ‹œν‚΅λ‹ˆλ‹€.
이 ν¬νŠΈλŠ” 일반적으둜 TCP/80 λ˜λŠ” TCP/8080μž…λ‹ˆλ‹€.

 


ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλΉ„μŠ€ ν¬νŠΈμ— HTTP μš”μ²­μ„ μ „μ†‘ν•˜λ©΄, 이λ₯Ό ν•΄μ„ν•˜μ—¬ μ μ ˆν•œ 응닡을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

 

λ¦¬λˆ…μŠ€ 포트 정리

λ¦¬λˆ…μŠ€ 포트 μ„€λͺ… ν•˜κΈ° 전에 읽어야 ν•  λΆ€λΆ„ ν¬νŠΈλž€? ν¬νŠΈλž€? 본래 ν•­κ΅¬λΌλŠ” 의미둜써 CS에선 OSκ°„μ˜ ν†΅μ‹ μ˜ 쒅단점!!  λ„€νŠΈμ›Œν¬ μƒμ—μ„œ 톡신을 ν•  λ•Œ IPλ₯Ό ν† λŒ€λ‘œ ν•΄λ‹Ή μ„œλ²„κ°€ μžˆλŠ” 컴퓨터에 μ ‘κ·Ό

dystopia050119.tistory.com

μžμ„Έν•œ 포트의 λ‚΄μš©μ€ μœ„ λ§ν¬μ—μ„œ μ•„λž˜ μ΄λ―Έμ§€λŠ” ν˜•μ‹μž…λ‹ˆλ‹€!


HTTP λ©”μ‹œμ§€

HTTP λ©”μ‹œμ§€μ—λŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ μ „μ†‘ν•˜λŠ” HTTP μš”μ²­, 그리고 μ„œλ²„κ°€ λ°˜ν™˜ν•˜λŠ” HTTP μ‘λ‹΅ν•©λ‹ˆλ‹€
κΈ°λŠ₯κ³Ό μ„ΈλΆ€ κ΅¬μ‘°μ—μ„œλŠ” 차이가 μžˆμ§€λ§Œ, 크게 보면 이듀은 HTTP ν—€λ“œμ™€ λ°”λ””λ‘œ κ΅¬μ„±λœλ‹€λŠ” κ³΅ν†΅μ μžˆμ£ 


HTTP ν—€λ“œ

HTTP ν—€λ“œμ˜ 각 쀄은 CRLF둜 κ΅¬λΆ„λ˜λ©°, 첫 쀄은 μ‹œμž‘ 쀄(Start-line), λ‚˜λ¨Έμ§€ 쀄은 ν—€λ”(Header)라고 λΆ€λ¦…λ‹ˆλ‹€.
ν—€λ“œμ˜ 끝은 CRLF ν•œ μ€„λ‘œ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

 

μ‹œμž‘ μ€„μ˜ 역할은 μš”μ²­κ³Ό μ‘λ‹΅μ—μ„œ 큰 차이가 μžˆμŠ΅λ‹ˆλ‹€.
κ·ΈλŸ¬λ―€λ‘œ 이에 λŒ€ν•΄μ„œλŠ” 쑰금 뒀에 각각을 μžμ„Ένžˆ κΈ°μˆ ν•˜λ©΄μ„œ μ„€λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€.

 

해더 - ν•„λ“œμ™€ κ°’μœΌλ‘œ κ΅¬μ„±λ˜λ©° HTTP λ©”μ‹œμ§€ λ˜λŠ” λ°”λ””μ˜ 속성
ν•˜λ‚˜μ˜ HTTP λ©”μ‹œμ§€μ—λŠ” 0개 μ΄μƒμ˜ 헀더가 μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.


HTTP λ°”λ””

HTTP λ°”λ””λŠ” ν—€λ“œμ˜ 끝을 λ‚˜νƒ€λ‚΄λŠ” CRLF λ’€, λͺ¨λ“  쀄을 λ§ν•©λ‹ˆλ‹€.
ν΄λΌμ΄μ–ΈνŠΈλ‚˜ μ„œλ²„μ—κ²Œ μ „μ†‘ν•˜λ €λŠ” 데이터가 바디에 λ‹΄κΉλ‹ˆλ‹€


HTTP μš”μ²­

HTTP μš”μ²­μ€ μ„œλ²„μ—κ²Œ νŠΉμ • λ™μž‘μ„ μš”κ΅¬ν•˜λŠ” λ©”μ‹œμ§€μž…λ‹ˆλ‹€.

 

μ„œλ²„λŠ” ν•΄λ‹Ή λ™μž‘μ΄ μ‹€ν˜„ κ°€λŠ₯ν•œμ§€, ν΄λΌμ΄μ–ΈνŠΈκ°€ κ·ΈλŸ¬ν•œ λ™μž‘μ„ μš”μ²­ν•  κΆŒν•œμ΄ μžˆλŠ”μ§€
등을 κ²€ν† ν•˜κ³ , μ μ ˆν•  λ•Œλ§Œ 이λ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€.


μ‹œμž‘ 쀄

HTTP μš”μ²­μ˜ μ‹œμž‘ 쀄은 λ©”μ†Œλ“œ(Method)μš”μ²­ URI(Request-URI), 그리고 HTTP λ²„μ „μœΌλ‘œ ꡬ성
각각은 λ„μ–΄μ“°κΈ°λ‘œ κ΅¬λΆ„ν•©λ‹ˆλ‹€.

 

λ©”μ†Œλ“œλŠ” URIκ°€ κ°€λ¦¬ν‚€λŠ” λ¦¬μ†ŒμŠ€λ₯Ό λŒ€μƒμœΌλ‘œ, μ„œλ²„κ°€ μˆ˜ν–‰ν•˜κΈΈ λ°”λΌλŠ” λ™μž‘μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
HTTP ν‘œμ€€μ— μ •μ˜λœ λ©”μ†Œλ“œλŠ” 8κ°œκ°€ μžˆμœΌλ‚˜, μ—¬κΈ°μ„œλŠ” 비ꡐ적 자주 μ‚¬μš©λ˜λŠ” GETκ³Ό POST λ©”μ†Œλ“œλ§Œ..

λ¨Όμ € GET은 λ¦¬μ†ŒμŠ€λ₯Ό κ°€μ Έμ˜€λΌλŠ” λ©”μ†Œλ“œμž…λ‹ˆλ‹€. μ΄μš©μžκ°€ λΈŒλΌμš°μ €μ— μ›Ή μ„œλ²„μ˜ μ£Όμ†Œλ₯Ό μž…λ ₯ν•˜κ±°λ‚˜
ν•˜μ΄νΌλ§ν¬λ₯Ό ν΄λ¦­ν•˜λ©΄, μƒˆλ‘œμš΄ νŽ˜μ΄μ§€λ₯Ό λ Œλ”λ§ν•˜κΈ° μœ„ν•΄ λ¦¬μ†ŒμŠ€κ°€ ν•„μš”ν•©λ‹ˆλ‹€.
μ΄λ•Œ λΈŒλΌμš°μ €λŠ” GET μš”μ²­μ„ μ„œλ²„μ— μ „μ†‘ν•˜μ—¬ λ¦¬μ†ŒμŠ€λ₯Ό λ°›μ•„μ˜΅λ‹ˆλ‹€.

λ°˜λŒ€λ‘œ, POSTλŠ” λ¦¬μ†ŒμŠ€λ‘œ 데이터λ₯Ό λ³΄λ‚΄λΌλŠ” λ©”μ†Œλ“œμž…λ‹ˆλ‹€. 전솑할 λ°μ΄ν„°λŠ” 보톡 HTTP 바디에 포함함
μ˜ˆμ‹œλ‘œ λ‘œκ·ΈμΈν•  λ•Œ μž…λ ₯ν•˜λŠ” ID와 λΉ„λ°€λ²ˆν˜Έ, κ²Œμ‹œνŒμ— μž‘μ„±ν•˜λŠ” κΈ€ 등이 POST둜 μ„œλ²„μ— 보냄

 

이 외에 μš”μ²­ URIλŠ” λ©”μ†Œλ“œμ˜ λŒ€μƒμ„, HTTP λ²„전은 ν΄λΌμ΄μ–ΈνŠΈκ°€ μ‚¬μš©ν•˜λŠ” HTTP ν”„λ‘œν† μ½œμ˜ 버전 ν‘œμ‹œν•¨


헀더와 λ°”λ””

μ‹œμž‘ 쀄을 μ œμ™Έν•œ 헀더와 λ°”λ””λŠ” HTTP λ©”μ‹œμ§€μ—μ„œ μ„€λͺ…ν•œ 것과 κ°™μŠ΅λ‹ˆλ‹€.

 

πŸ“ŽHTTP μš”μ²­μ˜ λ©”μ†Œλ“œ 및 URI에 λŒ€ν•΄ 더 μžμ„Ένžˆ μ•Œκ³  μ‹Άλ‹€λ©΄, ν‘œμ€€ λ¬Έμ„œλ₯Ό 보싀 것을 μΆ”μ²œν•©λ‹ˆλ‹€

 

HTTP/1.1: Request

part of Hypertext Transfer Protocol -- HTTP/1.1 RFC 2616 Fielding, et al. 5 Request A request message from a client to a server includes, within the first line of that message, the method to be applied to the resource, the identifier of the resource, and t

www.w3.org


HTTP 응닡

HTTP 응닡은 HTTP μš”μ²­μ— λŒ€ν•œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜λŠ” λ©”μ‹œμ§€μž…λ‹ˆλ‹€.
μš”μ²­μ„ μˆ˜ν–‰ μ—¬λΆ€ 그리고 μ΄μœ μ™€ 같은 μƒνƒœ 정보(Status), ν΄λΌμ΄μ–ΈνŠΈμ— 전솑할 λ¦¬μ†ŒμŠ€κ°€ 응닡에 포함.


μ‹œμž‘ 쀄

HTTP μ‘λ‹΅μ˜ μ‹œμž‘ 쀄은 HTTP 버전, μƒνƒœ μ½”λ“œ(Status Code), 그리고 μ²˜λ¦¬ μ‚¬μœ (Reason Phrase)둜 ꡬ성!
각각은 λ„μ–΄μ“°κΈ°λ‘œ κ΅¬λΆ„λ©λ‹ˆλ‹€.

 

HTTP 버전은 μ„œλ²„μ—μ„œ μ‚¬μš©ν•˜λŠ” HTTP ν”„λ‘œν† μ½œμ˜ 버전을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
그리고 μƒνƒœ μ½”λ“œλŠ” μš”μ²­μ— λŒ€ν•œ 처리 κ²°κ³Όλ₯Ό μ„Έ 자릿수둜 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

 

HTTP ν‘œμ€€μΈ RFC 2616은 λŒ€λž΅ 40μ—¬κ°œμ˜ μƒνƒœ μ½”λ“œλ₯Ό μ •μ˜ν•˜κ³  μžˆλŠ”λ°,
각각은 첫 번째 μžλ¦Ώμˆ˜μ— 따라 5개의 클래슀둜 λΆ„λ₯˜λ©λ‹ˆλ‹€. 

처리 μ‚¬μœ λŠ” μƒνƒœ μ½”λ“œκ°€ λ°œμƒν•œ 이유λ₯Ό 짧게 κΈ°μˆ ν•œ κ²ƒμž…λ‹ˆλ‹€.
μƒνƒœ μ½”λ“œ μ„€λͺ… λŒ€ν‘œ μ˜ˆμ‹œ
1xx μš”μ²­μ„ μ œλŒ€λ‘œ λ°›μ•˜κ³ , μ²˜λ¦¬κ°€ 진행 μ€‘μž„  
2xx μš”μ²­μ΄ μ œλŒ€λ‘œ 처리됨 200: 성곡
3xx μš”μ²­μ„ μ²˜λ¦¬ν•˜λ €λ©΄, ν΄λΌμ΄μ–ΈνŠΈκ°€ μΆ”κ°€ λ™μž‘μ„ μ·¨ν•΄μ•Ό 함. 302: λ‹€λ₯Έ URL둜 갈 것
4xx ν΄λΌμ΄μ–ΈνŠΈκ°€ 잘λͺ»λœ μš”μ²­μ„ 보내어 μ²˜λ¦¬μ— μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€. 400: μš”μ²­μ΄ 문법에 λ§žμ§€ μ•ŠμŒ
403: ν΄λΌμ΄μ–ΈνŠΈκ°€ λ¦¬μ†ŒμŠ€μ— μš”μ²­ν•  κΆŒν•œ X
404: λ¦¬μ†ŒμŠ€κ°€ μ—†μŒ
5xx ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ€ μœ νš¨ν•˜μ§€λ§Œ, μ„œλ²„μ— μ—λŸ¬κ°€
λ°œμƒν•˜μ—¬ μ²˜λ¦¬μ— μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€.
500: μš”μ²­μ„ μ²˜λ¦¬ν•˜λ‹€κ°€ μ—λŸ¬κ°€ λ°œμƒν•¨
  503: μ„œλ²„κ°€ κ³ΌλΆ€ν•˜λ‘œ 인해 μš”μ²­μ„ 처리 X

헀더와 λ°”λ””

μ‹œμž‘ 쀄을 μ œμ™Έν•œ 헀더와 λ°”λ””λŠ” HTTP λ©”μ‹œμ§€μ—μ„œ μ„€λͺ…ν•œ 것과 κ°™μŠ΅λ‹ˆλ‹€.

πŸ“ŽHTTP 응닡에 λŒ€ν•΄ 더 μžμ„Ένžˆ μ•Œκ³  μ‹Άλ‹€λ©΄, ν‘œμ€€ λ¬Έμ„œλ₯Ό 보싀 것을 μΆ”μ²œ!

 

HTTP/1.1: Response

part of Hypertext Transfer Protocol -- HTTP/1.1 RFC 2616 Fielding, et al. 6 Response After receiving and interpreting a request message, a server responds with an HTTP response message. Response = Status-Line ; Section 6.1 *(( general-header ; Section 4.5

www.w3.org


https

HTTP의 응닡과 μš”μ²­μ€ ν‰λ¬ΈμœΌλ‘œ μ „λ‹¬λ©λ‹ˆλ‹€. μ΄λŠ” μ‹¬κ°ν•œ λ³΄μ•ˆ 문제둜 이어지죠
예λ₯Ό λ“€μ–΄, λ‘œκ·ΈμΈν•  λ•Œ μ „μ†‘ν•œ POST μš”μ²­μ—λŠ” λŒ€κ°œ 이용자의 ID와 λΉ„λ°€λ²ˆν˜Έκ°€ ν¬ν•¨λ©λ‹ˆλ‹€.
κ³΅κ²©μžκ°€ 쀑간에 이λ₯Ό κ°€λ‘œμ±„λ©΄ 이용자의 계정이 νƒˆμ·¨λ‹Ήν•  수 μžˆμŠ΅λ‹ˆλ‹€.

HTTPS(HTTP over Secure socket layer)λŠ” TLS(Transport Layer Security) ν”„λ‘œν† μ½œμ„ λ„μž…


TLSλŠ” μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ 사이에 μ˜€κ°€λŠ” λͺ¨λ“  HTTP λ©”μ‹œμ§€λ₯Ό μ•”ν˜Έν™”ν•©λ‹ˆλ‹€.
κ³΅κ²©μžκ°€ 쀑간에 λ©”μ‹œμ§€λ₯Ό νƒˆμ·¨ν•˜λ”λΌλ„ 이λ₯Ό ν•΄μ„ν•˜λŠ” 것은 λΆˆκ°€λŠ₯ν•˜λ©°,
결과적으둜 HTTP 톡신이 도청과 λ³€μ‘°λ‘œλΆ€ν„° λ³΄ν˜Έλ©λ‹ˆλ‹€.

μ™Όμͺ½μ€ http 였λ₯Έμͺ½μ€ https

μœ„μ— 사진은 HTTP 및 HTTPS의 μ›Ή μ„œλ²„μ™€ μ˜€κ°€λŠ” λ©”μ‹œμ§€λ₯Ό Wireshark둜 ν™•μΈν•œ κ²ƒμž…λ‹ˆλ‹€.
λΉ¨κ°„ κΈ€μžλŠ” μš”μ²­, νŒŒλž€ κΈ€μžλŠ” 응닡이고 HTTP λ©”μ‹œμ§€λŠ” μ‰½κ²Œ 읽을 수 μžˆμ§€λ§Œ, HTTPS의 것은 ν•΄μ„λΆˆκ°€

 

μ›Ή μ„œλ²„μ˜ URL이 http://둜 μ‹œμž‘λ˜λ©΄ HTTP, https://둜 μ‹œμž‘λ˜λ©΄ HTTPS ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•©λ‹ˆλ‹€. 
그리고 μš”μ¦˜μ€ λ‹€ HTTPSλ₯Ό 지ν–₯ν•˜λŠ” 편이죠

TLS ν‘œμ€€
 TLS의 기반이 λ˜λŠ” 곡개 ν‚€ μ•”ν˜Έ μ‹œμŠ€ν…œ(Public Key Crypto Standard, PKCS) 및 λŒ€μΉ­ ν‚€ μ•”ν˜Έ(Symmetric Key Cryptography)을 μ•Œμ•„μ•Όν•˜λ©°, μ•„λ‘€ λ¬Έμ„œλ₯Ό 읽으면 이해에 도움될 κ²λ‹ˆλ‹€ μ•”ν˜Έν•™ κΈ°μ΄ˆλ„ λ°°μš°μ‹œκ³ ..
 

RFC 5246 - The Transport Layer Security (TLS) Protocol Version 1.2

 

datatracker.ietf.org

 


정리

  • HTTP(HyperText Transfer Protocol): μ›Ή μ„œλ²„μ™€ clientκ°€ λ¦¬μ†ŒμŠ€λ₯Ό κ΅ν™˜μ— μ‚¬μš©ν•˜λŠ” ν”„λ‘œν† μ½œ.
    ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­ν•˜λ©΄, μ„œλ²„κ°€ μ‘λ‹΅ν•˜λŠ” 방식.
  • HTTP λ©”μ‹œμ§€: HTTP μ„œλ²„μ™€ clientκ°€ κ΅ν™˜ν•˜λŠ” 데이터. ν—€λ“œμ™€ λ°”λ””λ‘œ κ΅¬μ„±λ˜λ©°, 각 쀄은 CRLF둜 ꡬ뢄됨.
    • ν—€λ“œ: λ©”μ‹œμ§€μ— λŒ€ν•œ 정보. ν—€λ“œμ˜ λμ—λŠ” CRLF*κ°€ ν•œ 쀄 있음.
    • λ°”λ””: ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ—κ²Œ, λ˜λŠ” μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 전달할 데이터
    • *CRLF(μ€„λ°”κΏˆ), EOL(end-of-line) λ“±μœΌλ‘œ μ§€μΉ­ν•˜λ©° ν†΅μš©λ¨
  • HTTP μš”μ²­(Request): ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ—κ²Œ νŠΉμ • λ™μž‘μ„ μš”μ²­ν•˜λŠ” λ©”μ‹œμ§€
    • λ©”μ†Œλ“œ(Method): μš”μ²­ URIκ°€ κ°€λ¦¬ν‚€λŠ” λ¦¬μ†ŒμŠ€μ— λŒ€ν•΄, μ„œλ²„κ°€ μˆ˜ν–‰ν–ˆμœΌλ©΄ ν•˜λŠ” λ™μž‘μ„ 지정
    • μš”μ²­ URI(Request-URI): λ©”μ†Œλ“œμ˜ λŒ€μƒμ΄ λ˜λŠ” λ¦¬μ†ŒμŠ€λ₯Ό 지정
  • HTTP 응닡(Response): μš”μ²­μ„ μ²˜λ¦¬ν•œ κ²°κ³Ό 및 이유, ν΄λΌμ΄μ–ΈνŠΈμ— 전솑 μ›Ή λ¦¬μ†ŒμŠ€λ₯Ό ν¬ν•¨ν•œ λ©”μ‹œμ§€
    • μƒνƒœ μ½”λ“œ(Status Code): μš”μ²­μ„ μ²˜λ¦¬ν•œ κ²°κ³Ό
    • 처리 μ‚¬μœ (Reason Phrase): μƒνƒœ μ½”λ“œκ°€ λ°œμƒν•œ 이유
  • HTTPS(HTTP on Secure socket layer): TLSλ₯Ό μ΄μš©ν•˜μ—¬ HTTP의 약점을 λ³΄μ™„ν•œ ν”„λ‘œν† μ½œ
  •  

참고 자료

 

Background: HTTP/HTTPS

이 μ½”μŠ€μ—μ„œλŠ” μ›Ή 톡신에 μ“°μ΄λŠ” ν”„λ‘œν† μ½œμΈ HTTP와 HTTPS에 λŒ€ν•΄ μ„€λͺ…ν•©λ‹ˆλ‹€.

dreamhack.io

μ°Έκ³  이미지