HTTPλ 리μμ€λ€μ κ²μ¬κΈ° κ°μ μ΄μ©ν΄ λΉκ΅ν¨μΌλ‘μ¨ μ±κ³΅νμ μ§λΌλ μμ²μ κ²°κ³Όκ° λ³κ²½λ μ μλ μ‘°κ±΄λΆ μμ²μ 컨μ μ κ°κ³ μλ€. μ‘°κ±΄λΆ μμ²μ μΊμλ₯Ό κ°±μ ν λ, λ€μ΄λ‘λλ₯Ό μ΄μ΄ν λ, μλ² μμ λ¬Έμλ₯Ό μ λ‘λ/μμ ν λ μ μ©νλ€.
μμΉ
HTTP μ‘°κ±΄λΆ μμ²μ νΉμ ν€λ κ°μ μμ‘΄νμ¬ κΈ°μ‘΄κ³Όλ λ€λ₯΄κ² μ€νλλ μμ²μ΄λ€. μ΄ ν€λλ€μ μ μ 쑰건μ μ μνκ³ μλλ°, μμ²μ κ²°κ³Όλ μ μ 쑰건μ μΌμΉ μ¬λΆμ λ°λΌ λ¬λΌμ§λ€.
μ‘°κ±΄λΆ μμ²μ μμ² λ©μλ κ·Έλ¦¬κ³ μ μ 쑰건μ μν΄ μ¬μ©λλ ν€λ μ§ν©μ μν΄ μ μλλ€.
GET
κ³Ό κ°μ safe λ©μλμ κ²½μ°, μ€μ§ μ°κ΄λμ΄ μλ κ²½μ°μλ§ μ‘°κ±΄λΆ μμ²μ΄ νμ νλλ° μ¬μ©λ μ μμ΄ λμνμ μλΌκ² λλ€.PUT
μ κ°μ unsafe λ©μλλ€μ κ²½μ°, κ·Έ μμ²μ μλ³Έ λ¬Έμκ° μλ²μ μ μ₯λμ΄ μλ κ²κ³Ό λμΌν κ²½μ°μλ§ μ‘°κ±΄λΆ μμ²μ΄ λ¬Έμ μ λ‘λμ μ¬μ©λ μ μλ€.
κ²μ¬κΈ°
λͺ¨λ μ‘°κ±΄λΆ μμ²λ€μ μλ² μμ μ μ₯λμ΄ μλ 리μμ€κ° νΉμ λ²μ κ³Ό μΌμΉνλμ§λ₯Ό κ²μ¬νλ €κ³ νλ€. λ°λΌμ μ‘°κ±΄λΆ μμ²μ 리μμ€μ λ²μ μ λͺ μν νμκ° μμ΅λλ€. μ 체 리μμ€λ₯Ό λ°μ΄νΈ λ λ°μ΄νΈλ‘ λΉκ΅νλ κ²μ λΆκ°λ₯νκΈ° λλ¬Έμ μμ²μ λ²μ μ λ»νλ κ°μ ν¨κ» μ μ‘νλ€: μ΄ κ°μ κ²μ¬κΈ°λΌκ³ λΆλ₯Έλ©° λ€μμ λ μ’ λ₯κ° μ‘΄μ¬νλ€:
- last-modified λ μ§: λ¬Έμμ μ΅μ’ μμ μΌμ
- entity tag (etag): κ° λ²μ μ κ³ μ νκ² λνλ΄λ μ½μ μ μλ λ¬Έμμ΄
λμΌ λ¦¬μμ€μ λ²μ λΉκ΅λ κ°ν κ²μ¬μ μ½ν κ²μ¬λ‘ λλμ΄μ§λ€. Last-Modified
μ ETagλ κ²μ¬μ λ μ’
λ₯λ₯Ό λͺ¨λ μ§μνλ€(κ²μ¬κΈ°κ° μλ² μμμ ꡬνλλ 볡μ‘λλ λ§€μ° λ€μνλ€). HTTPλ κΈ°λ³Έμ μΌλ‘ κ°ν κ²μ¬λ₯Ό μ¬μ©νλ©°, μ½ν κ²μ¬κΈ°κ° μ¬μ©λ μ μλ κ²½μ°μλ W/
λ₯Ό λΆμ¬ μ΄λ₯Ό λͺ
μνλ€.
κ°ν κ²μ¬
κ°ν κ²μ¬λ 리μμ€κ° λΉκ΅νλ €λ λ€λ₯Έ 리μμ€μ λ°μ΄νΈ λ λ°μ΄νΈλ‘ λμΌνμ§λ₯Ό 보μ₯νλ€. μλ₯Ό λ€μ΄ λ€μ΄λ‘λλ₯Ό μ΄μ΄ν λ μ¬μ©λλ€. μ‘°κ±΄λΆ ν€λμ λν΄μ μ무μ μ΄λ©°, λ€λ₯Έ ν€λλ€μ λν΄μλ κΈ°λ³Έκ°μ΄λ€. κ°ν κ²μ¬λ λ§€μ° μ격νκ³ μλ² λ 벨μμ 보μ₯νκΈ°λ λ§€μ° μ΄λ €μΈ μλ μμΌλ, λλ‘λ μ±λ₯μ μμ€μ κ°μνλλΌλ μ΄λ€ κ²½μ°μλ λ°μ΄ν° 무μμ€μ 보μ₯νλ€. Last-Modified
λ§μ μ΄μ©ν΄ κ°ν κ²μ¬λ₯Ό νκΈ°λ μ΄λ ΅λ€. λ³΄ν΅ λ¦¬μμ€μ MD5 ν΄μ(νΉμ μ λλ¬Ό)λ₯Ό κ°μ§κ³ ETag
λ₯Ό μ¬μ©νλ€.
μ½ν κ²μ¬
μ½ν κ²μ¬λ κ°ν κ²μ¬μ λ¬λ¦¬ λ 리μμ€κ° μ μ¬ν 컨ν μΈ λ₯Ό κ°μ§κ³ μμΌλ©΄ λ λ¬Έμμ λ²μ μ΄ λμΌνλ€κ³ κ°μ£Όνλ€. μλ₯Ό λ€μ΄, κΈ°μ‘΄μ νμ΄μ§μμ λ μ§ νΉμ κ΄κ³ λ§ λ€λ₯Έ νμ΄μ§κ° μλ€κ³ κ°μ ν λ, κ·Έ νμ΄μ§λ κ°ν κ²μ¬μμλ λ€λ₯΄λ€κ³ νλ¨λκ² μ§λ§, μ½ν κ²μ¬μμλ κΈ°μ‘΄μ νμ΄μ§μ λμΌνλ€κ³ κ°μ£Όλ μ μλ€. μ½ν κ²μ¬λ₯Ό λ§λ€μ΄λ΄λ etag 체κ³λ₯Ό μΈμ°λ κ²μ νμ΄μ§μ μμλ€μ μ€μμ± μΈμ§λ₯Ό λμ΄λ€μ΄λ μκ°λΆν° 볡μ‘ν΄μ§ μ μμ§λ§, μΊμ± μ±λ₯μ μ΅μ ννλλ° μ μ©νλ€.
μ‘°κ±΄λΆ ν€λ
μ‘°κ±΄λΆ ν€λλ μ‘°κ±΄λΆ μμ²μ μ΄λμ΄ λΈλ€.
If-Match
: μκ²©μ§ λ¦¬μμ€μETag
κ° μ΄ ν€λμ λμ΄λ κ²κ³Ό μΌμΉνλ€λ©΄ μ±κ³΅If-None-Match
If-Modified-Since
: μ격μ§μ 리μμ€μLast-Modified
λ μ§κ° μ΄ ν€λ λ΄μ μ£Όμ΄μ§ κ²λ³΄λ€ μ’ λ μ΅κ·ΌμΈ κ²½μ° μ±κ³΅If-Unmodified-Since
If-Range
: νλμ λ¨μΌ etag νΉμ νλμ λ μ§λ§μ κ°μ§ μ μλ€. μ€ν¨νλ©΄ λ²μ μμ²μ΄ μ€ν¨νκ³ , 206 Partial Content μλ΅ λμ 200 OKκ° μμ ν 리μμ€μ ν¨κ» μ μ‘λ κ²μ΄λ€.
μ μ€ μΌμ΄μ€
μΊμ κ°±μ
- μΊμκ° λΉμ΄ μκ±°λ μλ κ²½μ°, μμ²λ 리μμ€λ
200
OK
μ μνλ‘ νμ λλ€. 리μμ€μ ν¨κ», κ²μ¬κΈ°κ° ν€λ λ΄μ μ μ‘λ©λλ€. κ²μ¬κΈ°λ ν΄λΉ 리μμ€μ ν¨κ» μΊμλκ³ , μΊμκ° μ μ νμ§ μκ² λμμ λ μ‘°κ±΄λΆ μμ²μ λ§λ€μ΄ λ΄λ λ° μ¬μ©λ κ²μ΄λ€. - μΊμκ° μ μ ν λμμλ, μ΄λ€ μμ²λ λ°κΈλμ§ μλλ€.
- μΊμκ° μ μ νμ§ μκ² λλ©΄, ν΄λΌμ΄μΈνΈλ μΊμλ κ°μ μ§μ μ¬μ©νμ§ μκ³ ,
If-Modified-Since
μIf-Match
ν€λμ νλΌλ―Έν°λ‘ μ¬μ©λλ κ²μ¬κΈ°κ°μ μ΄μ©ν΄ μ‘°κ±΄λΆ μμ²μ μ μ‘νλ€.- 리μμ€κ° λ³κ²½λμ§ μμλ€λ©΄, μλ²λ
304
Not Modified
μλ΅μ νμ νκ³ , μ΄λ μΊμλ₯Ό λ€μ μ μ ν κ²μΌλ‘ λ§λ€μ΄μ£Όλ©°, ν΄λΌμ΄μΈνΈλ μΊμλ 리μμ€λ₯Ό μ¬μ©νκ² λλ€. μΆκ°μ μΈ μλ΅/μμ² μλ³΅μ΄ μ΄λ£¨μ΄μ§μ§λ§, μ°κ²°μ ν΅ν΄ λ€μ μ 체 리μμ€λ₯Ό λ°λ κ²λ³΄λ€λ ν¨μ¨μ μ΄λ€. - 리μμ€κ° λ³κ²½λμλ€λ©΄, μλ²λ 리μμ€μ μλ‘μ΄ λ²μ κ³Ό ν¨κ»,
200
OK
μλ΅μ νμ νλ€.
- 리μμ€κ° λ³κ²½λμ§ μμλ€λ©΄, μλ²λ
μ΄ λ©μ»€λμ¦μμλ λͺ¨λ λΈλΌμ°μ κ° μΊμλ₯Ό κ΄λ¦¬νκ³ μκ³ , μ‘°κ±΄λΆ μμ²μ 보λ΄, μΉ κ°λ°μλ μΆκ°μ‘°μΉλ₯Ό μ·¨ν νμκ° μλ€.
λΆλΆ λ€μ΄λ‘λμ ν΅ν©
νμΌλ€μ λΆλΆμ μΈ λ€μ΄λ‘λλ μ΄μ λμμ κ³μνκ² μ΄μ΄μ£Όλ HTTPμ κΈ°λ₯μΌλ‘, μ΄λ―Έ λ°μλμ μ 보λ₯Ό μ μ§ν¨μΌλ‘μ¨ λμνκ³Ό μκ°μ μ μ½ν΄μ€λ€. λΆλΆμ μΈ λ€μ΄λ‘λλ₯Ό μ§μνλ μλ²λ Accept-Ranges
ν€λλ₯Ό 보λμΌλ‘μ¨ μ΄λ₯Ό μλ¦°λ€. ν΄λΌμ΄μΈνΈλ μμ§ μ μ‘λ°μ§ λͺ»ν λ²μμ ν¨κ» Ranges
μ μ μ‘νμ¬ λ€μ΄λ‘λλ₯Ό μ΄μ΄λκ° μ μλ€.
μ΄ μμΉμ κ°λ¨νμ§λ§ ν κ°μ§ λ¬Έμ μ μ΄ μλ€: λ€μ΄λ‘λλ 리μμ€κ° λ λ€μ΄λ‘λ μ¬μ΄μ μμ λ κ²½μ°, μμ λ°λ λ²μλ 리μμ€μ λ κ°μ μλ‘ λ€λ₯Έ λ²μ κ³Ό μμνκ² λ κ²μ΄λ©° μ΅μ’ μ μΈ λ¬Έμλ μ€μΌλ κ²μ΄λ€.
μ΄λ₯Ό λ°©μ§νκΈ° μν΄ μ‘°κ±΄λΆ μμ²μ΄ μ¬μ©λλλ°, λ κ°μ§ λ°©λ²μ΄ μλ€.
If-Modified-Since
μIf-Match
ν€λλ₯Ό μ¬μ©νλ λ°©λ²: μ μ μ‘°κ±΄μ΄ μ€ν¨ν κ²½μ° μλ²λ μ€λ₯λ₯Ό λ°ννκ³ , ν΄λΌμ΄μΈνΈλ λ€μ΄λ‘λλ₯Ό μ²μλΆν° λ€μ μμνλ€. κ·Έλ¬λΌ μ΄ λ°©λ²μ μΆκ°μ μΈ μλ΅/μμ² κ΅νμ νμλ‘ νκ³ , μ΄λ μ±λ₯ κ°μμ μμΈμ΄ λλ€.- HTTPλ μ΄κ²μ νΌνκΈ° μν νΉλ³ν ν€λμΈ
If-Range
λ₯Ό κ°μ§κ³ μλ€.If-Range
λ₯Ό μ¬μ©ν κ²½μ° λ¦¬μμ€κ° λ³κ²½λμμ λ 1λ²μ²λΌ μλ²μμ μ€λ₯λ₯Ό λ°ννκ³ ν΄λΌμ΄μΈνΈμμ λ€μ 리μμ€ μμ²μ νλ κ³Όμ μ΄ μλ΅λλ€. ν΄λΌμ΄μΈνΈκ° λ³κ²½ν μ λ°λ‘ μ²μλΆν° λ€μ΄λ‘λλ₯Ό μμνλ€.
μ΅μ νλ μ κΈμΌλ‘ μ λ°μ΄νΈ μμ€ λ¬Έμ νΌνκΈ°
PUT
λ©μλλ₯Ό μ΄μ©ν΄ μ격 λ¬Έμλ₯Ό κ°±μ νλ κΈ°λ₯μ ꡬνν μ μλ€. ν΄λΌμ΄μΈνΈλ μλ³Έ νμΌμ μ½μ΄λ€μΈ ν κ·Έκ²μ μμ νκ³ μ΅μ’
μ μΌλ‘ μλ²λ‘ μμ λ νμΌμ λ΄λ³΄λΈλ€.
λ¬Έμ λ νλμ ν΄λΌμ΄μΈνΈκ° 리μμ€μ μλ‘μ΄ λ³΅μ¬λ³Έμ μ§μμ μΌλ‘ μμ νκ³ μλ λμμλ, λλ²μ§Έ ν΄λΌμ΄μΈνΈκ° λμΌν 리μμ€λ₯Ό λ΄λ €λ°κ³ μμ μ μμ λ΄μμ λμΌν μμ μ ν μ μλ€. μ΄λ€ ν΄λΌμ΄μΈνΈμ λ³κ²½ μ¬νμ΄ μ μ§λ μ§λ 컀λ°νλ μμ , ν΄λΌμ΄μΈνΈμ μλ²μ μ±λ₯, ν΄λΌμ΄μΈνΈμμ λ¬Έμλ₯Ό μμ νλ μλμ μν΄μλ λ¬λΌμ§λ€. μ€μν κ²μ λ°μλ€μ¬μ§ ν΄λΌμ΄μΈνΈμ λ³κ²½ μ¬νμΌλ‘ λͺ¨λ λ³κ²½λλ€λ κ²μ΄λ€. μ΄κ²μ race condition(κ²½μμν)λΌκ³ νλ©° κ°μ§νκ³ λλ²κΉ νκΈ° μ΄λ €μ΄ λΆνμ€ν λμμ μ λ°νλ€.
λ ν΄λΌμ΄μΈνΈ μ€ νλλ₯Ό λΆνΈνκ² λ§λ€μ§ μκ³ λ μ΄λ₯Ό ν΄κ²°ν μ μλ λ°©λ²μ μλ€. λ€λ§ μ λ°μ΄νΈ μμ€κ³Ό κ²½μ μνλ νΌν μλ μλ€. μ‘°κ±΄λΆ μμ²μ μ΅μ ν μ κΈ μκ³ λ¦¬μ¦μ ꡬνν μ μλλ‘ ν©λλ€. μ κΈ λ©μ»€λμ¦μ ν΄λΌμ΄μΈνΈλ€μ΄ 리μμ€μ 볡μ¬λ³Έλ€μ κ°κ³ λ‘컬μμ κ·Έκ²μ μμ νλ©° 첫λ²μ§Έ ν΄λΌμ΄μΈνΈκ° κ·Έ μμ λ λ΄μ©μ μ±κ³΅μ μΌλ‘ μ μΆνκ³ λμ μ΄μ λ²μ μ΄ λ 리μμ€κ° κ±°μ λλλ‘ νμ¬ λͺ¨λ μ λ°μ΄νΈκ° μμ°¨μ μΌλ‘ μ΄λ£¨μ΄μ§ μ μλλ‘ νμ¬ λμμ±μ μ μ΄ν μ μλλ‘ ν΄μ€λ€.
μ΄ λ©μ»€λμ¦μ If-Match
λ If-Unmodified-Since
ν€λλ₯Ό μ¬μ©ν΄ ꡬννλ€. etagκ° μλ³Έ νμΌκ³Ό μΌμΉνμ§ μκ±°λ νΉμ νμΌμ μμ ν μ΄νμ νμΌμ΄ μμ λ κ²½μ°, ν΄λΉ λ³κ²½ μ¬νμ 412 Precondition Failed
μ€λ₯μ ν¨κ» κ±°μ λ κ²μ΄λ€. μ΄ν νμ¬ κ°μ₯ μ΅μ μ λ²μ μΌλ‘λΆν° λ€μ μμνλλ‘ ν΄λΌμ΄μΈνΈμκ² μλ €μ£Όκ±°λ βdiffβλ₯Ό 보μ¬μ£Όκ³ λ³κ²½λ λ΄μ©μ μ μ§νλλ‘ μ νν μ μκ² λμμ μ€ μ μλ€.
diff: λ κ°μ νμΌ κ° μ°¨μ΄μ λν μ 보λ₯Ό μΆλ ₯νλ νμΌ λΉκ΅ μ νΈλ¦¬ν°μ΄λ€. μΌλ°μ μΌλ‘ νλμ νμΌ λ²μ κ³Ό λμΌν νμΌμ λ€λ₯Έ λ²μ κ°μ λ³κ²½ μ¬νμ 보μ¬μ£Όλ λ° μ°μΈλ€. diffλ λ¬Έμ νμΌμ μ€ μ¬μ΄ λ³κ²½μ¬νμ 보μ¬μ€λ€.
리μμ€μ 첫λ²μ§Έ μ λ‘λ λ€λ£¨κΈ°
λ ν΄λΌμ΄μΈνΈκ° μ
λ°μ΄νΈλ₯Ό λμμ μ€ννλ €κ³ νλ κ²½μ°λ κ²½μμνμ΄λ€. μ΄λ₯Ό λ°©μ§νκΈ° μν΄ μ‘°κ±΄λΆ μμ²μ μ¬μ©ν μ μλ€: μ΄λ€ etagλ μ§ λνλ΄λ '*'
λΌκ³ νλ νΉλ³ν κ°μ If-None-Match
μ μΆκ°νμ¬, 리μμ€κ° μ΄μ μ μ‘΄μ¬νμ§ μμ κ²½μ°μλ§ μμ²μ΄ μ±κ³΅νκ² ν μ μλ€.