Content-Type sa web development: ano ito, mga uri ng MIME at kung paano ito gumagana

May-akda: IT Sectr Nai-publish: 2026-03-10 Oras ng pagbabasa: 9 min

Content-Type — ay isang HTTP header na nagpapahiwatig kung sa anong format ipinapadala ang data sa pagitan ng kliyente at server. Kung walang tamang MIME type, hindi maaaring maproseso nang tama ng browser ang tugon: ang text file ay ipinapakita bilang raw code, at ang imahe ay hindi nabubuksan. Ayon sa MDN Web Docs, 2025, ang Content-Type ay sapilitan para sa tamang pagpapadala ng data ng anumang uri sa HTTP protocol at tinutukoy kung paano binibigyang-kahulugan ng tatanggap ang katawan ng mensahe.

Pangunahing

  • Content-Type — HTTP header na tumutukoy sa MIME type ng ipinapadalang data sa katawan ng kahilingan o tugon.
  • MIME type ay binubuo ng pangunahing kategorya at subtype, na pinaghihiwalay ng slash — halimbawa, text/html o application/json.
  • Parameter ng charset ay nagpapahiwatig ng encoding para sa tekstuwal na MIME type, ang pamantayan para sa web ay UTF-8.
  • Kung walang Content-Type ang browser ay nag-a-activate ng MIME sniffing, na humahantong sa mga error sa pagpapakita at mga kahinaan sa seguridad.
  • Ang header na X-Content-Type-Options: nosniff ay nagdi-disable ng paghula ng uri at nagpapataas ng seguridad ng mga web application.

Ano ang Content-Type?

Content-Type — ay isang HTTP header mula sa grupo ng representation headers na nagpapaalam sa tatanggap tungkol sa format ng data sa katawan ng mensahe. Ito ay sapilitan para sa mga kahilingan at tugon ng HTTP na naglalaman ng katawan (body), at kung wala ito ay hindi mabibigyang-kahulugan nang tama ng kliyente ang mga natanggap na byte. Ang browser o mobile application batay sa Content-Type ay pumipili ng parser: para sa text/html ay pinapatakbo ang HTML engine, para sa image/png — PNG decoder, para sa application/json — JSON parser.

Ang halaga ng Content-Type ay isang MIME type — isang pamantayang identifier ng format ng data. Ang acronym na MIME ay nangangahulugang Multipurpose Internet Mail Extensions, dahil ang pamantayang ito ay orihinal na nilikha para sa mga attachment ng email. Gayunpaman, ito ay naging batayan ng HTTP at ginagamit na ngayon sa lahat ng dako — mula sa pagpapadala ng mga web page hanggang sa pagpapalitan ng data sa REST API. Ang bawat MIME type ay binubuo ng dalawang bahagi: isang pangunahing kategorya at isang nagpapalinaw na subtype, na pinaghihiwalay ng slash.

Ang parameter ng charset ay nagpupuno sa Content-Type para sa mga tekstuwal na format. Halimbawa, ang Content-Type: text/html; charset=utf-8 ay nangangahulugan na ang isang HTML document sa UTF-8 encoding ay ipinapadala. Ayon sa IETF RFC 7231, seksyon 3.1.1.5, ang header na Content-Type ay sapilitan para sa mga HTTP message na naglalaman ng katawan, at ang kawalan nito ay binibigyang-kahulugan bilang application/octet-stream o humahantong sa MIME sniffing.

Kasaysayan ng paglitaw ng mga MIME type sa HTTP

Ang HTTP/0.9 protocol, na inilabas noong 1991, ay nagpapadala lamang ng mga HTML page, kaya ang uri ng data ay itinakda bilang default. Sa paglitaw ng HTTP/1.0 sa RFC 1945 specification, napagtanto ng mga developer ang pangangailangan na magpadala ng mga imahe, style sheet at script. Iniangkop nila ang MIME standard mula sa email protocol, at ang Content-Type ay naging mahalagang bahagi ng HTTP. Mula noon, ang IANA registry ay lumawak sa daan-daang halaga — mula sa pamilyar na text/html hanggang sa modernong image/avif at application/manifest+json.

