HTTP
HTTP(Hypertext Transfer Protocol)λ μΉ μλ²μ ν΄λΌμ΄μΈνΈ κ°μ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°κΈ° μν ν΅μ νλ‘ν μ½μ
λλ€.
HTTP(Hypertext Transfer Protocol)λ μΉ μλ²μ ν΄λΌμ΄μΈνΈ κ°μ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°κΈ° μν ν΅μ νλ‘ν μ½μ
λλ€. ν΄λΌμ΄μΈνΈκ° μΉ νμ΄μ§λ 리μμ€λ₯Ό μμ²νλ©΄, μλ²λ κ·Έμ λν μλ΅μ μ 곡ν©λλ€. HTTPλ μ£Όλ‘ μΉ λΈλΌμ°μ μ μΉ μλ² κ°μ ν΅μ μ μ¬μ©λλ©°, HTML λ¬Έμ, μ΄λ―Έμ§, λμμ λ±μ 리μμ€λ₯Ό μ μ‘νλ λ° μ¬μ©λ©λλ€.
HTTPλ ν΄λΌμ΄μΈνΈ-μλ² λͺ¨λΈμ κΈ°λ°μΌλ‘ λμν©λλ€. ν΄λΌμ΄μΈνΈλ HTTP μμ² λ©μμ§λ₯Ό 보λ΄κ³ , μλ²λ μ΄λ₯Ό λ°μ μ²λ¦¬ν ν HTTP μλ΅ λ©μμ§λ₯Ό ν΄λΌμ΄μΈνΈμκ² λ°νν©λλ€. μμ² λ©μμ§μλ μμ²νλ 리μμ€μ κ²½λ‘, λ©μλ(GET, POST, PUT λ±), ν€λ μ 보 λ±μ΄ ν¬ν¨λ μ μμ΅λλ€. μλ΅ λ©μμ§μλ μν μ½λ, ν€λ μ 보, μμ²ν 리μμ€μ λ΄μ© λ±μ΄ ν¬ν¨λ©λλ€.
HTTPλ μνλ₯Ό μ μ§νμ§ μλ(stateless) νλ‘ν μ½μ΄κΈ° λλ¬Έμ, κ°κ°μ μμ²μ λ
립μ μΌλ‘ μ²λ¦¬λ©λλ€. μ΄λ μλ²κ° ν΄λΌμ΄μΈνΈμ μνλ₯Ό κΈ°μ΅νμ§ μκ³ , ν΄λΌμ΄μΈνΈμμ ν΅μ μ΄ κ°κ°μ μμ²μ λν΄ μλ‘κ² μ΄λ£¨μ΄μ§μ μλ―Έν©λλ€. κ·Έλ¬λ―λ‘ ν΄λΌμ΄μΈνΈκ° μΈμ¦ μ 보λ₯Ό μ 곡ν΄μΌ ν κ²½μ°, λ§€λ² μΈμ¦ μ 보λ₯Ό ν¨κ» μ μ‘ν΄μΌ ν©λλ€.
HTTPλ 보μμ μν΄ HTTPS(Hypertext Transfer Protocol Secure)λ‘ νμ₯λ μ μμ΅λλ€. HTTPSλ SSL(Secure Socket Layer) λλ TLS(Transport Layer Security)λ₯Ό μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό μνΈννκ³ , μμ ν ν΅μ μ μ 곡ν©λλ€.
Overview
β’
HTTP λ©μμ§
β’
μμ² λ©μμ§
β¦
μμ² λ©μλ
β¦
μμ² ν€λ
β’
μλ΅ λ©μμ§
β¦
μνμ½λ
β¦
μλ΅ ν€λ
β’
λ°μ΄ν° νμ
β¦
JSON
β¦
XML
β’
HTTP μμ² λ©μμ§μ μλ° μΉκ°λ°
β’
Spring Boot μμ HTTP μμ² λ³΄λ΄κΈ°
β’
RestTemplate, WebClient μ μ΄μ©ν HTTP μμ² μ€μ΅
HTTP λ©μμ§
ν΄λΌμ΄μΈνΈμ μλ² κ°μ μ μ‘λλ λ°μ΄ν°
μμ²κ³Ό μλ΅μ ννλ₯Ό κ°μ§λ©° μμ μ€(start line), ν€λ(header) λ° μ νμ μΈ λ³Έλ¬Έ(body)μΌλ‘ ꡬμ±λμ΄ μμ΅λλ€.
μμ² λ©μμ§
ν΄λΌμ΄μΈνΈμμ μλ²λ‘ μ μ‘λλ λ°μ΄ν°
HTTP μμ² λ©μμ§λ μΌλ°μ μΌλ‘ ν
μ€νΈ κΈ°λ°μ λ¬Έμμ΄λ‘ ννλ©λλ€.
μμ² λ©μμ§ κ΅¬μ±
1.
HTTP λ©μλ (HTTP Method)
: μμ²μ λͺ©μ μ λνλ΄λ λ©μλ. κ°μ₯ μΌλ°μ μΈ λ©μλλ GET, POST, PUT, DELETE, PATCH λ±μ΄ μμ΅λλ€. κ°κ°μ λ©μλλ μλ²μ μνν μμ
μ μ§μ ν©λλ€.
2.
URL (Uniform Resource Locator)
: μμ² λμμ μ£Όμ. ν΄λΌμ΄μΈνΈκ° μλ²μμ 리μμ€λ₯Ό μμ²νλ κ³³μ μ£Όμλ₯Ό μ§μ ν©λλ€.
3.
ν€λ (Headers)
: μΆκ° μ 보λ₯Ό ν¬ν¨νλ λΆλΆ. μ΄ μ 보λ ν΄λΌμ΄μΈνΈ λ° μλ² κ° ν΅μ μ μ μ΄νκ³ κ΅¬μ±ν©λλ€. Content-Type, Accept, Authorization λ±μ΄ νν ν€λ κ°λ€μ
λλ€.
4.
λ³Έλ¬Έ (Body)
: POST, PUT, PATCHμ κ°μ λ©μλμμ μ λ¬λλ λ°μ΄ν°. μ΄λ μμ² λ©μμ§μ μ€μ λ°μ΄ν°λ₯Ό ν¬ν¨νλ©°, μλ₯Ό λ€μ΄ HTML μμ λ°μ΄ν°, JSON, XML λλ νμΌκ³Ό κ°μ νμμΌλ‘ μ μ‘λ μ μμ΅λλ€.
μμ² λ©μμ§ μμ
GET /path/to/resource HTTP/1.1
Host: www.example.com
Content-Type: application/json
{ "name": "aloha", "age": 20 }
VB.Net
볡μ¬
Start Line κ³Ό Headers μ¬μ΄, κ·Έλ¦¬κ³ Headers μ Body μ¬μ΄μ 곡백 μ€μ΄ μ‘΄μ¬ν©λλ€.
μμ² λ©μλ
ν΄λΌμ΄μΈνΈκ° μλ²μκ² μννκΈΈ μνλ λμμ μ§μ νλ HTTP νλ‘ν μ½μ λͺ
λ Ή
μμμ μμ²νλ λ°©μ κ°μ κ²½λ‘λ‘ μμ²νλλΌλ, μμ² λ©μλκ° λ€λ₯΄λ©΄ λ€λ₯Έ μμ²μΌλ‘ μΈμ
μμ² λ©μλ μ’ λ₯
HTTP λ©μλ | μ€λͺ
|
GET | μλ²λ‘λΆν° μμμ κ°μ Έμ€κΈ°λ₯Ό μμ²νλ λ°©μ |
POST | μλ²μ λ°μ΄ν° μ
λ ₯μ μμ²νλ λ°©μ |
PUT | μλ²μ λ°μ΄ν° λ³κ²½μ μμ²νλ λ°©μ |
DELETE | μλ²μ λ°μ΄ν° μμ λ₯Ό μμ²νλ λ°©μ |
OPTIONS | ν΄λΉ URLλ‘ μ§μνλ μμ² λ©μλ μ’
λ₯λ₯Ό νμΈνλ λ°©μ |
HEAD | λ©μμ§μ ν€λλ₯Ό μμ²νλ λ°©μ (μλ΅ λ©μμ§μ bodyκ° μμ) |
TRACE | κ²½λ‘ μ‘°μ¬λ₯Ό μμ²νλ λ°©μ |
μμ² ν€λ
ν΄λΌμ΄μΈνΈκ° HTTP λ©μμ§μ ν¬ν¨μν€λ λΆκ°μ μΈ μ 보
μ£Όμ μμ² ν€λ
HTTP ν€λ | μ€λͺ
|
Content-Type | μμ² λλ μλ΅ λ°λμ λ°μ΄ν° νμμ λνλ
λλ€. |
Accept | ν΄λΌμ΄μΈνΈκ° λ°μλ€μΌ μ μλ μλ΅μ λ―Έλμ΄ νμ
μ μ§μ ν©λλ€. |
Authorization | ν΄λΌμ΄μΈνΈ μΈμ¦ μ 보λ₯Ό μλ²μ μ 곡ν©λλ€. |
User-Agent | μμ²μ 보λ΄λ ν΄λΌμ΄μΈνΈμ μ 보λ₯Ό μ 곡ν©λλ€. |
Cookie | ν΄λΌμ΄μΈνΈμμ μλ²λ‘ μ λ¬λλ μΏ ν€λ₯Ό λνλ
λλ€. |
Host | μμ²μ λ°λ μλ²μ νΈμ€νΈλͺ
κ³Ό ν¬νΈλ²νΈλ₯Ό λνλ
λλ€. |
Referer | νμ¬ μμ²λ μμμ μ°Έμ‘°ν URLμ μ 곡ν©λλ€. |
Cache-Control | μΊμ λμμ μ μ΄νκΈ° μν μ§μμ¬νμ ν¬ν¨ν©λλ€. |
μλ΅ λ©μμ§
μλ²μμ ν΄λΌμ΄μΈνΈλ‘ μ μ‘λλ λ°μ΄ν°
HTTP μλ΅ λ©μμ§λ μΌλ°μ μΌλ‘ ν
μ€νΈ κΈ°λ°μ λ¬Έμμ΄λ‘ ννλ©λλ€.
μλ΅ λ©μμ§ κ΅¬μ±
1.
Start Line (μμ μ€)
: HTTP μλ΅μ μν μ½λμ μν ν
μ€νΈκ° ν¬ν¨λ©λλ€. μν μ½λλ μμ²μ μ±κ³΅ λλ μ€ν¨λ₯Ό κ°λ¦¬ν€λ μ«μ μ½λμ
λλ€.
2.
ν€λ (Headers)
: μΆκ° μ 보λ₯Ό ν¬ν¨νλ λΆλΆ. ν΄λΌμ΄μΈνΈμ μλ² κ°μ ν΅μ μ μ μ΄νκ³ κ΅¬μ±ν©λλ€. Date, Content-Type, Server λ±μ΄ νν ν€λ κ°λ€μ
λλ€.
3.
λ°λ (Body)
: μμ²μ λν μ€μ μλ΅ λ°μ΄ν°. HTML νμ΄μ§, JSON, XML, μ΄λ―Έμ§ λ± λ€μν νμμ΄ κ°λ₯ν©λλ€.
μλ΅ λ©μμ§ μμ
HTTP/1.1 200 OK
Date: Sat, 29 Oct 2023 12:00:00 GMT
Content-Type: application/json
{ "message": "Response received successfully" }
VB.Net
볡μ¬
Start Line κ³Ό Headers μ¬μ΄, κ·Έλ¦¬κ³ Headers μ Body μ¬μ΄μ 곡백 μ€μ΄ μ‘΄μ¬ν©λλ€.
μνμ½λ
μλ΅ λ©μμ§μ λ΄κΈ°λ, HTTP μμ²μ μ±κ³΅, μ€ν¨ λλ μ²λ¦¬ μνλ₯Ό λνλ΄λ μΈ μ리 μ«μ
HTTP μν μ½λ | μ€λͺ
|
200 (OK) | μμ²μ΄ μ±κ³΅νμμ λνλ
λλ€. |
201 (Created) | μλ‘μ΄ λ¦¬μμ€κ° μ±κ³΅μ μΌλ‘ μμ±λμμμ λνλ
λλ€. |
400 (Bad Request) | μμ²μ΄ μλͺ»λμμμ λνλ
λλ€. |
401 (Unauthorized) | μΈμ¦λμ§ μμμμ λνλ
λλ€. |
403 (Forbidden) | μ κ·Όμ΄ κΈμ§λμμμ λνλ
λλ€. |
404 (Not Found) | μμ²ν 리μμ€κ° λ°κ²¬λμ§ μμμμ λνλ
λλ€. |
500 (Internal Server Error) | μλ²μμ μ€λ₯κ° λ°μνμμ λνλ
λλ€. |
503 (Service Unavailable) | μλ²κ° μΌμμ μΌλ‘ μλΉμ€λ₯Ό μ 곡νμ§ λͺ»ν¨μ λνλ
λλ€. |
μλ΅ ν€λ
μλ²κ° HTTP λ©μμ§μ ν¬ν¨μν€λ λΆκ°μ μΈ μ 보
HTTP μλ΅ ν€λ | μ€λͺ
|
Content-Type | μλ΅ λ°λμ λ°μ΄ν° νμμ λνλ
λλ€. |
Content-Length | μλ΅ λ°λμ κΈΈμ΄λ₯Ό λ°μ΄νΈ λ¨μλ‘ λνλ
λλ€. |
Server | μλ²μ λν μ 보λ₯Ό λνλ
λλ€. |
Date | μλ΅μ΄ λ§λ€μ΄μ§ λ μ§μ μκ°μ λνλ
λλ€. |
Set-Cookie | ν΄λΌμ΄μΈνΈμκ² μΏ ν€λ₯Ό μ€μ νλλ° μ¬μ©λ©λλ€. |
Cache-Control | μΊμ λμμ μ μ΄νκΈ° μν μ§μμ¬νμ ν¬ν¨ν©λλ€. |
Expires | 리μμ€μ λ§λ£μΌμ λνλ
λλ€. |
Last-Modified | 리μμ€μ λ§μ§λ§ μμ μΌμ λνλ
λλ€. |
λ°μ΄ν° νμ
JSON (JavaScript Object Notation)
JSONμ μλ°μ€ν¬λ¦½νΈ κ°μ²΄ νκΈ°λ²μΌλ‘ νν μ¬μ©λλ λ°μ΄ν° νμμ
λλ€. κ°λ
μ±μ΄ μ’κ³ , λ°μ΄ν° ꡬ쑰λ₯Ό λνλ΄κΈ° μ½κ³ , λ€μν νλ‘κ·Έλλ° μΈμ΄μμ μ¬μ©ν μ μλ λ²μ© νμμ
λλ€. JSONμ ν€-κ° μμΌλ‘ μ΄λ£¨μ΄μ§ κ°μ²΄μ λ°°μ΄μ μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό ννν©λλ€.
μμ:
{
"name": "John",
"age": 30,
"city": "New York"
}
JSON
볡μ¬
XML (eXtensible Markup Language)
XMLμ νΉμ λͺ©μ μ λ§κ² νκ·Έλ‘ λλ¬μΈμΈ λ°μ΄ν°λ₯Ό νννκΈ° μν λ§ν¬μ
μΈμ΄μ
λλ€. λ°μ΄ν°λ₯Ό κ³μΈ΅ κ΅¬μ‘°λ‘ ννν μ μμΌλ©°, νκ·Έλ μ¬μ©μκ° μ μν μ μλ μ μ°ν ꡬ쑰λ₯Ό κ°κ³ μμ΅λλ€. XMLμ μΉ μλΉμ€ ν΅μ , λ°μ΄ν° μ μ₯ λ° κ΅νμ λ리 μ¬μ©λ©λλ€.
μμ:
<person>
<name>John</name>
<age>30</age>
<city>New York</city>
</person>
XML
볡μ¬