HTTP শিরোনামের জন্য আমার কোন অক্ষর এনকোডিং ব্যবহার করা উচিত?


122

আমি একটি HTTP- শিরোনামের জন্য একটি "মজাদার" এইচটিএমএল বিশেষ চরিত্র (✰) ( আরও তথ্যের জন্য http://html5boilerplate.com/ দেখুন) ব্যবহার Serverকরছি এবং ভাবছি যে এটি অনুমান অনুযায়ী "অনুমোদিত" আছে কিনা।

  • উইন্ডোজ এক্সপি প্রো এসপি 3-এ ক্রোমের ডেভ সরঞ্জামগুলিতে নেটওয়ার্ক ট্যাবটি ব্যবহার করা আমি দেখছি। ঠিক আছে।

  • আইই 8-তে সঠিকভাবে রেন্ডার করা হয় না

  • W3.org এইচটিএমএল যাচাইকারী নেই না এটি সঠিকভাবে রেন্ডার (প্রদর্শন " â°" এর পরিবর্তে)।

এখন, আমি চরিত্রের এনকোডিংগুলিতে খুব আগ্রহী নই ... এবং সত্যই আমি তাদের সম্পর্কে খুব বেশি যত্ন করি না; আমি কেবল অন্ধভাবে ইউটিএফ -8 সিউস ব্যবহার করেছি যা আমাকে বলা হয়েছে। :-)


বিভিন্ন পার্সার / ব্রাউজ / ইঞ্জিন / (যা-তারা-যা বলা হোক না কেন) -তে বাগের কারণে বৈষম্য দেখা দেয়?

এটির জন্য কোনও অনুমান বা সম্ভবত কোনও HTTP- শিরোনাম "মান" এর জন্য অনুমোদিত অক্ষরের একটি তালিকা রয়েছে?


29
এই প্রশ্নটি সাধারণত আরও ভালভাবে জিজ্ঞাসিত হবে: "কোন HTTP শিরোনামের
মানতে


2
"এখন, আমি চরিত্রের এনকোডিংগুলিতে খুব আগ্রহী নই ... এবং সত্যই আমি তাদের সম্পর্কে খুব বেশি যত্ন নিই না; আমি কেবল অন্ধভাবে ইউটিএফ -8 ব্যবহার করি যা আমাকে বলা হয়েছে। :-)" <--- - joelonsoftware.com/2003/10/08/…
d4nyll

উত্তর:


124

সংক্ষেপে: কেবল ASCII কাজ করার গ্যারান্টিযুক্ত। কিছু অ ASCII বাইট পিছনের সামঞ্জস্যের জন্য অনুমোদিত, তবে প্রদর্শনযোগ্য হবে না বলে মনে করা হয়।

এইচটিটিপিবিস হাল ছেড়ে দিয়ে উল্লেখ করেছে যে হেডারে ASCII ছাড়া কোনও কার্যকর এনকোডিং নেই:

Orতিহাসিকভাবে, এইচটিটিপি আইএসও -8859-1 চরসেট [আইএসও -8859-1] এর পাঠ্যযুক্ত ক্ষেত্রের সামগ্রীর অনুমতি দিয়েছে, কেবল [আরএফসি2047] এনকোডিংয়ের মাধ্যমে অন্যান্য অক্ষরগুলি সমর্থন করে। অনুশীলনে, বেশিরভাগ HTTP শিরোলেখের ক্ষেত্রের মানগুলি কেবল US-ASCII অক্ষর [USASCII] এর উপসেট ব্যবহার করে। নতুনভাবে সংজ্ঞায়িত শিরোলেখ ক্ষেত্রগুলি তাদের ক্ষেত্রের মানগুলি US-ASCII অক্টেটের মধ্যে সীমাবদ্ধ করতে হবে। একজন প্রাপক ক্ষেত্রের সামগ্রীতে (অজস্র-পাঠ্য) অন্যান্য অক্টেটকে অস্বচ্ছ ডেটা হিসাবে বিবেচনা করবেন।


পূর্বে, 1999 থেকে আরএফসি 2616 এটি সংজ্ঞায়িত করেছে:

* পাঠ্য মেয়ের শব্দেরগুলিতে আইএসও- 8859-1 [22] ব্যতীত অক্ষর সেটগুলি থেকে অক্ষর রয়েছে কেবল তখনই আরএফসি 2047 [14] এর নিয়ম অনুসারে এনকোড করা হয়েছে।

