Apa q = 0,5 di Terima * HTTP header?

191
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7

Apa arti 'q =% f' ini?

kolypto
sumber

Jawaban:

247

Ini disebut faktor kualitas relatif . Ini menentukan bahasa apa yang diinginkan pengguna, pada skala 0 hingga 1, seperti yang dapat dilihat dari Spesifikasi HTTP / 1.1, §14.4 :

Setiap rentang bahasa MUNGKIN diberi nilai kualitas terkait yang mewakili perkiraan preferensi pengguna untuk bahasa yang ditentukan oleh rentang itu. Nilai kualitas default ke "q = 1". Sebagai contoh,

  Accept-Language: da, en-gb;q=0.8, en;q=0.7

berarti: "Saya lebih suka bahasa Denmark, tetapi akan menerima bahasa Inggris Inggris dan jenis bahasa Inggris lainnya."

Tim Cooper
sumber
26
Bagus sekali, terima kasih! Tetapi mengapa tidak mendaftar saja dalam urutan pilihan?
kolypto
9
Jadi apa sebenarnya artinya menerima 80% kualifikasi en-gb?
Pacerier
3
@Pacerier: Ini berarti, jika situs web Anda multibahasa, pengguna lebih suka konten yang disajikan dalam bahasa Inggris Inggris, daripada bahasa Inggris Amerika.
Tim Cooper
5
@TimCooper Mengapa tidak memiliki bahasa sesuai urutan atau preferensi? Nilai itu tampaknya tidak penting, selain lebih besar dari yang lain.
Rob
6
ke @kolypto, daftar parameter, baik di URL atau di header tidak memiliki urutan tersirat.
JP Silvashy
37

Ini disebut faktor kualitas relatif dalam spesifikasi:

Setiap rentang media MUNGKIN diikuti oleh satu atau lebih params, dimulai dengan parameter "q" untuk menunjukkan faktor kualitas relatif. Parameter "q" pertama (jika ada) memisahkan parameter rentang-media dari parar terima. Faktor kualitas memungkinkan pengguna atau agen pengguna untuk menunjukkan tingkat preferensi relatif untuk rentang media tersebut, menggunakan skala nilai qv dari 0 hingga 1 (bagian 3.9). Nilai standarnya adalah q = 1.

...

Contoh

Accept: audio/*; q=0.2, audio/basic

HARUS diartikan sebagai "Saya lebih suka audio / dasar, tetapi kirimi saya jenis audio apa pun jika yang terbaik tersedia setelah penurunan kualitas 80%."

Lihat juga:

Sebastian Paaske Tørholm
sumber
2
Aku benar-benar terlambat ke pesta - tapi apa maksudmu "setelah penurunan 80% dalam kualitas"? Ini tingkat preferensi, bukan kualitas file audio, bukan? Atau apakah saya salah membaca ini?
Mave
10
@Mave: Ya, dalam praktiknya mungkin sebagian besar digunakan sebagai ukuran preferensi. Namun, dalam formulasi aslinya, saya percaya itu dimaksudkan untuk didasarkan pada kualitas pengkodean. Pertimbangkan, misalnya, FLAC vs MP3. Anda bisa mengatakan sesuatu seperti: "Kirimi saya versi MP3 jika yang terburuk adalah 50% dari kualitas versi tanpa kerugian. Jika tidak, kirim saya versi FLAC." Bagaimana cara mengukur kualitas seperti itu, dan apakah itu digunakan dalam praktik, saya tidak tahu, tetapi saya yakin itu adalah niat awal.
Sebastian Paaske Tørholm
1
@ SebastianPaaskeTørholm Saya datang ke sini mencari info lebih lanjut tentang ini. Hanya ada dua tempat di RFC 7231 yang tampaknya mengisyaratkan arti sekunder ini, tetapi tidak terlalu jelas bagi saya bagaimana itu dimaksudkan untuk bekerja, karena dua makna dapat saling bertentangan - misalnya sepertinya tidak mungkin untuk mengekspresikan preferensi untuk tipe lossier daripada tipe yang kurang rugi jika qvalue dibebani dengan cara ini.
Titik koma
apakah bahasa yang paling disukai selalu menjadi parameter pertama di header?
oldboy
@BugWhisperer Standar yang ditautkan memiliki contoh yang lebih rumit, di mana itu bukan yang pertama. Silakan berkonsultasi. :)
Sebastian Paaske Tørholm
6

Parameter kualitas accept-languages ​​dapat dipahami seperti ini:

dengan melampirkan Accept-Language: pl_PL;q=0.8, en_US;q=0.2,tajuk ke permintaan kami berkomunikasi ke server berikut pesan

Server, tolong berikan saya terjemahan bahasa Polandia dari situs web ini, tapi tolong lakukan itu hanya jika kualitasnya >= %80% terkait faktor kualitas. Dalam hal kualitas <80%- saya tidak keberatan mendapatkan versi bahasa Inggris, karena itu tidak relevan bagi saya karena saya tetap berbicara bahasa Inggris.

Jadi misalnya, sebagai penyedia konten halaman web kami dapat memperkenalkan Accept-Languagepenguraian tajuk sedemikian rupa, sehingga situs web kami cocok untuk orang asing yang tidak berbahasa Inggris sama sekali (bahkan navigasi yang diterjemahkan pun akan sangat membantu (halaman yang hanya menerjemahkan navigasi saja, katakan saja , have q=0.1), di mana konten yang sepenuhnya diterjemahkan memiliki q=0.9dan sepenuhnya diterjemahkan konten dan diverifikasi oleh penutur asli yang berbicara bahasa asli dan konten bahasa terjemahan mungkin q=0.99- karena ini adalah satu-satunya situasi yang mungkin ketika makna konten sepenuhnya ditransduksi)

test30
sumber
apakah bahasa yang paling disukai selalu menjadi parameter pertama di header?
oldboy
@BugWhisperer ya, tetapi jika Anda ingin benar-benar ketat dengan standar dan jika terjemahan Anda cukup sederhana atau lemah - Anda mungkin ingin melewatkan nilai pertama
test30
mengapa menggunakan nilai kedua lebih ketat?
oldboy