Papel ng Content-Type sa seguridad

Content-Type ay may mahalagang papel sa proteksyon laban sa mga pag-atake. Kung ang server ay nagpapadala ng HTML file na may MIME type na text/plain, ang browser ay hindi magpapatupad ng JavaScript at hindi magtatayo ng DOM — ito ay pumipigil sa mga XSS attack. Ang header na X-Content-Type-Options: nosniff, na inirerekomenda ng OWASP, ay ganap na nagbabawal sa browser na hulaan ang MIME type batay sa nilalaman. Ayon sa PortSwigger Research, ang mga pag-atake gamit ang MIME sniffing ay laganap lalo na sa Internet Explorer 6-9, kung saan binabalewala ng browser ang Content-Type at tinutukoy ang uri batay sa mga unang byte ng file.

Istraktura ng MIME type

Ang MIME type ay tinutukoy sa format na type/subtype, kung saan ang type ay ang pangkalahatang kategorya ng data, at ang subtype ay ang tiyak na format sa loob nito. Halimbawa, sa halagang image/png, ang kategoryang image ay tumutukoy sa isang imahe, at ang subtype na png — sa Portable Network Graphics format. Iilan lamang ang mga kategorya: text, image, audio, video, application, multipart at message. Ang natitirang pagkakaiba-iba ay ibinibigay ng mga subtype, na daan-daan ang bilang.

Ang mga karagdagang parameter ay ipinapadala sa pamamagitan ng tuldok-kuwit pagkatapos ng subtype. Ang pinakakaraniwang parameter ay charset para sa pagtukoy ng encoding. Ang Content-Type: application/json; charset=utf-8 ay nagpapaalam na ang isang JSON document sa UTF-8 encoding ay ipinapadala. Pormal na ang charset para sa application/json ay kalabisan, dahil ang JSON ay palaging nasa UTF-8 ayon sa RFC 8259 specification, ngunit ang malinaw na pagtukoy ay nagpapabuti ng compatibility sa mga lumang HTTP client.

KategoryaHalimbawa ng subtypePaglalarawan
texthtml, plain, css, javascript, csvMga tekstuwal na format na nababasa ng tao
imagejpeg, png, gif, webp, svg+xml, avifMga raster at vector na imahe
audiompeg, ogg, wav, mp4, webmMga audio format para sa streaming playback
videomp4, webm, ogg, x-msvideo, 3gppMga video format at multimedia container
applicationjson, xml, pdf, zip, octet-stream, protobufBinary at nakaayos na data
multipartform-data, mixed, alternative, byterangesMga komposadong dokumento mula sa maraming bahagi

Mga pamantayan at hindi pamantayang MIME type

Mga pamantayang MIME type ay nakarehistro sa IANA registry at may prefix ng pangunahing kategorya. Ang mga hindi pamantayang (vendor-specific) type ay gumagamit ng prefix na x- o format na vnd.company.type — halimbawa, application/vnd.google-earth.kml+xml para sa KML format mula sa Google. Maaaring hindi makilala ng mga browser ang mga hindi pamantayang type, kaya para sa mga hindi kilalang attachment ay ginagamit ang application/octet-stream — isang unibersal na binary stream na hindi sinusubukan ng browser na ipakita ngunit nag-aalok na i-download bilang file.

Ang parameter ng charset sa praktika

Ang parameter ng charset ay kritikal para sa tamang pagpapakita ng teksto. Kung wala ito, maaaring maling interpretahin ng browser ang mga karakter, na humahantong sa mojibake (mga sirang karakter). Ang pamantayan para sa web ay UTF-8, ngunit ang ISO-8859-1 (Latin-1) para sa mga wikang Kanlurang Europa at windows-1251 para sa Cyrillic sa mga lumang site ay matatagpuan din. Rekomendasyon ng W3C — palaging tukuyin ang charset=utf-8 para sa text/html at text/plain, at para sa application/json ang charset ay hindi kinakailangan.

