স্থানান্তর-এনকোডিং: গিজিপ বনাম সামগ্রী Enc এনকোডিং: জিজিপ


102

কী করা উচিত তা নিয়ে বর্তমান পরিস্থিতি কী is

Transfer-Encoding: gzip

বা ক

Content-Encoding: gzip

যখন আমি উদাহরণস্বরূপ সীমিত ব্যান্ডউইদথ সহ ক্লায়েন্টদের সংকোচিত প্রতিক্রিয়া স্বীকার করার জন্য তাদের ইচ্ছাকে সিগন্যাল করার অনুমতি দিতে চাই এবং সার্ভারকে সংকোচনের জন্য চূড়ান্তভাবে বলতে হবে

পরেরটি হ'ল উদাহরণস্বরূপ, অ্যাপাচি-র Mod_deflate এবং IIS কি করে, যদি আপনি এটি সংক্ষেপণের যত্ন নিতে দেন। বিষয়বস্তু আকার সংকুচিত করা নির্ভর করে, অতিরিক্ত কি করতে হবে Transfer-Encoding: chunked

এটিতে একটি অন্তর্ভুক্ত থাকবে Vary: Accept-Encodingযা ইতিমধ্যে সমস্যার দিকে ইঙ্গিত দেয়। Content-Encodingসত্তার অংশ বলে মনে হচ্ছে, সুতরাং সত্তার পরিবর্তনের Content-Encodingপরিমাণের পরিবর্তনের অর্থ, যেমন একটি ভিন্ন Accept-Encodingশিরোনাম মানে যেমন একটি ক্যাশে অন্যথায় অভিন্ন সত্তার ক্যাশেড সংস্করণটি ব্যবহার করতে পারে না।

আমি কি মিস করেছি এ সম্পর্কে একটি সুনির্দিষ্ট উত্তর আছে (এবং এটি কোনও অ্যাপাচে নিউজগ্রুপে একটি দীর্ঘ থ্রেডে কোনও বার্তার অভ্যন্তরে দাফন করা হয়নি)?

আমার বর্তমান ধারণাটি হ'ল:

  • স্থানান্তর-এনকোডিংটি আসলে সার্ভার এবং ক্লায়েন্ট ইমপিলেশন দ্বারা কন্টেন্ট-এনকোডিংয়ের মাধ্যমে যা করা হয় তা করার সঠিক উপায় হবে fact
  • বিষয়বস্তু-এনকোডিং এর অর্থগত প্রভাবগুলির কারণে, বেশ কয়েকটি সমস্যা বহন করে ( ETagস্বচ্ছভাবে কোনও প্রতিক্রিয়া সংকুচিত করার সময় সার্ভারের কী করা উচিত ?)
  • কারণটি মুরগি'নেগ: ব্রাউজারগুলি এটি সমর্থন করে না কারণ সার্ভারগুলি ব্রাউজারগুলি না করায়

সুতরাং আমি ধরে নিচ্ছি যে সঠিক উপায়ে একটি হতে পারে Transfer-Encoding: gzip(বা, যদি আমি অতিরিক্তভাবে শরীরকে ছাঁটাই করি তবে তা হয়ে যাবেTransfer-Encoding: gzip, chunked )। এবং এটি স্পর্শ করার কোনও কারণ Varyবা ETagবা অন্য কোনও শিরোনাম কারণ এটি পরিবহন-স্তরের জিনিস।

আপাতত আমি 'হপ-বাই-হপ'-নেস সম্পর্কে খুব বেশি যত্ন নিই না Transfer-Encoding, এমন কিছু যা অন্যরা প্রথম এবং সর্বাগ্রে উদ্বিগ্ন বলে মনে হয়, কারণ প্রক্সিগুলি ক্লায়েন্টের কাছে সংকোচিত এবং সামনের দিকে ঝুঁকতে পারে। যাইহোক, প্রক্সিগুলিতে ঠিক যেমনটি এটি সংক্ষেপিত (সংকুচিত) ফরোয়ার্ড করা যেতে পারে, যদি মূল অনুরোধটির যথাযথ Accept-Encodingশিরোনাম থাকে, যা আমার জানা সমস্ত ব্রাউজারগুলির ক্ষেত্রে দেওয়া হয়।

বিটিডব্লিউ, এই সমস্যাটি কমপক্ষে এক দশক পুরানো, উদাহরণস্বরূপ দেখুন https://bugzilla.mozilla.org/show_bug.cgi?id=68517

