Tajuk HTTP khusus: konvensi penamaan

Beberapa pengguna kami meminta kami untuk memasukkan data pada akun mereka di header HTTP dari permintaan yang kami kirim, atau bahkan tanggapan yang diterima dari API kami. Apa kesepakatan umum untuk menambahkan header HTTP Anda sendiri dalam hal penamaan , format ... dll.

Selain itu, jangan ragu untuk mempublikasikan data apa pun yang Anda temukan di Internet; Kami sedang berusaha untuk mencapai ini, menggunakan apa yang terbaik sebagai tujuan :)

883
25 авг. diatur oleh Julien Genestoux 25 Agustus. 2010-08-25 00:59 '10 pada 0:59 2010-08-25 00:59
@ 6 balasan

Pada Juni 2012, rekomendasi usang untuk menggunakan awalan "X-" menjadi resmi sebagai RFC 6648 . Berikut ini adalah tautan yang relevan:

3. Rekomendasi untuk pencipta parameter baru

...

  1. Anda TIDAK HARUS mengawali nama parameter Anda menggunakan "X-" atau konstruksi serupa.

4. Rekomendasi untuk pengembang protokol

...

  1. HARUS TIDAK melarang parameter dengan awalan "X-" atau konstruksi serupa dari pendaftaran.

  2. Ini TIDAK HARUS menunjukkan bahwa parameter dengan awalan "X-" atau konstruksi serupa harus dipahami sebagai non-standar.

  3. Ini TIDAK HARUS menetapkan bahwa parameter tanpa awalan "X-" atau konstruksi serupa harus dipahami sebagai standar.

Harap perhatikan bahwa "MUST NOT" ("discouraged") tidak sesuai dengan "MUST NOT" ("dilarang"), lihat juga RFC 2119 untuk spesifikasi berbeda untuk kata kunci ini. Dengan kata lain, Anda dapat terus menggunakan header awalan "X-", tetapi ini tidak disarankan, dan Anda tidak dapat mendokumentasikannya seolah-olah itu tersedia untuk umum.


Pada Juni 2011, proyek pertama x-gzip dan gzip sekarang setara), jadi rekomendasinya adalah cukup memanggil mereka secara wajar tanpa awalan "X-".


Rekomendasi adalah untuk memulai nama Anda dengan "X-". Sebagai contoh. X-Forwarded-For , X-Requested-With . Ini juga disebut dalam Bagian 5 RFC 2047 .

969
25 авг. jawabannya diberikan oleh BalusC 25 Agustus. 2010-08-25 01:02 '10 pada 1:02 2010-08-25 01:02

Pertanyaannya membaca u>

Dasar Pemikiran:
Kita berbicara tentang perjanjian antara pengembang untuk header aplikasi khusus pengguna - "data yang terkait dengan akun mereka" - yang tidak ada hubungannya dengan pemasok, badan standar, atau protokol yang harus dilaksanakan oleh pihak ketiga, kecuali bahwa pengembang, dalam pertanyaan, Anda hanya perlu menghindari tajuk yang mungkin memiliki tujuan berbeda untuk digunakan oleh server, proksi, atau klien. Karena alasan ini, contoh yang diberikan untuk "X-Gzip / Gzip" dan "X-Forwarded-For / Forwarded-For" kontroversial. Ini menimbulkan pertanyaan tentang konvensi dalam konteks API pribadi, mirip dengan konvensi penamaan parameter URL. Ini adalah masalah preferensi dan jarak antara nama; kekhawatiran tentang "X-ClientDataFoo", yang didukung oleh server proxy atau penyedia tanpa "X", jelas tidak relevan.

Awalan "X-" bukan hal yang istimewa atau magis, tetapi membantu memahami bahwa ini adalah tajuk khusus. Bahkan, RFC-6648 dan lainnya. Bantu mencegah penggunaan awalan "X-" karena - karena penyedia klien dan server HTTP menolak awalan - aplikasi Anda, API pribadi, data pribadi, mekanisme transfer bahkan lebih baik diisolasi dari tabrakan antara nama dan sejumlah kecil header yang dipesan secara resmi. Namun, preferensi dan rekomendasi pribadi saya adalah untuk me>