Mga pangunahing uri ng Content-Type

Sa praktika, ang mga web developer at mobile developer ay nagtatrabaho sa isang limitadong hanay ng mga MIME type. Ang kaalaman sa mga type na ito ay kinakailangan para sa tamang configuration ng server, pagsulat ng mga HTTP client at pagproseso ng mga static na file. text/html — ang pangunahing type para sa mga web page, na bilang default ay ibinabalik ng Apache at Nginx server para sa mga HTML file. Ang application/xhtml+xml ay mas bihirang ginagamit at para lamang sa mga XHTML document.

application/json ay naging pamantayan para sa REST API. Ang mga server ay nagbabalik ng JSON data na may ganitong MIME type, at ang mga client ay nagpapadala nito sa mga POST at PUT na kahilingan. Ang text/javascript (luma na) at application/javascript ay ginagamit para sa JavaScript file. Ayon sa W3Techs Survey, 2025, ang JSON ay ang pinakamabilis na lumalagong format ng data sa web, na nalampasan ang XML noong 2018. Para sa SOAP services ay ginagamit pa rin ang text/xml o application/soap+xml.

Para sa mga imahe, ang MIME type ay tinutukoy ng format ng file: image/jpeg para sa JPEG, image/png para sa PNG, image/gif para sa GIF, image/webp para sa modernong WebP format. Ang image/svg+xml ay ginagamit para sa vector graphics at sumusuporta sa mga naka-embed na style at script. Ang video/mp4, audio/mpeg at application/pdf — iba pang madalas na makuhang type. Para sa mga web font ay ginagamit ang font/woff2, font/woff at font/ttf.

Content-Type sa pag-upload ng file

Sa pagpapadala ng mga file sa pamamagitan ng HTML form, ginagamit ang multipart/form-data — isang komposadong MIME type na naghahati ng kahilingan sa maraming bahagi. Ang bawat bahagi ay may sariling header ng Content-Type at Content-Disposition, na nagpapahiwatig ng pangalan ng field at orihinal na pangalan ng file. Natatanggap ng server ang file na may aktwal na MIME type nito, na tinutukoy ng browser, at maaaring suriin ito sa side ng backend. Ang application/octet-stream ay inilalapat para sa mga file na hindi kilalang type — hindi sinusubukan ng browser na ipakita ang nilalaman ngunit nag-aalok na i-save ito sa disk.

Epekto ng Content-Type sa caching

