Content-Type στην ανάπτυξη ιστού: τι είναι, τύποι MIME και πώς λειτουργεί

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-03-10 Χρόνος ανάγνωσης: 9 λεπ

Content-Type — είναι μια κεφαλίδα HTTP που υποδεικνύει σε ποια μορφή μεταδίδονται τα δεδομένα μεταξύ πελάτη και διακομιστή. Χωρίς τον σωστό τύπο MIME, το πρόγραμμα περιήγησης δεν μπορεί να επεξεργαστεί σωστά την απάντηση: ένα αρχείο κειμένου εμφανίζεται ως ακατέργαστος κώδικας και μια εικόνα δεν ανοίγει. Σύμφωνα με το MDN Web Docs, 2025, το Content-Type είναι υποχρεωτικό για τη σωστή μετάδοση δεδομένων οποιουδήποτε τύπου στο πρωτόκολλο HTTP και καθορίζει πώς ο παραλήπτης ερμηνεύει το σώμα του μηνύματος.

Κύρια

  • Content-Type — κεφαλίδα HTTP που καθορίζει τον τύπο MIME των μεταδιδόμενων δεδομένων στο σώμα του αιτήματος ή της απάντησης.
  • Τύπος MIME αποτελείται από μια κύρια κατηγορία και έναν υπότυπο, διαχωρισμένα με κάθετο — για παράδειγμα, text/html ή application/json.
  • Η παράμετρος charset υποδεικνύει την κωδικοποίηση για τύπους MIME κειμένου, το πρότυπο για τον ιστό είναι UTF-8.
  • Χωρίς Content-Type το πρόγραμμα περιήγησης ενεργοποιεί το MIME sniffing, το οποίο οδηγεί σε σφάλματα εμφάνισης και τρωτά σημεία ασφαλείας.
  • Η κεφαλίδα X-Content-Type-Options: nosniff απενεργοποιεί την εικασία τύπου και αυξάνει την ασφάλεια των διαδικτυακών εφαρμογών.

Τι είναι το Content-Type;

Content-Type — είναι μια κεφαλίδα HTTP από την ομάδα κεφαλίδων αναπαράστασης (representation headers) που ενημερώνει τον παραλήπτη σχετικά με τη μορφή των δεδομένων στο σώμα του μηνύματος. Είναι υποχρεωτική για αιτήματα και απαντήσεις HTTP που περιέχουν σώμα (body), και χωρίς αυτήν ο πελάτης δεν μπορεί να ερμηνεύσει σωστά τα ληφθέντα byte. Το πρόγραμμα περιήγησης ή η εφαρμογή κινητού βάσει του Content-Type επιλέγει τον αναλυτή: για text/html εκκινεί τη μηχανή HTML, για image/png — τον αποκωδικοποιητή PNG, για application/json — τον αναλυτή JSON.

Η τιμή του Content-Type είναι ένας τύπος MIME — ένα τυποποιημένο αναγνωριστικό μορφής δεδομένων. Το ακρωνύμιο MIME σημαίνει Multipurpose Internet Mail Extensions, καθώς αυτό το πρότυπο δημιουργήθηκε αρχικά για συνημμένα email. Ωστόσο, έγινε η βάση του HTTP και χρησιμοποιείται σήμερα παντού — από τη μετάδοση ιστοσελίδων έως την ανταλλαγή δεδομένων σε REST API. Κάθε τύπος MIME αποτελείται από δύο μέρη: μια κύρια κατηγορία και έναν επεξηγηματικό υπότυπο, διαχωρισμένα με κάθετο.

Η παράμετρος charset συμπληρώνει το Content-Type για μορφές κειμένου. Για παράδειγμα, το Content-Type: text/html; charset=utf-8 σημαίνει ότι μεταδίδεται ένα έγγραφο HTML σε κωδικοποίηση UTF-8. Σύμφωνα με το IETF RFC 7231, ενότητα 3.1.1.5, η κεφαλίδα Content-Type είναι υποχρεωτική για μηνύματα HTTP που περιέχουν σώμα, και η απουσία της ερμηνεύεται ως application/octet-stream ή οδηγεί σε MIME sniffing.