Spesifikasi IMHO IETF tidak cukup spesifik untuk menjawab pertanyaan OP, karena tidak dapat membedakan antara kasus penggunaan yang sama sekali berbeda: (A) penyedia yang mengimplementasikan fungsi-fungsi baru yang berlaku secara global, seperti "diteruskan", di satu sisi, vs. (B) pengembang aplikasi meneruskan string khusus aplikasi ke klien dan server. Spektrum hanya menyangkut yang pertama, (A). Pertanyaannya di sini adalah apakah ada perjanjian untuk (B). Ada. Ini termasuk pengelompokan parameter dalam urutan alfabet dan pemisahannya dari banyak header tipe yang memenuhi standar (A). Menggunakan awalan "X-" atau "X-ACME-" nyaman dan legal untuk (B) dan tidak bertentangan dengan (A). Semakin banyak penjual berhenti menggunakan "X-" untuk (A), semakin jelas mereka menjadi (B).

Contoh:
Google (yang membawa sedikit beban dalam berbagai badan standardisasi) - hari ini, 20141102 dalam sedikit perubahan dalam jawaban saya - saat ini menggunakan "X-Mod-Pagespeed" untuk menunjukkan versi modul Apache-nya yang berpartisipasi dalam mengubah jawaban ini. Adakah yang benar-benar menyarankan agar Google menggunakan "Mod-Pagespeed" tanpa "X-" dan / atau meminta IETF untuk memberkati penggunaannya?

Ringkasan:
Jika Anda menggunakan tajuk HTTP khusus (kadang-kadang alternatif yang cocok untuk kuki) dalam aplikasi Anda untuk mentransfer data ke server Anda, dan tajuk ini jelas tidak dimaksudkan untuk digunakan di luar konteks aplikasi Anda, di antara mereka diberikan "X-" atau "X-FOO- "awalan adalah konvensi yang wajar dan standar.

422
28 окт. balasan diberikan setiap minggu 28 Okt 2013-10-28 19:39 '13 pada 19:39 2013-10-28 19:39

Format tajuk HTTP didefinisikan dalam spesifikasi HTTP. Saya akan berbicara tentang HTTP 1.1, yang spesifikasi RFC 2616 . Bagian 4.2, "Header Pesan" mendefinisikan struktur umum header:

  message-header = field-name ":" [ field-value ] field-name = token field-value = *( field-content | LWS ) field-content = <the OCTETs making up the field-value and consisting of either *TEXT or combinations of token, separators, and quoted-string> 

Definisi ini didasarkan pada dua prinsip dasar, token dan TEXT. Keduanya didefinisikan di bagian 2.2 dari Aturan Dasar. Token:

  token = 1*<any CHAR except CTLs or separators> 

Pada gilirannya, mengandalkan CHAR, CTL dan pemisah:

  CHAR = <any US-ASCII character (octets 0 - 127)> CTL = <any US-ASCII control character (octets 0 - 31) and DEL (127)> separators = "(" | ")" | "<" | ">" | "@" | "," | ";" | ":" | "\" | <"> | "/" | "[" | "]" | "?" | "=" | "{" | "}" | SP | HT 

TEXT:

  TEXT = <any OCTET except CTLs, but including LWS> 

Di mana LWS adalah ruang kosong linier, definisi yang tidak akan saya mainkan, dan OCTET:

  OCTET = <any 8-bit sequence of data> 

Ada catatan yang menyertai definisi:

 The TEXT rule is only used for descriptive field contents and values that are not intended to be interpreted by the message parser. Words of *TEXT MAY contain characters from character sets other than ISO- 8859-1 [22] only when encoded according to the rules of RFC 2047 [14]. 