এবং আরএফসি 2047 হ'ল মাইম এনকোডিং , তাই এটি হ'ল :

=?UTF-8?Q?=E2=9C=B0?=

তবে আমি মনে করি না যে অনেক (যদি থাকে) ক্লায়েন্টরা এটি সমর্থন করে।


7
সুতরাং যে কি মানে? "✰" বৈধ / অনুমোদিত?
ডেভিড মারডোক

8
খুব দরকারী উত্তরের উপর কিছুটা প্রসারিত করার জন্য: "ইউটিএফ -8" হ'ল অক্ষর সেট, এবং "কিউ" মানে মানটি "উদ্ধৃত-মুদ্রণযোগ্য" হবে। "B" ব্যবহার করা যেতে পারে যদি আপনি BASE64-মানটি এনকোড করতে চান।
গারগান্টুচেট

1
@ পার্নেল, সুতরাং "অস্বচ্ছ ডেটা" বলতে কী বোঝায়? HTTP প্রাপককে ঠিক কী হওয়া উচিত should না যখন এটি এই "অস্বচ্ছ ডেটা" পায়?
পেসারিয়ার

1
@ পেসারিয়ার "অস্বচ্ছ ডেটা" এর অর্থ এটি একটি কালো বাক্স যা একগুচ্ছ বাইট রয়েছে যা অ্যাপ্লিকেশনগুলিকে প্রদর্শন বা ব্যাখ্যা করার চেষ্টা করা উচিত নয় (বাইনারি ডেটার মতো)। এটির সাথে যা ঘটে তা শিরোনামের উপর নির্ভর করে, "কিছুই না" থেকে "বাতিল" পর্যন্ত হতে পারে।
কর্নেল

@ কর্নেল, বিটিডব্লিউ কেন আপনি আপনার ব্যবহারকারীর নামটি কর্নেল পরিবর্তন করলেন?
পেসারিয়ার

10

দয়া করে প্রথমে মন্তব্যগুলি পড়ুন, এই উত্তরটি সম্ভবত সঠিক উত্স থেকে ভুল উপসংহার টানছে, সম্পাদনা প্রয়োজন।


আপনি যে কোনও মুদ্রণযোগ্য ASCII অক্ষর ব্যবহার করতে পারেন, এবং ✰ (যা ASCII নয় ) এর মতো কোনও বিশেষ অক্ষর ব্যবহার করতে পারেন

টিপ : আপনি JSON এ যে কোনও কিছু এনকোড করতে পারবেন।

সম্পাদনা : প্রথমে সুস্পষ্ট নাও হতে পারে, শিরোনামে সংজ্ঞায়িত চরিত্রের এনকোডিংটি কেবলমাত্র শিরোনামের জন্য নয়, প্রতিক্রিয়া বডির জন্য প্রযোজ্য। (যেহেতু এটি একটি মুরগির সৃষ্টি করে - এবং - ডিমের সমস্যা।)


আমি অনুযায়ী সমস্ত প্রাসঙ্গিক সংজ্ঞা যোগফল চাই বৈশিষ্ট ঝোঁক দ্বারা সংযুক্ত।

message-header = field-name ":" [ field-value ]
field-name     = token
field-value    = *( field-content | LWS )

সুতরাং, আমরা পরে ক্ষেত্রের মান

LWS            = [CRLF] 1*( SP | HT )
CRLF           = CR LF
CR             = <US-ASCII CR, carriage return (13)>
LF             = <US-ASCII LF, linefeed (10)>
SP             = <US-ASCII SP, space (32)>
HT             = <US-ASCII HT, horizontal-tab (9)>

এলডাব্লুএস মানে লিনিয়ার হোয়াইট স্পেস। মূলত, এলডাব্লুএস হ'ল স্পেস বা ট্যাব তবে আপনার স্পেস বা ট্যাবের আগে নতুন লাইন শুরু করে আপনি আপনার ক্ষেত্রের মানটি একাধিক লাইনে বিভক্ত করতে পারেন।

আসুন এটি এটিকে সরল করুন:

field-value    = <any field-content or Space or Tab>

এখন আমরা ক্ষেত্র-বিষয়বস্তু পরে ।