Ιστορία εμφάνισης των τύπων MIME στο HTTP

Το πρωτόκολλο HTTP/0.9, που κυκλοφόρησε το 1991, μετέδιδε μόνο σελίδες HTML, επομένως ο τύπος δεδομένων ήταν προεπιλεγμένος. Με την εμφάνιση του HTTP/1.0 στην προδιαγραφή RFC 1945, οι προγραμματιστές συνειδητοποίησαν την ανάγκη μετάδοσης εικόνων, φύλλων στυλ και σεναρίων. Προσάρμοσαν το πρότυπο MIME από το πρωτόκολλο email, και το Content-Type έγινε αναπόσπαστο μέρος του HTTP. Από τότε, το μητρώο IANA έχει επεκταθεί σε εκατοντάδες τιμές — από το γνωστό text/html έως τα σύγχρονα image/avif και application/manifest+json.

Ο ρόλος του Content-Type στην ασφάλεια

Content-Type παίζει κρίσιμο ρόλο στην προστασία από επιθέσεις. Εάν ο διακομιστής στείλει ένα αρχείο HTML με τύπο MIME text/plain, το πρόγραμμα περιήγησης δεν θα εκτελέσει JavaScript και δεν θα δημιουργήσει DOM — αυτό αποτρέπει επιθέσεις XSS. Η κεφαλίδα X-Content-Type-Options: nosniff, που συνιστάται από το OWASP, απαγορεύει πλήρως στο πρόγραμμα περιήγησης να μαντεύει τον τύπο MIME βάσει περιεχομένου. Σύμφωνα με το PortSwigger Research, οι επιθέσεις που χρησιμοποιούν MIME sniffing ήταν ιδιαίτερα διαδεδομένες στο Internet Explorer 6-9, όπου το πρόγραμμα περιήγησης αγνοούσε το Content-Type και καθόριζε τον τύπο βάσει των πρώτων byte του αρχείου.

Δομή του τύπου MIME

Ο τύπος MIME καθορίζεται σε μορφή type/subtype, όπου type είναι η γενική κατηγορία δεδομένων και subtype είναι η συγκεκριμένη μορφή εντός αυτής. Για παράδειγμα, στην τιμή image/png, η κατηγορία image υποδεικνύει εικόνα και ο υπότυπος png — τη μορφή Portable Network Graphics. Υπάρχουν μόνο λίγες κατηγορίες: text, image, audio, video, application, multipart και message. Η υπόλοιπη ποικιλομορφία παρέχεται από υπότυπους, οι οποίοι είναι εκατοντάδες.

Πρόσθετες παράμετροι μεταδίδονται μέσω ερωτηματικού μετά τον υπότυπο. Η πιο κοινή παράμετρος είναι charset για την ένδειξη κωδικοποίησης. Το Content-Type: application/json; charset=utf-8 ενημερώνει ότι μεταδίδεται ένα έγγραφο JSON σε κωδικοποίηση UTF-8. Τυπικά, το charset για το application/json είναι περιττό, καθώς το JSON είναι πάντα σε UTF-8 σύμφωνα με την προδιαγραφή RFC 8259, αλλά η ρητή αναφορά βελτιώνει τη συμβατότητα με παλαιότερους πελάτες HTTP.

ΚατηγορίαΠαραδείγματα υποτύπωνΠεριγραφή
texthtml, plain, css, javascript, csvΜορφές κειμένου αναγνώσιμες από τον άνθρωπο
imagejpeg, png, gif, webp, svg+xml, avifΨηφιακές και διανυσματικές εικόνες
audiompeg, ogg, wav, mp4, webmΜορφές ήχου για ροή αναπαραγωγής
videomp4, webm, ogg, x-msvideo, 3gppΜορφές βίντεο και δοχεία πολυμέσων
applicationjson, xml, pdf, zip, octet-stream, protobufΔυαδικά και δομημένα δεδομένα
multipartform-data, mixed, alternative, byterangesΣύνθετα έγγραφα από πολλά μέρη

Τυπικοί και μη τυπικοί τύποι MIME