Ang MIME type ay nakakaapekto sa patakaran ng caching ng CDN at browser. Ang mga imahe na may matatag na URL ay karaniwang naka-cache para sa mahabang panahon (isang taon at higit pa), habang ang mga HTML page — para sa mga minuto o segundo. Mga CDN server Cloudflare at Akamai ay gumagamit ng Content-Type para sa pagpili ng compression algorithm: ang text/* ay nini-compress gamit ang gzip o brotli, ang image/* — hindi, dahil ang mga imahe ay naka-compress na. Ang tamang configuration ng Content-Type sa server ay direktang nakakaapekto sa pagganap ng pag-load ng mga page at mobile application.

Paano ginagamit ng server at kliyente ang Content-Type

Ang server ay nagtatakda ng header na Content-Type sa HTTP response batay sa uri ng hinihinging file o dynamic na nabuong nilalaman. Ang mga sikat na web server na Nginx at Apache ay may mga built-in na MIME type table na nag-uugnay ng extension ng file sa kaukulang Content-Type. Halimbawa, ang file na index.html ay nakakakuha ng text/html, at style.css — text/css. Para sa mga dynamic na tugon, ang developer ay nagtatakda ng Content-Type sa application code sa PHP, Python, Java o Kotlin.

Ang kliyente ay gumagamit ng Content-Type para sa pagpili ng handler. Kung ang server ay nagbabalik ng text/html, ang browser ay nagpapatakbo ng HTML parser at nagtatayo ng DOM tree. Kung image/png — nagpapatakbo ng PNG decoder. Kung ang Content-Type ay wala o mali, ang kliyente ay nag-a-apply ng MIME sniffing — sinusubukang hulaan ang uri batay sa signature (magic bytes) sa simula ng file. Ang JPEG ay nagsisimula sa bytes na FF D8 FF, PNG — sa 89 50 4E 47, at PDF — sa 25 50 44 46. Ang prosesong ito ay potensyal na mapanganib at nadi-disable ng header na X-Content-Type-Options: nosniff.

Sa mga mobile application, ang Content-Type ay pinoproseso ng mga HTTP client. OkHttp sa Android ay awtomatikong nagpa-parse ng header na Content-Type mula sa tugon at nagbibigay nito sa pamamagitan ng method na Response.header("Content-Type"). Ang iOS client na URLSession ay gumagawa ng pareho sa pamamagitan ng property na URLResponse.mimeType. Sa parehong platform, ang Content-Type ay ginagamit para sa pagpili ng parser: JSON — sa pamamagitan ng Moshi o Gson sa Android, sa pamamagitan ng Codable sa iOS; mga imahe — sa pamamagitan ng Glide, Coil o SDWebImage.

Content Negotiation sa pamamagitan ng Accept at Content-Type

Content negotiation (negosasyon ng nilalaman) — mekanismo ng HTTP kung saan ang kliyente ay nagpapahiwatig ng nais na format ng tugon sa pamamagitan ng header na Accept, at ang server ay pumipili ng angkop na format at ibinabalik ito na may kaukulang Content-Type. Halimbawa, ang kliyente ay nagpapadala ng Accept: application/json, ang server ay tumutugon ng Content-Type: application/json. Kung ang server ay hindi maaaring magbigay ng hinihinging format, ito ay nagbabalik ng 406 Not Acceptable. Sa REST API, ang mekanismong ito ay nagpapahintulot sa isang endpoint na magbalik ng data sa JSON, XML o HTML.

Content-Type sa mga kahilingan at tugon

Ang header na Content-Type ay ginagamit pareho sa mga kahilingan ng HTTP (Request) at sa mga tugon ng HTTP (Response). Sa mga kahilingan, ito ay nagpapahiwatig ng format ng katawan ng kahilingan, halimbawa sa pagpapadala ng JSON sa pamamagitan ng POST. Sa mga tugon — format ng ibinabalik na data. Ang pangunahing pagkakaiba ay ang Content-Type ng kahilingan ay itinakda ng kliyente, at ang Content-Type ng tugon — ng server. Ang maling pagtatakda ng Content-Type sa kahilingan ay nagiging sanhi ng hindi pag-parse ng server sa katawan, na nagbabalik ng error na 400 Bad Request o 415 Unsupported Media Type.

Sa mga kahilingan ng HTTP, ang Content-Type ay sapilitan para sa mga pamamaraang POST, PUT at PATCH kung ang kahilingan ay naglalaman ng katawan (body). Ang GET, HEAD at DELETE ay karaniwang hindi gumagamit ng katawan, kaya ang Content-Type para sa kanila ay hindi tinutukoy o binabalewala. Sa pagpapadala ng HTML form na may attribute na enctype="multipart/form-data", ang browser ay awtomatikong nagtatakda ng Content-Type: multipart/form-data na may natatanging boundary string na naghihiwalay sa mga bahagi ng komposadong kahilingan. Ang bawat bahagi ay pinaghihiwalay ng --boundary, at ang dulo ng kahilingan ay minamarkahan ng --boundary--.

Sa mga tugon ng HTTP, ang Content-Type ay itinakda ng server. Kung ang server ay hindi tumutukoy ng Content-Type, ang kliyente ay maaaring mag-activate ng MIME sniffing, o iproseso ang tugon bilang application/octet-stream. Ang HTTP method na HEAD ay nagpapahintulot na makuha ang mga header ng tugon, kabilang ang Content-Type, nang hindi nagpapadala ng katawan. Ito ay kapaki-pakinabang para sa pagsuri ng uri ng resource bago ito ganap na i-load. Mga CDN server ay maaaring mag-overwrite ng Content-Type sa pagbabago ng nilalaman — halimbawa, sa pag-convert ng mga imahe sa WebP.

kotlin
import okhttp3.*

fun checkContentType() {
    val client = OkHttpClient()
    val request = Request.Builder()
        .url("https://api.example.com/resource")
        .head()
        .build()

    client.newCall(request).execute().use { response ->
        val contentType = response.header("Content-Type")
        val mediaType = MediaType.parse(contentType)
        println("Uri: ${mediaType?.type}, Subtype: ${mediaType?.subtype}")
    }
}

Content-Type sa mga mobile HTTP client

Sa mobile development, ang header na Content-Type ay awtomatikong pinoproseso ng mga HTTP client. Sa OkHttp sa Android, ang Content-Type ay itinakda sa pamamagitan ng RequestBody: val body = "{}".toRequestBody("application/json".toMediaType()). Ang Retrofit ay namamahala ng Content-Type sa pamamagitan ng mga anotasyon: @Body para sa JSON, @Part para sa multipart. Sa iOS, ang URLSession ay nagtatakda ng Content-Type para sa HTTPBody, at ang Alamofire ay ginagawa ito sa pamamagitan ng parameter na encoding: JSONEncoding.default o URLEncoding.default. Ang manu-manong pagtatakda ng Content-Type ay kinakailangan kapag nagtatrabaho sa mga raw socket o custom na protocol.

Mga error sa pagtatrabaho sa Content-Type

Maling Content-Type — isa sa mga pinakakaraniwang problema sa pag-develop at pagsasama ng mga web service. Ang pinakakaraniwang error ay kapag ang server ay nagbabalik ng text/html sa halip na application/json. Ang kliyente ay tumatanggap ng JSON bilang HTML string, hindi ito ma-parse at nagtatapon ng exception. Ito ay nangyayari kapag ang web framework ay naka-configure bilang default sa HTML, at ang developer ay nakakalimutang i-overwrite ang Content-Type para sa API endpoint. Sa PHP, ito ay nagpapakita sa pamamagitan ng kawalan ng header('Content-Type: application/json'), sa Spring Boot — sa pamamagitan ng kawalan ng anotasyong produces.

Ang pangalawang pinakakaraniwang error ay mali o nawawalang charset. Kung ang server ay nagpapadala ng text/html; charset=iso-8859-1 at ang browser ay umaasa ng UTF-8, ang mga Cyrillic character ay ipinapakita na sira. Ang problemang ito ay tipikal para sa mga lumang site na hindi lumipat sa UTF-8. Para sa JSON, ang ganitong error ay mas bihirang mangyari, dahil ang RFC 8259 ay nag-uutos ng UTF-8 nang walang karagdagang kasunduan. Solusyon — palaging malinaw na tukuyin ang charset=utf-8 para sa mga tekstuwal na MIME type sa configuration ng server.

Ang ikatlong problema — hindi pagkakatugma ng Content-Type sa aktwal na nilalaman. Kung ang server ay nagpapadala ng Content-Type: image/png ngunit ang katawan ng tugon ay naglalaman ng WebP na imahe, ang browser ay maaaring hindi ito ma-decode. Ang mga CDN server ay minsan nagco-compress ng mga imahe na may pagbabago ng format, ngunit hindi ina-update ang header na Content-Type. Ang pagsuri ng pagkakatugma ng Content-Type sa aktwal na nilalaman ay isang sapilitang yugto ng pagsubok ng API at integration testing ng mga mobile application.

Diagnosis at pagwawasto ng mga error sa Content-Type

Para sa debugging, gamitin ang mga developer tools ng browser (tab na Network), curl na may flag na -I para sa pagsuri ng mga header ng tugon, o traffic sniffer tulad ng Charles Proxy at Wireshark. Nginx ay nako-configure sa pamamagitan ng direktiba na include mime.types, Apache — sa pamamagitan ng AddType at AddDefaultCharset. Para sa mga static na file, palaging suriin na ang extension ng file ay tumutugma sa MIME type nito. Para sa mga dynamic na tugon, sa lahat ng programming language, malinaw na itakda ang Content-Type bago mag-output ng data — ito ay pumipigil sa karamihan ng mga problema.

Mga Madalas Itanong

Ano ang mangyayari kung hindi tinukoy ang Content-Type sa HTTP response?

Kung walang Content-Type, ang browser ay nag-a-activate ng MIME sniffing — pagsusuri ng mga unang byte ng tugon para sa awtomatikong pagtukoy ng uri ng data. Ito ay maaaring humantong sa maling pagproseso ng nilalaman at lumikha ng mga kahinaan sa seguridad. Ang mga modernong browser na may header na X-Content-Type-Options: nosniff ay ganap na humaharang sa paghula.

Ano ang pagkakaiba ng Content-Type at Accept sa HTTP?

Content-Type ay nagpapahiwatig ng format ng data na ipinapadala sa kasalukuyang mensahe (katawan ng kahilingan o tugon). Ang Accept — ay isang header ng kahilingan na nagsasabi sa server kung anong format ng tugon ang mas gusto ng kliyente. Ang Content-Type ay itinakda ng nagpapadala ng data, at ang Accept — ng tatanggap, at sila ay nakikilahok sa mekanismo ng negosasyon ng nilalaman.

Ano ang tamang Content-Type para sa JSON?

Ang opisyal na MIME type para sa JSON ay application/json ayon sa RFC 8259 specification. Dati ay ginamit ang text/x-json, ngunit ang type na ito ay luma na. Ang parameter ng charset para sa application/json ay hindi kinakailangan, dahil ang JSON ayon sa specification ay palaging ipinapadala sa UTF-8, UTF-16 o UTF-32 encoding na may awtomatikong pagtukoy ng byte order (BOM).

Bakit nagbabalik ang server ng text/html sa halip na application/json?

Ito ay nangyayari kapag ang web framework ay hindi nag-o-overwrite ng default na Content-Type para sa mga API endpoint. Sa PHP ito ay naaayos sa pamamagitan ng pagtawag sa header('Content-Type: application/json'), sa Spring Boot — sa pamamagitan ng anotasyong @GetMapping(produces = "application/json"), sa Express.js — sa pamamagitan ng method na res.set('Content-Type', 'application/json').

Ano ang ibig sabihin ng Content-Type: application/octet-stream?

application/octet-stream — isang unibersal na MIME type para sa binary data na ang format ay hindi alam. Hindi sinusubukan ng browser na ipakita ang naturang file sa window, ngunit nag-aalok na i-save ito sa disk. Ito ay ginagamit para sa pag-download ng file, mga attachment ng email at streaming data kapag hindi matukoy ng server ang eksaktong uri ng ipinapadalang nilalaman.

Buod

  • Content-Type — HTTP header na tumutukoy sa MIME type ng ipinapadalang data, sapilitan para sa mga mensaheng may katawan.
  • MIME type ay binubuo ng kategorya (text, image, application) at subtype (html, json, png), pinaghihiwalay ng slash — halimbawa, text/html o application/json.
  • Parameter ng charset ay nagpapahiwatig ng encoding para sa mga tekstuwal na type; ang pamantayan para sa web ay UTF-8, ang malinaw na pagtukoy ay pumipigil sa mga problema sa pagpapakita ng karakter.
  • Content-Type ay ginagamit pareho sa mga kahilingan (POST, PUT) at mga tugon, na nakakaapekto sa pagpili ng parser at pagproseso ng data ng kliyente.
  • Mga error sa Content-Type ay humahantong sa maling pagpapakita, mga problema sa pag-parse, mga error na 400/415 at mga kahinaan sa MIME sniffing.
  • Ang header na X-Content-Type-Options: nosniff ay nagdi-disable ng paghula ng MIME type ng browser at inirerekomenda ng OWASP para sa lahat ng web application.
  • Pagsusuri ng Content-Type sa mga pagsubok ng API ay sapilitan — bawat endpoint ay dapat magbalik ng inaasahang MIME type na tumutugma sa aktwal na nilalaman ng tugon.

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din