এ সম্পর্কে যে কোনও ব্যাখ্যা প্রশংসিত হবে। উভয় ক্ষেত্রেই কী মান-সম্মতিযুক্ত এবং কোনটি ব্যবহারিক হিসাবে বিবেচিত হয়। উদাহরণস্বরূপ, এইচটিটিপি ক্লায়েন্ট লাইব্রেরিগুলি কেবল স্বচ্ছ "কন্টেন্ট-এনকোডিং" সমর্থন করা ব্যবহারিকতার বিরুদ্ধে যুক্তি হিসাবে কাজ করবে।


4
সম্পর্কিত: stackapps.com/questions/916/…
জো লিস

শুধু এই মধ্যে দৌড়ে। পিএইচপি 5.3 এ Transfer-Encoding:gzipকার্ল বুঝতে পারে না , যদিও কমান্ড লাইন কার্ল করে। নিরাপদ দিকে থাকতে, উভয়কেই প্রেরণ করুন, যদি না আপনি ছিটেড এবং জিপ-এর সমন্বয় করেন।
সেবা আলেক্সেয়েভ

4
@ শেভাআলেকসেয়েভ উভয়কেই পাঠানো খুব ভুল হবে - ক্লায়েন্টরা দু'বার সঙ্কোচনের চেষ্টা করতে পারে
জোশুয়া ওয়াইজ

এটি এমন কিছু যা আমাকে চিরকাল ধরে ফেলেছে ( আমি যে প্রশ্নটি জিজ্ঞাসা করেছি ) ... @ জোলিস উদ্ধৃত প্রশ্নের উত্তরগুলির মধ্যে প্রতিটিতে অনুরোধ / প্রতিক্রিয়া সংস্থাগুলি সংক্ষিপ্ত করার জন্য একদম যৌক্তিক, শব্দার্থগতভাবে সুসংহত এবং মান-সম্মত উপায় আছে ... এবং মূলত কোনও ক্লায়েন্ট / সার্ভার এটি ব্যবহার বা সমর্থন করে না।
ড্যান

উত্তর:


35

আরএফসি 2616 এর অন্যতম লেখক রয় টি ফিল্ডিংয়ের উদ্ধৃতি :