Τυπικοί τύποι MIME καταχωρούνται στο μητρώο IANA και έχουν πρόθεμα κύριας κατηγορίας. Οι μη τυπικοί (vendor-specific) τύποι χρησιμοποιούν πρόθεμα x- ή μορφή vnd.company.type — για παράδειγμα, application/vnd.google-earth.kml+xml για τη μορφή KML από την Google. Τα προγράμματα περιήγησης ενδέχεται να μην αναγνωρίζουν μη τυπικούς τύπους, επομένως για άγνωστα συνημμένα χρησιμοποιείται application/octet-stream — ένα καθολικό δυαδικό ρεύμα που το πρόγραμμα περιήγησης δεν προσπαθεί να εμφανίσει αλλά προσφέρει λήψη ως αρχείο.

Η παράμετρος charset στην πράξη

Η παράμετρος charset είναι κρίσιμη για τη σωστή εμφάνιση κειμένου. Χωρίς αυτήν, το πρόγραμμα περιήγησης μπορεί να ερμηνεύσει λανθασμένα χαρακτήρες, οδηγώντας σε mojibake (παραμορφωμένους χαρακτήρες). Το πρότυπο για τον ιστό είναι UTF-8, αλλά συναντώνται επίσης ISO-8859-1 (Latin-1) για δυτικοευρωπαϊκές γλώσσες και windows-1251 για κυριλλικούς σε παλιούς ιστότοπους. Σύσταση W3C — να καθορίζετε πάντα charset=utf-8 για text/html και text/plain, και για το application/json το charset δεν απαιτείται.

Κύριοι τύποι Content-Type

Στην πράξη, οι προγραμματιστές ιστού και οι προγραμματιστές κινητών εργάζονται με ένα περιορισμένο σύνολο τύπων MIME. Η γνώση αυτών των τύπων είναι απαραίτητη για τη σωστή διαμόρφωση του διακομιστή, τη σύνταξη πελατών HTTP και την επεξεργασία στατικών αρχείων. text/html — ο κύριος τύπος για ιστοσελίδες, που επιστρέφεται από προεπιλογή από τους διακομιστές Apache και Nginx για αρχεία HTML. Το application/xhtml+xml χρησιμοποιείται σπανιότερα και μόνο για έγγραφα XHTML.

application/json έχει γίνει το πρότυπο για REST API. Οι διακομιστές επιστρέφουν δεδομένα JSON με αυτόν τον τύπο MIME και οι πελάτες τον στέλνουν σε αιτήματα POST και PUT. Το text/javascript (παρωχημένο) και application/javascript χρησιμοποιούνται για αρχεία JavaScript. Σύμφωνα με το W3Techs Survey, 2025, το JSON είναι η ταχύτερα αναπτυσσόμενη μορφή δεδομένων στον ιστό, ξεπερνώντας το XML το 2018. Για υπηρεσίες SOAP εξακολουθεί να χρησιμοποιείται text/xml ή application/soap+xml.

Για εικόνες, ο τύπος MIME καθορίζεται από τη μορφή αρχείου: image/jpeg για JPEG, image/png για PNG, image/gif για GIF, image/webp για τη σύγχρονη μορφή WebP. Το image/svg+xml χρησιμοποιείται για διανυσματικά γραφικά και υποστηρίζει ενσωματωμένα στυλ και σενάρια. video/mp4, audio/mpeg και application/pdf — άλλοι συχνοί τύποι. Για γραμματοσειρές ιστού χρησιμοποιούνται font/woff2, font/woff και font/ttf.

Content-Type κατά τη μεταφόρτωση αρχείων

Κατά την αποστολή αρχείων μέσω φόρμας HTML χρησιμοποιείται multipart/form-data — ένας σύνθετος τύπος MIME που χωρίζει το αίτημα σε πολλά μέρη. Κάθε μέρος έχει τη δική του κεφαλίδα Content-Type και Content-Disposition, που υποδεικνύει το όνομα πεδίου και το αρχικό όνομα αρχείου. Ο διακομιστής λαμβάνει το αρχείο με τον πραγματικό τύπο MIME του, που καθορίζεται από το πρόγραμμα περιήγησης, και μπορεί να το ελέγξει στην πλευρά του backend. Το application/octet-stream εφαρμόζεται για αρχεία άγνωστου τύπου — το πρόγραμμα περιήγησης δεν προσπαθεί να εμφανίσει το περιεχόμενο αλλά προσφέρει αποθήκευση στο δίσκο.