Jadi, dua kesimpulan. Pertama, jelas bahwa nama judul harus terdiri dari subset karakter ASCII - alfanumerik, beberapa tanda baca, dan tidak banyak lagi. Kedua, tidak ada dalam definisi nilai header, yang membatasi ASCII atau mengecualikan karakter 8-bit: itu jelas terdiri dari oktet, dan hanya karakter kontrol yang dilarang (perhatikan bahwa CR dan LF dianggap sebagai kontrol). Selain itu, komentar rilis TEXT menyiratkan bahwa oktet harus ditafsirkan sebagai ISO-8859-1, dan bahwa ada mekanisme pengkodean (yang mengerikan, omong-omong) untuk mewakili karakter di luar pengkodean ini.

Jadi, untuk jawaban ke @BalusC, khususnya, cukup jelas bahwa, sesuai dengan spesifikasi, nilai header sesuai dengan ISO-8859-1. Saya mengirim 8859-1 karakter berkualitas tinggi (khususnya, beberapa vokal beraksen, seperti yang digunakan dalam bahasa Prancis) di tajuk Tomcat, dan menafsirkannya dengan benar ke Firefox, jadi sampai batas tertentu ia berfungsi baik dalam praktik maupun dalam teori (meskipun itu adalah Lokasi, yang berisi URL, dan karakter ini bukan URL yang sah, jadi sebenarnya ilegal, tetapi di bawah aturan yang berbeda!).

Namun, saya tidak akan bergantung pada ISO-8859-1, berjalan di semua server, proksi, dan klien, jadi saya akan tetap menggunakan ASCII sebagai pemrograman defensif.

57
25 авг. Jawab Tom Anderson 25 Agu 2010-08-25 22:49 '10 pada 10:49 2010-08-25 22:49

Registri nama bidang header didefinisikan dalam RFC3864 , dan tidak ada yang istimewa dengan "X -".

Sejauh yang saya tahu, tidak ada rekomendasi untuk pos pribadi; ragu, hindari mereka. Atau lihat Kerangka Ekstensi HTTP ( RFC 2774 ).

Akan menarik untuk mempelajari lebih lanjut tentang penggunaan; Mengapa informasi tidak dapat ditambahkan ke badan pesan?

15
25 авг. Balas diberikan oleh Julian Reschke pada 25 Agustus 2010-08-25 09:44 '10 pada 9:44 2010-08-25 09:44

Mengubah atau, lebih tepatnya, menambahkan header HTTP tambahan adalah alat yang hebat untuk debugging kode, jika tidak ada yang lain.

Ketika permintaan URL mengembalikan pengalihan atau gambar, tidak ada halaman html untuk merekam sementara hasil kode debugging, setidaknya satu yang tidak ditampilkan di browser.

Salah satu pendekatan adalah menulis data ke file log lokal dan melihat file ini nanti. Lain adalah penambahan sementara HTTP header, yang mencerminkan data dan variabel yang di-debug.

Saya secara teratur menambahkan header HTTP tambahan, seperti X-fubar-somevar: atau X-testing-someresult: untuk memeriksa semuanya, dan menemukan banyak kesalahan yang kalau tidak akan sangat sulit dilacak.

14
04 июля '11 в 12:29 2011-07-04 12:29 jawabannya diberikan oleh g1smd pada 04 Juli '11 pada 12:29 2011-07-04 12:29

RFC6648 merekomendasikan menyarankan bahwa tajuk khusus Anda "dapat menjadi terstandarisasi, tersedia untuk umum, biasanya digunakan atau digunakan dalam banyak implementasi." Oleh karena itu, ia merekomendasikan untuk tidak mengawali dengan "X-" atau konstruksi serupa.

Namun, ada pengecualian: "ketika sangat tidak mungkin [judul Anda] akan distandarisasi." Untuk header "implementasi khusus dan penggunaan pribadi" seperti itu, RFC mengatakan bahwa namespace, seperti awalan vendor, dibenarkan.

2
24 июля '18 в 16:50 2018-07-24 16:50 jawabannya diberikan oleh Edward Brey 24 Juli '18 pukul 16:50 2018-07-24 16:50

Pertanyaan lain tentang tag atau Ask a Question