Apakah perlu menentukan tipe konten di header respons http?

8

Kecuali untuk dokumen html, saat ini semua file (css, javascript dan gambar) yang disajikan dari server web saya tidak menentukan content-typedalam header respons http. Saya kebetulan melihat ini ketika saya bermaksud untuk menghapus typeatribut di kedua scripttag dan linktag saya, tetapi menemukan jawaban ini yang mengatakan sebagai berikut:

Tipe MIME juga dikirim melalui header Tipe Konten HTTP, jadi menggunakan type = "text / css" hanya akan menjadi byte tambahan.

Pertanyaan Melimpah
sumber
2
Saya yakin Anda perlu menentukan Tipe Konten untuk dieksekusi skrip di IE. Ini untuk mencegah pengguna jahat mengunggah skrip ke situs web berbagi gambar.
Brendon
@ Brendon, terima kasih telah menunjukkan implikasi keamanan. Apakah ada aspek lain yang perlu diperhatikan, dari sisi keamanan, dengan asumsi tidak ada konten yang diunggah pengguna?
Pertanyaan Overflow
1
Apakah Anda yakin server Anda tidak mengirim Content-Typetajuk untuk file-file ini? Jika Anda melihat respons dari file yang disajikan dari cache browser Anda, maka Anda mungkin tidak akan melihat Content-Typeheader.
MrWhite
Sebagian besar server akan mengirim tipe mime yang benar secara default, jadi kecuali Anda secara eksplisit mengatur server Anda untuk tidak mengirimnya, saya yakin file - file tersebut sedang dikirim dengan tipe mime yang benar.
DisgruntledGoat
1
@ w3d, terima kasih atas komentar Anda. Saya menyadari setelah memeriksa kembali bahwa apa yang saya baca sebenarnya dari header permintaan 304 not modifiedfile. Tidak persis cache, tetapi tipe konten dijatuhkan dari header. Menonaktifkan cache, semuanya tampak normal kembali.
Pertanyaan Overflow

Jawaban:

7

Ya . Dengan protokol HTTP, klausul 7.2.1 :

“Setiap pesan HTTP / 1.1 yang berisi entitas-badan HARUS menyertakan bidang header Tipe-Konten yang mendefinisikan tipe media dari tubuh itu. Jika dan hanya jika jenis media tidak diberikan oleh bidang Jenis-Konten, penerima MUNGKIN mencoba menebak jenis media melalui pemeriksaan kontennya dan / atau ekstensi nama URI yang digunakan untuk mengidentifikasi sumber daya. "

Jadi ya, header respons harus berisi Content-Typeheader untuk data respons apa pun (disebut "entitas-tubuh" dalam protokol, sering "file" dalam bahasa umum). Jika dihilangkan, browser diizinkan untuk membuat tebakan sendiri tentang jenis data yang didapatnya. Dalam banyak konteks, risiko tebakan yang salah dapat diabaikan, tetapi ini bukan alasan yang baik untuk melanggar protokol.

Atribut suka type=text/cssdan type=text/javascriptbelum diperlukan, kecuali oleh beberapa spesifikasi formal, atau bahkan berguna. Bahkan jika server salah mengirim mis. Data CSS tanpa Content-Type, browser akan memperlakukan data sebagai CSS jika <link rel=stylesheet ...>merupakan elemen yang menyebabkan permintaan. Ini adalah relatribut yang penting dalam kasus itu.

Jukka K. Korpela
sumber