অসামঞ্জস্যভাবে ফ্লাইতে কন্টেন্ট-এনকোডিং পরিবর্তন করা ("কখনই নয়" বা "সর্বদা নয়) সেই বিষয়বস্তু সম্পর্কিত পরবর্তী অনুরোধগুলির (যেমন, পুট বা শর্তসাপেক্ষে জিইটি) সঠিকভাবে পরিচালনা করা অসম্ভব করে তোলে is এটি অবশ্যই কেন সম্পাদন করছে অন-দ্য ফ্লাই কনটেন্ট-এনকোডিং একটি মূ .় ধারণা এবং কেন আমি সংস্থান পরিবর্তন না করে ফ্লাইট এনকোডিং করার সঠিক উপায় হিসাবে এইচটিটিপিতে স্থানান্তর-এনকোডিং যুক্ত করেছি।

সূত্র: https://issues.apache.org/bugzilla/show_bug.cgi?id=39727#c31

অন্য কথায়: ফ্লাই অন কন্টেন্ট-এনকোডিং করবেন না , পরিবর্তে স্থানান্তর-এনকোডিং ব্যবহার করুন!

সম্পাদনা করুন: এটি হ'ল যদি আপনি গ্রাহকদের কাছে জিপিড কনটেন্ট পরিবেশন করতে না চান যারা কেবলমাত্র সামগ্রী-এনকোডিং বোঝে । যা দুর্ভাগ্যক্রমে তাদের বেশিরভাগ বলে মনে হচ্ছে। তবে সচেতন থাকুন যে আপনি অনুমানের ক্ষেত্রগুলি ছেড়ে গেছেন এবং ফিল্ডিংয়ের পাশাপাশি অন্যদের দ্বারা উল্লিখিত একটি যেমন যেমন ক্যাশে প্রক্সি জড়িত রয়েছে তখন সমস্যাগুলি ছড়িয়ে পড়তে পারে।


4
সুতরাং আমি যদি এটি সঠিকভাবে পাই তবে: ১. বিষয়বস্তু-এনকোডিংটি অ্যাবস্ট্রাক্টের সার্ভারে থাকা সামগ্রীর এনকোডিংকে বোঝায়, অর্থাৎ সামগ্রীতে ধারাবাহিকভাবে সার্ভারের দ্বারা নির্দিষ্ট এনকোডিংয়ে পরিবেশন করা হবে। ২. ট্রান্সফার-এনকোডিংটি এনকোডিংকে বোঝায় সার্ভারটি এটি ব্যবহারকারীর এজেন্টকে এই উদাহরণে দেওয়ার জন্য, যেমন এই প্রতিক্রিয়াতে ব্যবহার করার সিদ্ধান্ত নিয়েছে। শুধু নিশ্চিত হয়েইছি আমি আপনার উত্তরটির ভুল ব্যাখ্যা দিচ্ছি না।
ডট স্ল্যাশ হ্যাক

31
ঠিক আছে অন্য একটি উপায় রাখুন: চশমা অনুসারে, ট্রান্সফার-এনকোডিং একটি খাঁটি পরিবহন স্তর বিশদ , অর্থাত্ একটি মধ্যবর্তী প্রক্সি সেই স্তরে যেমন gzip কম্প্রেশন পূর্বাবস্থায় ফ্রি মুক্ত, যেখানে সামগ্রী-এনকোডিং একটি ব্যবসায়িক স্তর বৈশিষ্ট্য , যা প্রক্সি হবে না অন্যান্য র‌্যামফিকেশন (ETags ইত্যাদি) ছাড়াও পরিবর্তনের অনুমতি দেওয়া হয়েছে। বাস্তবতার মতে , টি সাধারণত সাধারণত সংক্ষেপণের জন্য ব্যবহৃত হয় না, এবং অনেক সার্ভার / ক্লায়েন্ট এমনকি এটি বাক্সের বাইরেও সমর্থন করে না, অন্যদিকে সিই আরও বা কম ব্যবহার করা হয় যেভাবে টিই ব্যবহার করার ইচ্ছা ছিল : ট্রান্সপোর্ট লেয়ার বিশদ হিসাবে ।
এভেজিনি বেরেজোভস্কি

4
সুতরাং আমরা রায় টি। ফিল্ডিংয়ের পরামর্শ উপেক্ষা করার জন্য বাস্তবে বাধ্য?
ডট স্ল্যাশ হ্যাক 23

11
@ কেমহেইন্ডেলস আপনি বাইরে যেতে এবং প্রথমে সমস্ত ওপেন সোর্স এইচটিটিপি ক্লায়েন্ট / সার্ভার বাস্তবায়নে টিই সমর্থন যুক্ত করার জন্য আদর্শবাদ দ্বারা বাধ্য। তারপরে ক্লোজ-সোর্স এইচটিটিপি বাস্তবায়নকারী প্রতিটি সংস্থায় নিজেকে নিযুক্ত করুন (আমি মনে করি এটি কেবল মাইক্রোসফ্ট) এবং সেখানে বৈশিষ্ট্যটি যুক্ত করুন। এর পরে, বাস্তবতা এবং চশমা মিলবে। ;) (এবং এইচটিটিপি ২.০ প্রকাশিত হবে, সমস্যাটি যেভাবেই দূরে সরিয়ে দেবে)
এভেজেনি বেরেজভস্কি

10
আপনি স্থানান্তর-এনকোডিংকে সমর্থন করেন তা ইঙ্গিত করে এখনও স্থানান্তর-এনকোডিংয়ের মাধ্যমে আপনি জিজিপ সমর্থন করেন তা স্পষ্ট করে না, যাতে এটি আপনার কোনও জিনিস কেনা না doesn't ইঙ্গিতটি অন্যভাবে করা হয় : যেকোন ক্লায়েন্ট যিনি ট্রান্সফার-এনকোডিংয়ের মাধ্যমে জিজিপ করতে পারেন সেটি সেট করে সার্ভারকে জানাতে হবে TE: gzip। এবং তারপরে আপনার সার্ভারটি স্থানান্তর-এনকোডিং রুটে যেতে হবে। ক্লায়েন্ট যদি কেবল বলে Accept-Encoding: gzip, আপনাকে এটি করতে হবে Content-Encoding। ক্লায়েন্ট যদি তার অনুরোধে দু'টিও নির্দিষ্ট করে না থাকে তবে সার্ভারটি অবশ্যই জিজিপ করবে না।
এভেজেনি বেরেজভস্কি

28

সঠিক ব্যবহার, জন্য RFC 2616 সংজ্ঞায়িত এবং আসলে বন্য বাস্তবায়িত, ক্লায়েন্ট একটি পাঠাতে হয় Accept-Encodingঅনুরোধ শীর্ষক (ক্লায়েন্ট একাধিক এনকোডিং উল্লেখ করতে পারেন)। সার্ভারটি তারপরে এবং তারপরেই ক্লায়েন্টের সমর্থিত এনকোডিংগুলি অনুসারে প্রতিক্রিয়াটিকে এনকোড করতে পারে (যদি ফাইল ডেটা সেই এনকোডিংয়ের মধ্যে ইতিমধ্যে সংরক্ষণ করা না থাকে), Content-Encodingপ্রতিক্রিয়া শিরোনামে বোঝায় যে কোন এনকোডিংটি ব্যবহৃত হচ্ছে। ক্লায়েন্ট তারপরে Transfer-Encoding(যেমন, chunked) ভিত্তিতে সকেটের ডেটা পড়তে পারে এবং তারপরে Content-Encoding(যেমন gzip:) এর উপর ভিত্তি করে ডিকোড করতে পারে ।

সুতরাং, আপনার ক্ষেত্রে, ক্লায়েন্ট একটি Accept-Encoding: gzipঅনুরোধ শিরোনাম প্রেরণ করবে এবং তারপরে সার্ভার সংকোচন করার সিদ্ধান্ত নিতে পারে (যদি না ইতিমধ্যে) এবং একটি Content-Encoding: gzipএবং optionচ্ছিকভাবে Transfer-Encoding: chunkedপ্রতিক্রিয়া শিরোনাম প্রেরণ করতে পারে ।

এবং হ্যাঁ, Transfer-Encodingশিরোনামগুলি অনুরোধগুলিতে ব্যবহার করা যেতে পারে তবে কেবলমাত্র HTTP 1.1 এর জন্য, যার জন্য ক্লায়েন্ট এবং সার্ভার বাস্তবায়ন chunkedউভয় দিকই এনকোডিং সমর্থন করে ।

ETagসার্ভারের রিসোর্স ডেটা অনন্যভাবে সনাক্ত করে, ডেটা আসলে সংক্রমণ করা হয় না। যদি কোনও প্রদত্ত ইউআরএল রিসোর্স এর ETagমান পরিবর্তন করে , এর অর্থ সেই সংস্থানটির সার্ভার-সাইড ডেটা পরিবর্তিত হয়েছে।


14
কন্টেন্ট-কোডিং হ'ল অনুরোধ-ইউআরআই দ্বারা চিহ্নিত সত্তার একটি বৈশিষ্ট্য অন্য কথায়: পৃথক পৃথক Content-Encodingপ্রয়োজনETag এটি আমার উত্তরটিতে যে মোড_ডিফলেট বাগটি উল্লেখ করে তা হল বিটিডব্লিউ । এই অ্যাপ্লিকেশন-স্তরের বিশদটি প্রথম স্থানে এইচটিটিপি স্ট্যান্ডার্ডে কেন তা আমাকে বিস্মিত করে। Transfer-Encodingযাইহোক, পরিবহন স্তরের সেটিংটি ব্যবহার করার সময়, এটিকে পরিবর্তন করার দরকার নেই ETag। ট্রান্সফার-এনক প্রয়োগ ব্যতীত অন্য কেউ।
এভেজেনি বেরেজভস্কি

4
সামগ্রী-এনকোডিং "ফ্লাই অন" এনকোডিংয়ের জন্য নয়। জন্য RFC 2616 (বলছেন "স্থানান্তর-এনকোডিং ... থেকে পৃথক যে স্থানান্তর-কোডিং বার্তার একটি সম্পত্তি, সত্তা নয় সামগ্রীটি-কোডিং।" Tools.ietf.org/html/rfc2616#section-14.41 ), এবং "সামগ্রী-কোডিং হ'ল অনুরোধ-ইউআরআই দ্বারা চিহ্নিত সত্তার একটি বৈশিষ্ট্য Typ সাধারণত, সত্তা-দেহটি এই এনকোডিংয়ের সাথে সঞ্চয় করা হয়" (সরঞ্জাম. ietf.org/html/rfc2616#section-14.11 )। তাই আমি ভোট দিয়েছি।
রবার্ট

আমি যা বর্ণনা করেছি তা হ'ল বনাম নির্বিশেষে " বাস্তবে বন্যের মধ্যে প্রয়োগ করা " । হ্যাঁ, gzip, উচিত একটি সম্পদ হস্তান্তরের একটি সম্পত্তি, যদি on-the-মাছি সম্পন্ন করা। অন্যদিকে, যদি সম্পদ সংরক্ষণ করা হয় সার্ভারে সংকুচিত, এটা করা উচিত রিসোর্সের বিষয়বস্তুর একটি সম্পত্তি পরিবর্তে, হলে পাঠানো হল। তবে কী হওয়া উচিত এবং আসলে কী তা সবসময় একই জিনিস হয় না। Content-EncodingTransfer-Encoding
রেমি Lebeau
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.