field-content  = <the OCTETs making up the field-value
                 and consisting of either *TEXT or combinations
                 of token, separators, and quoted-string>
OCTET          = <any 8-bit sequence of data>
TEXT           = <any OCTET except CTLs,
                 but including LWS>
CTL            = <any US-ASCII control character
                 (octets 0 - 31) and DEL (127)>
token          = 1*<any CHAR except CTLs or separators>
separators     = "(" | ")" | "<" | ">" | "@"
                 | "," | ";" | ":" | "\" | <">
                 | "/" | "[" | "]" | "?" | "="
                 | "{" | "}" | SP | HT

পাঠ্যটি সর্বাধিক সাধারণ এবং বাকি সমস্তগুলি অন্তর্ভুক্ত করে - বাকিগুলি সম্পর্কে ভুলে যান। এখানে ইউএস-এএসসিআইআই চরসেট (= ASCII)

আপনি দেখতে পাচ্ছেন, সমস্ত মুদ্রণযোগ্য এএসসিআইআই অক্ষর অনুমোদিত।


3
আপনি যে উদ্ধৃতিগুলি উদ্ধৃত করেছেন তার সাথে আপনি বিরোধিতা করছেন। আপনি কেন বলেন এবং "like" এর মতো কোনও বিশেষ অক্ষর নেই? বিশেষ অক্ষর মাত্র হয় OCTETs, এবং যেহেতু TEXTকোনো হল OCTETব্যতীত 0 - 31যে সমস্ত, এর মানে হল OCTETএর থেকে 32থেকে 255 অনুমতি দেওয়া হয় । ✰ এর অক্টেট হয় 226, 156এবং 176তাদের সব তিনটি অনুমতি দেওয়া হয় প্যাসেজ আপনি উদ্ধৃত অনুযায়ী, অতএব ✰ অনুমোদিত হয়।
পেসিয়ার

2
@ পেসারিয়র আপনি পুরোপুরি সঠিক বলে মনে হচ্ছে, আমি কেন আমার উপসংহার টানলাম তা আমি দেখতে পাচ্ছি না।
zupa

@ পেসারিয়র এখনও আমি এটিকে সম্পাদনা করতে প্রস্তুত নই কারণ আমাকে আবারও চেকটি পরীক্ষা করতে হবে। আমি আশঙ্কা করি যে অতিরিক্ত বিবরণ ইউএস-এএসসিআইআই চারসেটে সীমাবদ্ধ রয়েছে যা ফলস্বরূপ সিদ্ধান্তটিকে সমর্থন করবে তবুও যুক্তি অপর্যাপ্ত।
zupa

1
"আপনি JSON এ যে কোনও কিছুই এনকোড করতে পারেন" বলা কিছুটা বিভ্রান্তিকর। জেএসএন ইউনিকোড অক্ষরগুলির জন্য অনুমতি দেয়, অন্যদিকে, এইচটিটিপি শিরোনামটি ইউএস-এএসসিআইআই হওয়া উচিত। ইউনিকোড অক্ষরগুলিকে "অস্বচ্ছ" ডেটা হিসাবে বিবেচনা করা হবে এবং এই জাতীয় আচরণটি এইচটিটিপি স্পেসিফিকেশন দ্বারা সংজ্ঞায়িত করা হয়েছে। বলা হচ্ছে, S ইউএক্সএক্সএক্সএক্সএক্স সিকোয়েন্স সিকোয়েন্সের মাধ্যমে ইউনিকোড অক্ষরগুলি পালিয়ে একটি HTTP শিরোনামকে অন্তর্ভুক্তির জন্য JSON কে নিরাপদ করা যেতে পারে।
জ্যাকব

@ জুপা, অন্য একটি বিষয় ... " ব্যতীতCTLs " এর অর্থ কী? এটা অক্ষর মানে CR, LFঅনুমতি দেওয়া হয়? বা এর অর্থ কি কেবল ধারাবাহিক ক্রম " CR LF SP/ HT" অনুমোদিত? (অন্য কথায়, শিরোলেখ করতে মান একটি একক ধারণ CRবা LFবা HTক্যান হেডার মান অক্ষর? CR, LF, এবং HTকোনো অর্ডার ও পরিমাণ?)
Pacerier
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.