Επίδραση του Content-Type στην προσωρινή αποθήκευση

Ο τύπος MIME επηρεάζει την πολιτική προσωρινής αποθήκευσης CDN και προγράμματος περιήγησης. Οι εικόνες με σταθερά URL συνήθως αποθηκεύονται προσωρινά για μεγάλο χρονικό διάστημα (ένα έτος και περισσότερο), ενώ οι σελίδες HTML — για λεπτά ή δευτερόλεπτα. Διακομιστές CDN Cloudflare και Akamai χρησιμοποιούν το Content-Type για την επιλογή αλγορίθμου συμπίεσης: το text/* συμπιέζεται με gzip ή brotli, το image/* — όχι, καθώς οι εικόνες είναι ήδη συμπιεσμένες. Η σωστή διαμόρφωση του Content-Type στον διακομιστή επηρεάζει άμεσα την απόδοση φόρτωσης σελίδων και εφαρμογών κινητών.

Πώς χρησιμοποιούν τον Content-Type ο διακομιστής και ο πελάτης

Ο διακομιστής ορίζει την κεφαλίδα Content-Type στην απάντηση HTTP βάσει του τύπου του ζητούμενου αρχείου ή δυναμικά παραγόμενου περιεχομένου. Οι δημοφιλείς διακομιστές ιστού Nginx και Apache διαθέτουν ενσωματωμένους πίνακες τύπων MIME που αντιστοιχίζουν την επέκταση αρχείου με το κατάλληλο Content-Type. Για παράδειγμα, το αρχείο index.html λαμβάνει text/html και το style.css — text/css. Για δυναμικές απαντήσεις, ο προγραμματιστής ορίζει το Content-Type στον κώδικα εφαρμογής σε PHP, Python, Java ή Kotlin.

Ο πελάτης χρησιμοποιεί το Content-Type για την επιλογή χειριστή. Εάν ο διακομιστής επιστρέψει text/html, το πρόγραμμα περιήγησης εκκινεί τον αναλυτή HTML και χτίζει το δέντρο DOM. Εάν image/png — εκκινεί τον αποκωδικοποιητή PNG. Εάν το Content-Type λείπει ή είναι λανθασμένο, ο πελάτης εφαρμόζει MIME sniffing — προσπαθεί να μαντέψει τον τύπο βάσει της υπογραφής (magic bytes) στην αρχή του αρχείου. Το JPEG αρχίζει με byte FF D8 FF, το PNG — με 89 50 4E 47, και το PDF — με 25 50 44 46. Αυτή η διαδικασία είναι δυνητικά επικίνδυνη και απενεργοποιείται από την κεφαλίδα X-Content-Type-Options: nosniff.

Σε εφαρμογές κινητών, το Content-Type υποβάλλεται σε επεξεργασία από πελάτες HTTP. OkHttp στο Android αναλύει αυτόματα την κεφαλίδα Content-Type από την απάντηση και την παρέχει μέσω της μεθόδου Response.header("Content-Type"). Ο πελάτης iOS URLSession κάνει το ίδιο μέσω της ιδιότητας URLResponse.mimeType. Και στις δύο πλατφόρμες, το Content-Type χρησιμοποιείται για την επιλογή αναλυτή: JSON — μέσω Moshi ή Gson στο Android, μέσω Codable στο iOS; εικόνες — μέσω Glide, Coil ή SDWebImage.

Διαπραγμάτευση περιεχομένου μέσω Accept και Content-Type

Content negotiation (διαπραγμάτευση περιεχομένου) — μηχανισμός HTTP όπου ο πελάτης υποδεικνύει την επιθυμητή μορφή απάντησης μέσω της κεφαλίδας Accept, και ο διακομιστής επιλέγει την κατάλληλη μορφή και την επιστρέφει με το αντίστοιχο Content-Type. Για παράδειγμα, ο πελάτης στέλνει Accept: application/json, ο διακομιστής απαντά με Content-Type: application/json. Εάν ο διακομιστής δεν μπορεί να παράσχει την ζητούμενη μορφή, επιστρέφει 406 Not Acceptable. Στο REST API, αυτός ο μηχανισμός επιτρέπει σε ένα endpoint να επιστρέφει δεδομένα σε JSON, XML ή HTML.

Content-Type σε αιτήματα και απαντήσεις

Η κεφαλίδα Content-Type χρησιμοποιείται τόσο σε αιτήματα HTTP (Request) όσο και σε απαντήσεις HTTP (Response). Σε αιτήματα, υποδεικνύει τη μορφή του σώματος του αιτήματος, για παράδειγμα κατά την αποστολή JSON μέσω POST. Σε απαντήσεις — τη μορφή των επιστρεφόμενων δεδομένων. Η θεμελιώδης διαφορά είναι ότι το Content-Type του αιτήματος ορίζεται από τον πελάτη, ενώ το Content-Type της απάντησης — από τον διακομιστή. Λανθασμένος ορισμός του Content-Type στο αίτημα οδηγεί στο να μην μπορεί ο διακομιστής να αναλύσει το σώμα, επιστρέφοντας σφάλμα 400 Bad Request ή 415 Unsupported Media Type.

Σε αιτήματα HTTP, το Content-Type είναι υποχρεωτικό για τις μεθόδους POST, PUT και PATCH εάν το αίτημα περιέχει σώμα (body). Οι GET, HEAD και DELETE συνήθως δεν χρησιμοποιούν σώμα, επομένως το Content-Type για αυτές δεν καθορίζεται ή αγνοείται. Κατά την αποστολή φόρμας HTML με το χαρακτηριστικό enctype="multipart/form-data", το πρόγραμμα περιήγησης ορίζει αυτόματα Content-Type: multipart/form-data με μια μοναδική συμβολοσειρά ορίου (boundary) που διαχωρίζει τα μέρη του σύνθετου αιτήματος. Κάθε μέρος χωρίζεται με --boundary, και το τέλος του αιτήματος σημειώνεται με --boundary--.

Σε απαντήσεις HTTP, το Content-Type ορίζεται από τον διακομιστή. Εάν ο διακομιστής δεν καθορίζει Content-Type, ο πελάτης είτε ενεργοποιεί MIME sniffing είτε επεξεργάζεται την απάντηση ως application/octet-stream. Η μέθοδος HTTP HEAD επιτρέπει τη λήψη κεφαλίδων απάντησης, συμπεριλαμβανομένου του Content-Type, χωρίς μετάδοση σώματος. Αυτό είναι χρήσιμο για τον έλεγχο του τύπου πόρου πριν από την πλήρη φόρτωσή του. Διακομιστές CDN ενδέχεται να αντικαταστήσουν το Content-Type κατά τη μετατροπή περιεχομένου — για παράδειγμα, κατά τη μετατροπή εικόνων σε 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("Τύπος: ${mediaType?.type}, Υπότυπος: ${mediaType?.subtype}")
    }
}

Content-Type σε πελάτες HTTP κινητών

Στην ανάπτυξη κινητών, η κεφαλίδα Content-Type υποβάλλεται σε αυτόματη επεξεργασία από πελάτες HTTP. Στο OkHttp στο Android, το Content-Type ορίζεται μέσω RequestBody: val body = "{}".toRequestBody("application/json".toMediaType()). Το Retrofit διαχειρίζεται το Content-Type μέσω σχολιασμών: @Body για JSON, @Part για multipart. Στο iOS, το URLSession ορίζει το Content-Type για HTTPBody, και το Alamofire το κάνει μέσω της παραμέτρου encoding: JSONEncoding.default ή URLEncoding.default. Ο μη αυτόματος ορισμός του Content-Type απαιτείται κατά την εργασία με ακατέργαστες υποδοχές ή προσαρμοσμένα πρωτόκολλα.

Σφάλματα κατά την εργασία με το Content-Type

Λανθασμένο Content-Type — ένα από τα πιο συνηθισμένα προβλήματα κατά την ανάπτυξη και ενσωμάτωση διαδικτυακών υπηρεσιών. Το πιο συνηθισμένο σφάλμα είναι όταν ο διακομιστής επιστρέφει text/html αντί για application/json. Ο πελάτης λαμβάνει JSON ως συμβολοσειρά HTML, δεν μπορεί να το αναλύσει και εκτοξεύει εξαίρεση. Αυτό συμβαίνει όταν το πλαίσιο ιστού έχει διαμορφωθεί προεπιλεγμένα σε HTML και ο προγραμματιστής ξεχνά να αντικαταστήσει το Content-Type για το τελικό σημείο API. Στην PHP, αυτό εκδηλώνεται με την απουσία header('Content-Type: application/json'), στο Spring Boot — με την απουσία του σχολιασμού produces.

Το δεύτερο πιο συνηθισμένο σφάλμα είναι λανθασμένο ή ελλιπές charset. Εάν ο διακομιστής στείλει text/html; charset=iso-8859-1 και το πρόγραμμα περιήγησης αναμένει UTF-8, οι κυριλλικοί χαρακτήρες εμφανίζονται παραμορφωμένοι. Αυτό το πρόβλημα είναι χαρακτηριστικό για παλιούς ιστότοπους που δεν έχουν μεταβεί σε UTF-8. Για JSON, αυτό το σφάλμα είναι λιγότερο συχνό, καθώς το RFC 8259 επιβάλλει UTF-8 χωρίς πρόσθετη συμφωνία. Λύση — να καθορίζετε πάντα ρητά charset=utf-8 για τύπους MIME κειμένου στη διαμόρφωση του διακομιστή.

Το τρίτο πρόβλημα — αναντιστοιχία Content-Type με το πραγματικό περιεχόμενο. Εάν ο διακομιστής στείλει Content-Type: image/png αλλά το σώμα της απάντησης περιέχει εικόνα WebP, το πρόγραμμα περιήγησης μπορεί να μην την αποκωδικοποιήσει. Οι διακομιστές CDN μερικές φορές συμπιέζουν εικόνες με αλλαγή μορφής, αλλά δεν ενημερώνουν την κεφαλίδα Content-Type. Ο έλεγχος αντιστοιχίας του Content-Type με το πραγματικό περιεχόμενο είναι υποχρεωτικό στάδιο δοκιμών API και δοκιμών ολοκλήρωσης εφαρμογών κινητών.

Διάγνωση και διόρθωση σφαλμάτων Content-Type

Για αποσφαλμάτωση, χρησιμοποιήστε τα εργαλεία προγραμματιστή του προγράμματος περιήγησης (καρτέλα Network), curl με τη σημαία -I για έλεγχο κεφαλίδων απάντησης ή ανιχνευτές κίνησης όπως Charles Proxy και Wireshark. Nginx διαμορφώνεται μέσω της οδηγίας include mime.types, Apache — μέσω AddType και AddDefaultCharset. Για στατικά αρχεία, ελέγχετε πάντα ότι η επέκταση αρχείου αντιστοιχεί στον τύπο MIME του. Για δυναμικές απαντήσεις, σε όλες τις γλώσσες προγραμματισμού, ορίζετε ρητά το Content-Type πριν από την εξαγωγή δεδομένων — αυτό αποτρέπει τη συντριπτική πλειονότητα των προβλημάτων.

Συχνές Ερωτήσεις

Τι θα συμβεί εάν δεν καθοριστεί το Content-Type στην απάντηση HTTP;

Χωρίς Content-Type, το πρόγραμμα περιήγησης ενεργοποιεί MIME sniffing — ανάλυση των πρώτων byte της απάντησης για αυτόματο προσδιορισμό του τύπου δεδομένων. Αυτό μπορεί να οδηγήσει σε λανθασμένη επεξεργασία περιεχομένου και να δημιουργήσει τρωτά σημεία ασφαλείας. Τα σύγχρονα προγράμματα περιήγησης με την κεφαλίδα X-Content-Type-Options: nosniff αποκλείουν εντελώς την εικασία.

Σε τι διαφέρει το Content-Type από το Accept στο HTTP;

Content-Type υποδεικνύει τη μορφή δεδομένων που μεταδίδονται στο τρέχον μήνυμα (σώμα αιτήματος ή απάντησης). Accept — είναι μια κεφαλίδα αιτήματος που ενημερώνει τον διακομιστή ποια μορφή απάντησης προτιμά ο πελάτης. Το Content-Type ορίζεται από τον αποστολέα δεδομένων, και το Accept — από τον παραλήπτη, και συμμετέχουν στον μηχανισμό διαπραγμάτευσης περιεχομένου.

Ποιο είναι το σωστό Content-Type για JSON;

Ο επίσημος τύπος MIME για JSON είναι application/json σύμφωνα με την προδιαγραφή RFC 8259. Παλαιότερα χρησιμοποιείτο το text/x-json, αλλά αυτός ο τύπος έχει καταργηθεί. Η παράμετρος charset για το application/json δεν είναι απαραίτητη, καθώς το JSON σύμφωνα με την προδιαγραφή μεταδίδεται πάντα σε κωδικοποίηση UTF-8, UTF-16 ή UTF-32 με αυτόματη ανίχνευση σειράς byte (BOM).

Γιατί ο διακομιστής επιστρέφει text/html αντί για application/json;

Αυτό συμβαίνει όταν το πλαίσιο ιστού δεν αντικαθιστά το προεπιλεγμένο Content-Type για τα τελικά σημεία API. Στην PHP διορθώνεται με κλήση header('Content-Type: application/json'), στο Spring Boot — με σχολιασμό @GetMapping(produces = "application/json"), στο Express.js — με τη μέθοδο res.set('Content-Type', 'application/json').

Τι σημαίνει το Content-Type: application/octet-stream;

application/octet-stream — ένας καθολικός τύπος MIME για δυαδικά δεδομένα των οποίων η μορφή είναι άγνωστη. Το πρόγραμμα περιήγησης δεν προσπαθεί να εμφανίσει ένα τέτοιο αρχείο στο παράθυρο, αλλά προσφέρει αποθήκευση στο δίσκο. Χρησιμοποιείται για λήψεις αρχείων, συνημμένα email και δεδομένα ροής όταν ο διακομιστής δεν μπορεί να προσδιορίσει τον ακριβή τύπο του μεταδιδόμενου περιεχομένου.

Σύνοψη

  • Content-Type — κεφαλίδα HTTP που καθορίζει τον τύπο MIME των μεταδιδόμενων δεδομένων, υποχρεωτική για μηνύματα με σώμα.
  • Τύπος MIME αποτελείται από κατηγορία (text, image, application) και υπότυπο (html, json, png), διαχωρισμένα με κάθετο — για παράδειγμα, text/html ή application/json.
  • Η παράμετρος charset υποδεικνύει την κωδικοποίηση για τύπους κειμένου; το πρότυπο για τον ιστό είναι UTF-8, η ρητή αναφορά αποτρέπει προβλήματα εμφάνισης χαρακτήρων.
  • Content-Type χρησιμοποιείται τόσο σε αιτήματα (POST, PUT) όσο και σε απαντήσεις, επηρεάζοντας την επιλογή αναλυτή και την επεξεργασία δεδομένων από τον πελάτη.
  • Σφάλματα Content-Type οδηγούν σε λανθασμένη εμφάνιση, προβλήματα ανάλυσης, σφάλματα 400/415 και τρωτά σημεία MIME sniffing.
  • Η κεφαλίδα X-Content-Type-Options: nosniff απενεργοποιεί την εικασία τύπου MIME από το πρόγραμμα περιήγησης και συνιστάται από το OWASP για όλες τις διαδικτυακές εφαρμογές.
  • Ο έλεγχος Content-Type σε δοκιμές API είναι υποχρεωτικός — κάθε τελικό σημείο πρέπει να επιστρέφει τον αναμενόμενο τύπο MIME που αντιστοιχεί στο πραγματικό περιεχόμενο της απάντησης.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης