কিছু ডাউনলোড ফাইল কেন নিজের আকারটি জানে না? [প্রতিলিপি]


82

এই প্রশ্নের ইতিমধ্যে এখানে একটি উত্তর আছে:

কখনও কখনও, কোনও ওয়েব ব্রাউজারে কোনও ফাইল ডাউনলোড করার সময় ডাউনলোডের অগ্রগতি ফাইলের মোট আকার বা "ডাউনলোডের সাথে এটি কতটা দূরে" তা "জানে না" - এটি কেবল এটির সাথে ডাউনলোড করে যে গতিটি ডাউনলোড করছে তা দেখায় "অজানা" হিসাবে মোট

ব্রাউজার কেন কিছু ফাইলের চূড়ান্ত আকার জানবে না? এটি প্রথম স্থানটিতে এই তথ্যটি কোথায় পাবে?


13
গতিশীলভাবে তৈরি করা ফাইলগুলির একটি আকার থাকে না, তারা ইওএফ পৌঁছা পর্যন্ত স্ট্রিম হিসাবে চলে আসে।
ফায়াসকো ল্যাবগুলি

উত্তর:


114

ওয়েব সার্ভারগুলি থেকে নথিগুলির অনুরোধ জানাতে, ব্রাউজারগুলি HTTP প্রোটোকল ব্যবহার করে। আপনি নিজের নাম বার থেকে সেই নামটি জানতে পারেন (এটি এখন লুকিয়ে থাকতে পারে তবে আপনি ঠিকানা বারে ক্লিক করলে, URL টি অনুলিপি করুন এবং এটি কোনও পাঠ্য সম্পাদককে পেস্ট করুন, আপনি http://প্রথমে দেখতে পাবেন )। এইচটিটিপি একটি সাধারণ পাঠ্য-ভিত্তিক প্রোটোকল। এটি এর মতো কাজ করে:

প্রথমত, আপনার ব্রাউজারটি ওয়েবসাইটের সার্ভারের সাথে সংযোগ স্থাপন করে এবং যে ডকুমেন্টটি ডাউনলোড করতে চায় তার একটি URL পাঠায় (ওয়েব পৃষ্ঠাগুলিও নথি হয়) এবং ব্রাউজারটি সম্পর্কে নিজেই কিছু বিবরণ ( ব্যবহারকারী-এজেন্ট ইত্যাদি) প্রেরণ করে । উদাহরণস্বরূপ, সুপার ইউজার সাইটে মূল পৃষ্ঠাটি লোড করার জন্য http://superuser.com/, আমার ব্রাউজারটি অনুরোধ প্রেরণ করে যা দেখে মনে হচ্ছে:

GET / HTTP/1.1
Host: superuser.com
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.0 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: [removed for security]
DNT: 1
If-Modified-Since: Tue, 09 Jul 2013 07:14:17 GMT

প্রথম লাইনটি সুনির্দিষ্ট করে যে কোনও দস্তাবেজটি সার্ভারে ফিরে আসবে। অন্যান্য রেখাগুলিকে হেডার বলা হয়; তারা এ জাতীয় চেহারা:

Header name: Header value

এই লাইনগুলি অতিরিক্ত তথ্য প্রেরণ করে যা সার্ভারকে কী করা উচিত তা স্থির করতে সহায়তা করে।

সবকিছু ঠিকঠাক থাকলে সার্ভারটি অনুরোধ করা নথিটি পাঠিয়ে সাড়া দেবে। প্রতিক্রিয়াটি স্ট্যাটাস বার্তার সাথে শুরু হয়, তারপরে কিছু শিরোনাম (দস্তাবেজ সম্পর্কে বিশদ সহ) এবং অবশেষে, সবকিছু ঠিকঠাক থাকলে ডকুমেন্টের সামগ্রী। আমার অনুরোধের জন্য সুপার ব্যবহারকারীর সার্ভারের জবাবটি এমন দেখাচ্ছে:

HTTP/1.1 200 OK
Cache-Control: public, max-age=60
Content-Type: text/html; charset=utf-8
Expires: Tue, 09 Jul 2013 07:27:20 GMT
Last-Modified: Tue, 09 Jul 2013 07:26:20 GMT
Vary: *
X-Frame-Options: SAMEORIGIN
Date: Tue, 09 Jul 2013 07:26:19 GMT
Content-Length: 139672

<!DOCTYPE html>
<html>
    [...snip...]
</html>

শেষ লাইনের পরে, সুপার ইউজারের সার্ভারটি সংযোগটি বন্ধ করে দেয়।

প্রথম লাইনে ( HTTP/1.1 200 OK) প্রতিক্রিয়া কোড ধারণ করে , এক্ষেত্রে এটি 200 OK। এর অর্থ সার্ভার সিদ্ধান্ত নিয়েছে যে অনুরোধ হিসাবে এটি কোনও দস্তাবেজ ফিরিয়ে দিতে পারে এবং প্রতিশ্রুতি দেয় যে যে বিষয়বস্তুগুলি অনুসরণ করবে সেগুলি এই জাতীয় নথি হবে। যদি এটি না হয় তবে কোডটি অন্য কিছু হবে এবং এটি সার্ভারটি কোনও প্রতিক্রিয়া হিসাবে কেবল একটি দস্তাবেজ ফিরিয়ে দিচ্ছে না তার কারণের একটি ইঙ্গিত দেয়: উদাহরণস্বরূপ, যদি এটি অনুরোধ করা নথিটি খুঁজে না পায় তবে এটি ফিরে আসার কথা 404 Not Found, এবং যদি আপনাকে প্রশ্নে থাকা সামগ্রীটি অ্যাক্সেস করার অনুমতি না দেওয়া হয় তবে তা ফিরে আসার কথা 403 Forbidden

এই প্রথম স্থিতি রেখার পরে, প্রতিক্রিয়া শিরোনামগুলি অনুসরণ করে; তারা প্রদান বিষয়বস্তু সম্পর্কে আরও তথ্যের যেমন তার হিসাবে, ফিরে হচ্ছে Content-type

এরপরে একটি ফাঁকা লাইন। এটি আর কোনও প্রতিক্রিয়া শিরোনাম অনুসরণ করবে না এই ইঙ্গিত দেয়। এই লাইনের অতীতের সমস্ত কিছু এটি অনুরোধ করা দস্তাবেজের সামগ্রী। সুতরাং উপরের উদাহরণে, <!DOCTYPE html>সুপার ইউজার হোম পৃষ্ঠার প্রথম লাইন (একটি এইচটিএমএল নথি) রয়েছে। যদি আমি ডাউনলোড করার জন্য কোনও নথির অনুরোধ করছিলাম তবে এটি সম্ভবত কিছু গীব্র বর্ণযুক্ত হবে, কারণ বেশিরভাগ নথির ফর্ম্যাটগুলি পূর্ববর্তী প্রক্রিয়াজাতকরণ ছাড়াই অপঠনযোগ্য।

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

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


4
একটি খুব, খুব সামান্য নোট: ব্রাউজারগুলি HTTP ব্যতীত অন্য প্রোটোকল সমর্থন করে। তবে এই দিনগুলিতে অন্যান্য প্রোটোকলগুলি বিরল, এবং মূলত একই ধারণাগুলি অন্যান্য প্রোটোকলগুলিতে প্রয়োগ হয় যদিও বিবরণ আলাদা different
রবার্ট ফিশার

5
@ রবার্টফিশার এফটিপি একটি বিরল প্রোটোকল? : পি
টমাস

5
@ থমাস আজকাল আমার অভিজ্ঞতা is আমার ব্রাউজারে একটি এফটিপি ইউআরএল দেখার কথা মনে পরে বেশ কয়েক বছর হয়ে গেছে। কয়েক বছর আগে আমি এফটিটিপি ব্যবহার করছিলাম - ব্রাউজারের চেয়ে সরাসরি work কর্মক্ষেত্রে (প্রায় পুরোপুরি আপলোড), তবে সেই কাজগুলি এখন স্কেপ দ্বারা পরিচালিত হয়। আমি আজকের জন্য কেবলমাত্র এফটিপি ব্যবহার করি তা হ'ল নূন্যতম ওয়েব হোস্টে সামগ্রী আপলোড করা। অবশ্যই, ওয়াইএমএমভি। ^ _ ^
রবার্ট ফিশার

2
এটি ঠিক এই ধরণের উত্তর যা আমাকে এই সাইটটিকে ভালবাসে। আমি কীভাবে এটিকে অনুগ্রহ দেব?
ব্রাজিলিয়ান গাই

1
আপনার সম্পর্কে @ ruda.almeida এর সাথে একমত নন, আপনি এটি সম্পর্কে meta.superuser.com এ পোস্ট করতে পারেন, এটি আলোচনা হবে এবং সম্ভবত কেউ আবার প্রশ্নটি খুলবে।
gronostaj

54

এইচটিটিপি Content-Lengthশিরোনাম কিছু ক্ষেত্রে option চ্ছিক, এবং এটি ফাইলের সাথে সংক্রমণ নাও হতে পারে; সকেটটি বন্ধ হয়ে গেলে ফাইলটির শেষটি সংকেত দেওয়া হবে।


1
সুনির্দিষ্টভাবে বলতে গেলে, HTTP 1.0 প্রতিটি নথির পরে সকেট বন্ধ করে সামগ্রীর দৈর্ঘ্যটি সংজ্ঞায়িত করে। এটি এখনও উপযুক্ততার জন্য HTTP 1.1 এ সমর্থিত। তবে HTTP 1.1 একাধিক নথির জন্য সংযোগগুলি পুনরায় ব্যবহার করতে অনুমতি দেয় যদি হয় Content-Lengthশিরোনাম ক্ষেত্র ব্যবহৃত হয় বা দস্তাবেজটি স্থানান্তরিত হয় Transfer-Encoding: chunked। পরেরটি কন্টেন্টটি গতিশীলভাবে জেনারেট করতে এবং উত্পন্ন হওয়ার সাথে সাথে এটি পাঠিয়ে দেয় এবং নথির শেষের সংকেত দিতে সক্ষম হয়।
x4u

3

.pdfউড়ে যখন সামগ্রী (যেমন একটি নথি বা একটি এক্সেল শীট) তৈরি করা হয় তখন আকারটি আগে জানা যায় না। এই ক্ষেত্রে সার্ভার আপনাকে ডাউনলোডের আকারের আগে পাঠাতে পারে না এবং ব্রোভার মোট আকারটি প্রদর্শন করতে পারে না।


9
@ আলফোর সাথে একমত হতে হবে ... আমি যদি ভিডিওটি স্ট্রিমিং করছি, বা যদি আমি কোনও ধরণের ডেটা প্রবাহিত করি যা কোনও নির্দিষ্ট আকার নয়, যদি পয়েন্টটি ব্যবহারকারীদের কাছে যত তাড়াতাড়ি সম্ভব তথ্য পাওয়া যায়, আমি যে স্থানে ট্রান্সমিটালটি শুরু করব সেই স্থানে আমি জানব না
ফুন

4
@ আলফো আপনি ফ্লাইতে .pdfফাইলের মতো ডেটা তৈরি করতে পারেন । যতক্ষণ না ডেটা প্রতিযোগিতামূলকভাবে লিখিত না হয় আপনি আকারটি জানেন না তবে আপনি ইতিমধ্যে ব্রাউজারে এটা পাঠাতে পারবেন। আমি ইতিমধ্যে জাভাতে এটি করেছি এবং ব্রাউজারে একটি এক্সেল ফাইল প্রেরণ করেছি যা ফ্লাইতে তৈরি হয়েছিল। ব্রাউজারের দিক থেকে এটি ডাউনলোডের মতো মনে হয়েছিল তবে সার্ভার দিক থেকে এটি স্ট্রিমিং। সুতরাং আপনি যদি এটি কল্পনাও না করেন তবে ফাইলগুলি স্ট্রিম .pdf করা সম্ভব । ব্রাউজার থেকে এটি জ্ঞাত দৈর্ঘ্য ব্যতীত ডাউনলোডের মতো দেখাচ্ছে।
উয়ে প্লোনাস

8
@ অ্যালফো - ক্লায়েন্টের কাছে শেষ প্যাকেট প্রেরণের আগে এটি তৈরি করা শেষ করা দরকার।
গ্যালাকটিক কাউবয়

4
@ আল্ফো আমি কখনও ভিডিও স্টিমিং সম্পর্কে না, তবে সাধারণভাবে স্ট্রিমিংয়ের বিষয়ে তুলিনি , যা কোনও .pdfফাইল বা এক্সেল শীট স্ট্রিমিংও হতে পারে !
উওয়ে প্লোনাস

2
@ অ্যালফো - আপনার একটি বৈধ পয়েন্ট রয়েছে, ডায়নামিক ফাইলগুলি সম্পূর্ণরূপে মেমরিতে তৈরি করা যেতে পারে এবং তারপরে HTTP এর মাধ্যমে এবং সামগ্রীর দৈর্ঘ্যের গণনা করা সহজ। যাইহোক, সার্ভারটি যদি অনেক বড় গতিশীলভাবে তৈরি ফাইলগুলি পাঠিয়ে দেয় যা অনেকগুলি প্যাকেটে বিভক্ত হয়ে যায় তবে সার্ভারের হিসাব অনুযায়ী খণ্ডগুলি প্রেরণ শুরু করা বুদ্ধিমান হয় (বিপরীতে মেমরিতে প্রতিটি বৃহত ফাইল তৈরি করার বিপরীতে) এটা পাঠান). এইচটিটিপি 1.1 বিশেষভাবে এই উদ্দেশ্যে চুনযুক্ত ট্রান্সফার এনকোডিংটি তৈরি করেছে।
ডাঃ জিম্বোব
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.