MIME νμ κ°λ λ° νμμ΄μ
MIMEμ Multipurpose Internet Mail Extensions (λ€λͺ©μ μΈν°λ· λ©μΌ νμ₯) μ΄ νλ€μμΈλ° μ΄λ¦μμ μ μ μλ―μ΄ μλλ μ μλ©μΌ(μ΄λ©μΌ) μμ€ν μ μν΄μ λ§λ€μ΄μ§ κ°λ μ΄λ€. μ μμ°νΈμ 7λΉνΈ ASCII μ½λλ₯Ό μ¬μ©νμ¬ μ μ‘λκΈ° λλ¬Έμ λ¬Έμ λ°μ΄ν° μ΄μΈμ λ°μ΄λ리 λ°μ΄ν°(μ΄λ―Έμ§, λμμ, μμ λ±)λ₯Ό μ£Όκ³ λ°μ μ μμλ€. μ΄ λλ¬Έμ μ£Όκ³ λ°μ λ κ·μΉμ μ ν΄μ μ΄λ―Έμ§λ₯Ό κ·μΉμ λ§κ² ASCII μ½λλ‘ λ³ννμ¬ λ³΄λ΄κ³ λ°λ μͺ½μμλ κ·μΉμ λ§κ² λ€μ ASCII μ½λμμ λ°μ΄λ리 λ°μ΄ν°λ‘ λ³ννλλ‘ ν΄μ μ£Όκ³ λ°μλ€. μ΄ λ μ¬μ©λ κ·μΉμ΄ λ°λ‘ MIME typeμ΄λ€. MIME typeμ ν΅ν΄ ASCII μ½λλ§ μ μ‘ν μ μμλ μ μμ°νΈμ νκ³λ₯Ό λμ μ μμλ€. μ μμ°νΈμμ μλ μ λμν΄μ κ·Έλ°μ§ HTTPμμλ λ©ν°λ―Έλμ΄ μ½ν μΈ λ₯Ό μν΄ λΌλ²¨μ λΆμ΄λ μ©μΌλ‘ μ±νλμλ€.
μ¬μ€ MIME νμ μ μ½κ² λ§ν΄μ μΈμ½λ© λ°©μμ΄λΌκ³ 보면 λλ€. μ€μ λ‘ base64 μΈμ½λ©μ μ¬μ©νκ³ μλ€. MIME νμ μ΄μ μ μ¬μ©λλ λ°©μμ΄ μλλ° UUEncodeλΌλ λ°©μμ΄λ€. νμ§λ§ μ΄ μΈμ½λ© λ°©μμ νμΌμ μν κ·Έλλ‘ μ μ‘ν μ μκ³ , 맨 λμ κ³΅λ°±μ΄ ν¬ν¨λ λ°μ΄ν°λ 곡백μ λλ½νλ€λ λ₯ λ¨μ μ΄ λ§μλ€. λ¨μ μ 보μν΄μ λμ¨ κ²μ΄ MIME νμ μ΄κ³ μμ κ·Έλ¦Όμμ λ³νμ΄λΌκ³ λμ΄μλ λΆλΆμ 보λ΄λ μͺ½μμλ μΈμ½λ©μΌλ‘ 보면 λκ³ λ°λ μͺ½μμλ λμ½λ©νλκ²μΌλ‘ 보면 λλ€.
UUEncode
: λ€νΈμν¬ μμμ μ¬μ©μλ€μ΄λ μμ€ν λ€ κ°μ κ΅νλ νμΌλ€μ μΈμ½λ©νκ³ λμ½λ©νλλ° μ¬μ©λλ μΈκΈ° μλ μ νΈλ¦¬ν°μ΄λ€. μ λμ€ μμ€ν μ¬μ©μλ€κ°μ μ¬μ©μμ λΉλ‘―λμλ€. Unix-to-Unix encodingμ μ€μλ§μ΄λ€. μ λμ€μμ μμλμμ§λ§ λͺ¨λ μ΄μ체μ μμ μ¬μ©κ°λ₯νκ³ μ½κ² ꡬν μ μλ€. κΈ°λ³Έμ μΌλ‘ Uuencodeκ° νλ μΌμ νμΌμ΄λ μ μμ°νΈμ 첨λΆλ¬Όμ λ°μ΄λ리 λλ λΉνΈ μ€νΈλ¦Ό ννμμ 7λΉνΈ μμ€ν€ ν μ€νΈλ‘ λ³ννλ κ²μ΄λ€. ν μ€νΈλ μ€λμ μ μ μλμ΄ λ°μ΄λ리 νμΌμ μ²λ¦¬ν μ μλ μμ€ν μμλ μ μ²λ¦¬λ μ μμΌλ©°, 컀λ€λ νμΌλ€μ μ’ λ μ½κ² μ¬λ¬ λΆλΆμΌλ‘ λλμ΄ μ μ‘ν μ μλ€.
HTTPμμμ MIME νμ
μΈν°λ·μ μμ² κ°μ§ λ°μ΄ν° νμ μ λ€λ£¨κΈ° λλ¬Έμ, HTTPλ μΉμμ μ μ‘λλ λͺ¨λ λ°μ΄ν° κ°κ°μ MIME Typeμ΄λΌλ λ°μ΄ν° ν¬λ§· λΌλ²¨μ λΆμΈλ€. μΉλΈλΌμ°μ λ μλ²λ‘λΆν° λ°μ΄ν°λ₯Ό λ°μ λ, λ€λ£° μ μλ κ°μ²΄μΈμ§ MIME νμ μ ν΅ν΄ νμΈνλ€. λλΆλΆμ μΉ λΈλΌμ°μ λ μ μλ €μ§ νμ μλ°± κ°μ§λ₯Ό λ€λ£° μ μλ€. μ΄λ―Έμ§ νμΌμ 보μ¬μ£Όκ³ , HTML νμΌμ λΆμνκ±°λ ν¬λ§·ν νκ³ , μ€λμ€ νμΌμ μ»΄ν¨ν°μ μ€νΌμ»€λ₯Ό ν΅ν΄ μ¬μνκ³ , νΉλ³ν ν¬λ§·μ νμΌμ λ€λ£¨κΈ° μν΄ μΈλΆ νλ¬κ·ΈμΈ(μννΈμ¨μ΄)μ μ€ννλ€.
λΈλΌμ°μ λ νμΌ νμ₯μκ° μλ MIME μ νμ μ¬μ©νμ¬ URLμ μ²λ¦¬νλ λ°©λ²μ κ²°μ νλ―λ‘ μΉ μλ²κ° μλ΅μ Content-Type ν€λ μ μ¬λ°λ₯Έ MIME μ νμ 보λ΄λ κ²μ΄ μ€μνλ€. μ΄κ²μ΄ μ¬λ°λ₯΄κ² ꡬμ±λμ§ μμΌλ©΄ λΈλΌμ°μ κ° νμΌ λ΄μ©μ μλͺ» ν΄μνκ³ μ¬μ΄νΈκ° μ¬λ°λ₯΄κ² μλνμ§ μμΌλ©° λ€μ΄λ‘λ ν νμΌμ΄ μλͺ» μ²λ¦¬ λ μ μλ€.
MIME νμ ꡬ쑰 λ° μμ
MIME νμ μ μ¬μ (/)μΌλ‘ ꡬλΆλ μ£Ό νμ (primary object type)κ³Ό λΆ νμ (specific subtype)μΌλ‘ μ΄λ£¨μ΄μ§ λ¬Έμμ΄ λΌλ²¨μ΄λ€. μλ₯Ό λ€λ©΄ λ€μκ³Ό κ°λ€.
- HTML λ¬Έμλ text/html λΌλ²¨μ΄ λΆλλ€.
- plain ASCII ν μ€νΈ λ¬Έμλ text/plain λΌλ²¨μ΄ λΆλλ€.
- JPEG μ΄λ―Έμ§λ image/jpeg λΌλ²¨μ΄ λΆλλ€.
- GIF μ΄λ―Έμ§λ image/gif λΌλ²¨μ΄ λΆλλ€.
- μ ν ν΅νμ λμμμ video/quicktime λΌλ²¨μ΄ λΆλλ€.
- λ§μ΄ν¬λ‘μννΈ νμν¬μΈνΈ νλ μ ν μ΄μ νμΌμ application/vnd.ms-powerpoint λΌλ²¨μ΄ λΆλλ€.
μλ°± κ°μ§μ μ μλ €μ§ MIME νμ κ³Ό, κ·Έλ³΄λ€ λ λ§μ μ€νμ© νΉμ νΉμ μ©λμ MIME νμ μ΄ μ‘΄μ¬νλ€.
λ©μΈνμ (μ£Όνμ ) | μ€λͺ | μλΈνμ (λΆνμ ) |
text | ν μ€νΈλ₯Ό νν. | text/plain, text/html, text/css, text/javascript, ... |
image | μ΄λ―Έμ§λ₯Ό νν. | image/gif, image/png, image/jpeg, image/bmp, ... |
video | λμμμ νν. | video/mp4, video/ogg, video/mpeg4-generic, ... |
application | λͺ¨λ μ’ λ₯μ μ΄μ§ λ°μ΄ν°λ₯Ό νν. | application/octet-stream, application/vnd.mspowerpoint, application/xml, application/pdf, application/json, ... |
multipart | μ¬λ¬κ°μ§ νμ μ λ°μ΄ν°λ€μ λμμ μ μ‘ν λ μ¬μ©. | multipart/form-data, multipart/byteranges, ... |
application/octet-stream
μΌλ°μ μΌλ‘ MIME νμ μ λ©μΈνμ κ³Ό μλΈνμ μ 보면 μ§κ΄μ μΌλ‘ μ μ μλλ‘ λ€μ΄λ°μ΄ λμ΄ μμ§λ§ μ₯ν μ΄λΌλ κ°λ μ λͺ¨λ₯΄λ©΄ μμ νμ μ λ¬΄μ¨ ννμΈμ§ μλΏμ§ μλλ€. μ₯ν μ΄λ 8λΉνΈ λ¨μλ₯Ό λ§νλ€. λ°λΌμ μμ νμ μ 8λΉνΈ λ¨μμ λ°μ΄λ리 λ°μ΄ν°λ₯Ό μλ―Ένλ€.
νΉλ³ν ννν μ μλ νλ‘κ·Έλ¨μ΄ μ‘΄μ¬νμ§ μλ λ°μ΄ν°μ κ²½μ° κΈ°λ³Έκ°μΌλ‘ octet-streamμ μ¬μ©νλ€.
multipart/form-data
μΉ κ°λ°μ νλ€λ³΄λ©΄ μμ£Ό λ³Ό μ μλ MIME νμ μ€μ νλμ΄λ€. μΉ κ°λ° μ΄κΈ°μλ MIME νμ μ΄λΌλ μΈμμ΄ μκ³ form νκ·Έμ μμ±μΌλ‘ μ€μ ν΄μ£Όλ κ²μΌλ‘ μκ³ μμλ€. μλμ κ°μ΄ form νκ·Έ μμμ post methodλ‘ μ¬λ¬ λ°μ΄ν°λ₯Ό λ¬Άμ΄μ μ μ‘νλ κ²½μ° μ¬μ©νλ€.
<form action="/inserProfile" method="post" enctype="multipart/form-data">
μ΄λ¦ : <input type="text" name="userName"><br>
μ±λ³ : <input type="checkbox" name="male">λ¨</input>
<input type="checkbox" name="female">μ¬</input><br>
μ¬μ§ : <input type="file" name="profileImage"><br>
<input type="submit" value="μ μ‘">
</form>
μ΄λ¦μ Kim Beom Sooλ‘ λ£κ³ μ±λ³μ 'λ¨'μ 체ν¬ν νμ μ¬μ§μ²¨λΆλ₯Ό A.pngλΌλ νμΌμ 첨λΆν ν μ μ‘νκ² λλ©΄ μλμ κ°μ΄ Content-Typeμ΄ multipart/form-dataλΌλκ²μ΄ λͺ μλκ³ μλΈννΈλ₯Ό ꡬλΆν μ μλ ꡬλΆμ λ¬Έμμ΄μ΄ boundary κ°μΌλ‘ μ£Όμ΄μ§λ©° λ³Έλ¬Έμ΄ κ΅¬μ±λλ€.
Content-Type: multipart/form-data; boundary=Bjwo02D
--Bjwo02D
Content-Disposition: form-data; name="userName"
Kim Beom Soo
--Bjwo02D
Content-Disposition: form-data; name="male"
true
--Bjwo02D
Content-Disposition: form-data; name="profileImage"; filename="A.png"
Content-Type: image/png
(...μ΄λ―Έμ§ λ°μ΄λ리 λ°μ΄ν°...)
--Bjwo02D
(...μλΈννΈκ° λ μλκ²½μ°...)
--Bjwo02D--
μΆκ° MIME Type
MIME Typeμ μ’ λ₯κ° νμΌ νμ₯μ λ§νΌμ΄λ λ§κΈ° λλ¬Έμ μμμ μΈκΈν νμ μΈμλ νμΈνκ³ μΆμ κ²½μ° κ³΅μλ¬Έμλ₯Ό μ°Έκ³ νμ.
μ°Έκ³
- oreilly HTTP μλ²½κ°μ΄λ
- (λΈλ‘κ·Έ) μ½λΌλ¦¬λ₯Ό λμ₯κ³ μ λ£λ λ°©λ²