एचटीटीपी ने विकास नहीं किया. यह था बाध्य करें भौतिक रूप से, देर - देर तक, और दुरुपयोग से बदलाव करने के लिए ।
हर संस्करण मौजूद है क्योंकि पिछले एक कठिन प्रतिबन्ध मारा. यदि आप उन प्रतिबन्धों को समझते हैं, आप समझते हैं कि क्यों वेब काम करता है यह करता है - और क्यों इतने सारे "सबसे अच्छे अभ्यास" वास्तव में प्रोटोकॉल सीमाओं के लिए हल कर रहे हैं हम तीस साल के लिए खींच रहे हैं.
मैं 1997 से वेब अनुप्रयोगों को निर्माण किया गया है. मैंने HTTP/ हक़ कनेक्शन को बंद किया है, ब्राउज़र को प्रति होस्ट पर छह कनेक्शन खुला एक "feature" के रूप में देखा है, HTTP/2 के सिर पर शापित है, और अंत में देखा कि हम क्या जानते हैं: नेटवर्क के साथ सभी समस्या है:
यह एक प्रोटोकॉल शिक्षण नहीं है. यह कैसे हम यहाँ मिला की कहानी है.
HTTP/ हक़ एक ऐसे संसार के लिए १९९६ में बनाया गया था जो अब मौजूद नहीं है. यह क्यों काम करता है समझने के लिए, आपको यह समझने की ज़रूरत है कि १९९६ में इसका क्या मतलब है:
इस दुनिया में, बोतल शीर्ष था बिटरेट, देर से नहीं. एक ५०केबी पृष्ठ को डायल अप पर डाउनलोड करने के लिए 15 सेकंड लगते हैं. एक अतिरिक्त 200 mms हाथ की परवाह कौन करता है?
के लिए एचटीटीपी/1.0 का क्या कारण है:
GET /index.html HTTP/1.0
Host: example.com
HTTP/1.0 200 OK
Content-Type: text/html
<html>...
सरल. एल. एल. एल. सी.
तब वेब बदल गया. फास्ट.
1998 तक, पृष्ठ सिर्फ दस्तावेज़ नहीं थे. उनके पास स्टाइलशीट, जावास्क्रिप्ट, बहुत सी छवियाँ थीं. एक एकल पृष्ठ 20-30 अलग संसाधनों की आवश्यकता होगी.
प्रत्येक निवेदन आवश्यक:
20 संसाधनों के साथ एक पृष्ठ का अर्थ 20 TCP हाथ मिलाना था. 200 बजे से लेकर (अभी तक), यह 4 सेकंड का है सिर्फ हाथों से चेकिंग किसी भी स्थानांतरित सामग्री से पहले।
एचटीटीपी/1.0 का बुनियादी अनुमान:
समय बहुत महँगा था ।
सन् 1999 के आते - आते, सिरिया फिर से ठीक हो गयी मगर फिर भी वह ठीक हो गयी । लेटण्डी नहीं था - और अचानक उन दौरों के बारे में बात की.
एचटीटीपी/1.0 दस्तावेज़ के लिए डिजाइन किया गया था. वेब अनुप्रयोग मंच बन गया था. कुछ देने के लिए दिया गया था.
HTTP/1.1 1997 में आया था, जैसे कि वेब हिलना शुरू हो रहा था. हर व्यवसाय के लिए एक वेबसाइट की जरूरत थी. वेब पृष्ठ खाका, जावास्क्रिप्ट के लिए जटिल तालिका हो रही थी हर जगह छवियों.
दबाव स्पष्ट था: कनेक्शन-पर-पुंसता ही हत्या कर दी गई थी. लेकिन पूरी तरह से पुनःविचारित HTTP एक विकल्प नहीं था. बहुत ज्यादा इन पर पहले से ही निर्भर है. समाधान को पीछे की आवश्यकता थी.
क्या बदल गया:
Connection: keep-alive डिफ़ॉल्ट से - टीसीपी कनेक्शन फिर प्रयोग करेंCache-Control, ETag, शर्तबद्ध निवेदनक्या नहीं बदला:
GET /page.html HTTP/1.1
Host: example.com
Connection: keep-alive
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Cache-Control: max-age=3600
...
HTTP/1.1 वास्तव में प्रदर्शन समस्या को हल नहीं किया. यह सिर्फ चारों ओर ले गया.
पाइप पिल्ला एक विफलता थी. संकेतक को एक कनेक्शन पर बहुत से निवेदन भेजने की अनुमति दी गई, लेकिन:
इसी प्रकार ब्राउज़रों ने धोखा दिया। प्रोटोकॉल को ठीक करने के बजाय, वे उसके चारों ओर काम करते थे:
static1.example.com, static2.example.comकनेक्शन को गुणा करने के लिएयह बनावट के रूप में काम किया जा रहा प्रोटोकॉल में से कोई भी था. यह सम्पूर्ण पर्यावरण व्यवस्था थी HTTP/1.1 के बुनियादी सीमा.
एचटीटीपी/1 नकल करने के द्वारा स्केल किया गया है, मॉडल को ठीक करने के द्वारा नहीं.
एचटीटीपी/1. 1 काम किया पर्याप्त पंद्रह वर्ष तक नहीं, क्योंकि यह अच्छा था, परन्तु इसलिये कि पर्यावरण का बदला दिया गया था।
प्रोटोकॉल अभी भी टूट गया था. हम सिर्फ भाग्यशाली दुनिया इसे छिपा रहा था.
उन छह कनेक्शन प्रति होस्ट मुक्त नहीं थे:
HTTP/1 युग में वेब तेजी से मिला. लेकिन HTTP/1.1 के कारण नहीं है. यह तेजी से हो गया क्योंकि:
हम एक दस्तावेज़ वापसी प्रोटोकॉल पर एक अनुप्रयोग मंच पर निर्माण कर रहे थे. प्रोटोकॉल खो रहा था. हम अभी तक महसूस नहीं किया था.
सन् 2010 तक, वेब अभियान सिर्फ HTTP के खिलाफ किया गया था ।
युग का "सबसे अच्छा अभ्यास" कहानी बताता है:
इन में से हर एक के लिए समाधान है "HTTP/1.1 कई अनुरोधों को कुशलता से नहीं संभाल सकता. "
मैंने इन बहुत से छोटे औज़ारों को स्पाइट जेनरेटर जैसे बना दिया, सीएसएसों, हम प्रतिक्रिया संपीडन आदि का उपयोग शुरू कर दिया ...
ब्राउज़र तेजी से नहीं थे क्योंकि एचटीटीपी सुधार किया गया था. वे तेजी से थे क्योंकि वे वे थे क्योंकि HTTP के आसपास कार्य करें.
छः कनेक्शन प्रति होस्ट एक सुविधा नहीं है. यह हैक. डोमेन ट्रिंग एक सबसे अच्छा अभ्यास नहीं है. यह असफलता की एक स्वीकृति है.
मैंने सालों में ढेर सारा सामान, स्पीरी छवियों, और इनलाइन संसाधनों को सिखाने में लगा दिया था. उस में से कोई भी "अच्छी इमारत" नहीं थी. यह था. प्रोटोकॉल क्षति नियंत्रण.
"HHTTP सरल है" कल्पना लगी क्योंकि जटिल में छिपा था:
HTTP/1.1 काम किया क्योंकि सब कुछ चारों ओर इससे ज़्यादा वक्त बरबाद हो गया ।
यदि आपने कभी 28 का आरेख देखा है जो देर नहीं दिखाता, नुकसान या असफलता के मोड नहीं दिखाता, यह आप से झूठ बोल रहा है. प्रोटोकॉल सरल है. वास्तव में नहीं है.
सन् 2010 तक, वेब ने फिर से बदला था ।
1. मोबाइल हुआ. सन् 2007 में आईफोन चालू किया गया. 2012 तक मोबाइल वेब ट्रैफ़िक जाम हो गया था. अचानक उपभोक्ताों ने तारीय चौड़े कमरे पर नहीं थे - वे 3G, फिर 4G के साथ थे, और कभी - कभी पैकेटों की कमी के साथ. अनुमान है कि HTTP/1 बनाया गया था. वे नीचे गिर रहे थे.
वेब अनुप्रयोगों ने वेब पृष्ठ बदल दिया. Gmail. गूगल नक्शे. फेसबुक. ये लिंक के साथ दस्तावेज़ नहीं थे. वे कर रहे थे दर्जनों या सैकड़ों संसाधनों, वास्तविक समय अद्यतन, और तत्काल प्रतिक्रिया. "चारियों प्रति मेजबान" अपनी उम्र दिखा रहा था.
गूगल ने महसूस किया कि यह दर्द गंभीर रूप से. वे विशाल पैमाने पर था, प्रदर्शन्ड इंजीनियर, और डेटा है कि डेटा HTTP/1 साबित करने के लिए है. वर्ष 2009 में, वे SPY - एक प्रयोगिक प्रोटोकॉल शुरू कर दिया जो कि HTTP/2 बन जाएगा.
क्या बदल गया:
┌──────────────────────────────────────────┐
│ Single TCP Connection │
├──────────────────────────────────────────┤
│ Stream 1: GET /page.html │
│ Stream 3: GET /style.css │
│ Stream 5: GET /app.js │
│ Stream 7: GET /logo.png │
│ (all interleaved, no ordering required) │
└──────────────────────────────────────────┘
यह है HTTP/1 पाइप कॉलर किया जाना चाहिए. स्ट्रीम स्वतंत्र है. एक धीमी गति से दूसरों को ब्लॉक नहीं कर रहे हैं. शीर्ष समानता संपीडित हैं. प्रोटोकॉल अंततः कैसे हम वास्तव में वेब का उपयोग करते हैं.
एचटीटीपी/2 था चौड़ा जाल के लिए सही तरह से भरेंऔर 2015 में, जब यह मानक साबित हुआ, विकसित दुनिया में विस्तार - भंगकारी था ।
क्या सुधार किया गया:
कम पैकेट नुकसान के साथ तारी कनेक्शनों के लिए HTTP/2 एक असली सुधार था. कनेडमार्क्स बहुत अच्छा लगा. गूगल की जीत की घोषणा की.
लेकिन यह दुनिया पहले ही चल चुकी थी । अब मोबाइल यातायात का अधिकांश हिस्सा था ।
और मोबाइल नेटवर्क में एक बुनियादी संपत्ति है कि विस्तारबैंड नहीं है: पैकेट नुकसान स्थिर है.
टीसीपी गारंटी इंक्रम में. अगर पैकेट 47 खो गया है, पैकेट 48-100 इंतजार कर रहे हैं जब तक कि 47 वापस नहीं हो जाता - तब तक अगर वे पूरी तरह स्वतंत्र HTTP/2 नदियाँ न हों.
┌──────────────────────────────────────────┐
│ TCP Receive Buffer │
├──────────────────────────────────────────┤
│ [pkt 45][pkt 46][ ? ][pkt 48][pkt 49] │
│ ↑ │
│ Waiting for packet 47 │
│ │
│ Stream 1 data: BLOCKED │
│ Stream 3 data: BLOCKED │
│ Stream 5 data: BLOCKED (has pkt 48-49) │
│ Stream 7 data: BLOCKED │
└──────────────────────────────────────────┘
एचटीटीपी/2 ने अनुप्रयोग परत पर सर- लाइन ब्लॉक को हल किया. फिर TCP ने ट्रांसपोर्ट परत पर इसे पुनःसमंजित किया.
एक पैकेट बंद सभी नदियों. साफ तारल कनेक्शन पर, पैकेट नुकसान कम होता है. सेल नेटवर्क पर, नुकसान, विफ़ी, या साथ दिए गए लिंक? पैक ब्रेक स्थिर है. और क्योंकि HTTP/2 उपयोग करता है एकल कनेक्शन ( डिजाइन द्वारा, एक गुम पैकेट अब ब्लॉक गुम हो गया है) सभी सिर्फ छहों कनेक्शनों में से एक के बजाय.
एचटीटीपी/2 प्रदर्शन:
आयरन: HTTP/2 मोबाइल के लिए बनाया गया था, लेकिन टीसीपी की गारंटी यह मोबाइल पर इससे भी बदतर बना दी है.
आरंभिक HTTP/2 तैनाती ने असली सुधार दिखाया:
लेकिन पूंछ देर से एक अलग कहानी कह रही थी । मीडिया बेहतर हो गया। P99 बदतर हो गया।
मैंने खुद देखा था: एक ग्राहक ने अपने सीडी में HTTP/2 सक्षम किया और मोबाइल P99 देर से देखा वृद्धि 40% से. 33%. डाओबोर्ड ने डेस्कटॉप पर सुधार दिखाया. समर्थन टिकट मोबाइल उपभोक्ताों से आया. हमने एक सप्ताह बिताया कि HTTP/2 का "प्रयोग" अपने अधिकांश यातायात के लिए बदतर बना रहा था.
जब HTTP/2 काम करता है, तो यह बहुत ही खूबसूरत काम करता है. जब एक पैकेट सबसे खराब क्षण में मोबाइल कनेक्शन पर बरसाता है, सब कुछ चक्कर. और उपभोक्ताओं को ध्यान देने के बजाय वे तेजी से मीडिया को देखते हैं.
बुनियादी समस्या:
एचटीटीपी/2 को लगता है कि टीसीपी काफी अच्छा था.
विस्तार के लिए, यह था. मोबाइल के लिए, यह नहीं था. और समय तक, जब तक HTTP/2 मानक किया गया था, मोबाइल पहले से ही जीत गया था. हम जहां तक TCP हमें ले जा सकता था.
सन् 2015 तक इस बात का सबूत साफ था: टीसीपी समस्या थी.
Google 2012 से उपयोगात्मक रूप से चल रहा था. वे डेटा था. मोबाइल नेटवर्क पर, नुकसानी, और उच्च शक्तिीय कनेक्शन, HTTP/2 ऐसे तरीकों में असफल रहा है जो परिवहन परत को बदलने के बिना तय नहीं किया जा सकता है.
लेकिन आप सिर्फ "fx टीसीपी" नहीं कर सकते. यह ऑपरेटिंग सिस्टम कर्नेल में लागू किया गया है. यह इंटरनेट पर हर रास्ते, फायरवाल, और मध्य-ट बाक्स में बनाया गया है. TCP का मतलब है कि पूरे इंटरनेट के उन्नत करने के लिए इंतज़ार कर रहे हैं.
इसलिए गूगल ने एक अजीब काम किया: यूडीपी के शीर्ष पर उन्होंने एक नया ट्रांसपोर्ट प्रोटोकॉल बनाया.
UDD है डिजाइन द्वारा "Dym" - यह सिर्फ पैकेटों को कोई गारंटी नहीं के साथ भेजता है. लेकिन यह वास्तव में है कि अगर आप लागू करना चाहते हैं तो ठीक है. अपने आप को माना जाता है. QUCCPRE Kycary की गारंटी (पुष्ट्य, वितरण) लेकिन यह करता है प्रति स्ट्रीम प्रति कनेक्शन के बजाय.
एचटीटीपी/3 (2022) QUI से अधिक HTTP है. यह स्वीकार करता है कि हम HTTP को ठीक करने के लिए नीचे जाने की जरूरत है.
क्या बदल गया:
┌──────────────────────────────────────────┐
│ QUIC Connection │
├──────────────────────────────────────────┤
│ Stream 1: [pkt][pkt][pkt] ← flowing │
│ Stream 3: [pkt][ ? ][pkt] ← waiting │
│ Stream 5: [pkt][pkt][pkt] ← flowing │
│ Stream 7: [pkt][pkt] ← flowing │
│ │
│ Lost packet only affects Stream 3 │
└──────────────────────────────────────────┘
जो कुछ उसी में रह गया:
एचटीटीपी/3 ने एचटीटीपी को नहीं बदला. यह बदल गया है कि कैसे HTTP सच में जीवित रहता है.
क्यूयूआईआईसी के लिए टीसीपी की भरोसेमंद गारंटी प्रति स्ट्रीम, प्रति कनेक्शन नहीं. यह महत्वपूर्ण अन्तर्दृष्टि है.
टीसीपी का वादा: "हर बाइट क्रम में आता है।" क्यूआईएसआई का वादा: "हर बाइट इस स्ट्रीम में ठीक आ गया।"
यही कारण है कि HTTP/3 ny संजाल पर पतन क्यों नहीं करता है.
लंबी खड़ी समस्याओं को ठीक करने के लिए अन्य क्यूUIC विशेषताएँ:
कनेक्शन उत्प्रवासन
Phone on WiFi → walks out of range → switches to cellular
TCP: Connection dies. Restart everything.
QUIC: Connection ID maintained. Streams continue.
यह कार्य इसलिए किया जा रहा है क्योंकि मोबाइल उपयोक्ता हमेशा नेटवर्क स्विच करें. अपने घर से बाहर निकलो, विफ़ि, सेल के लिए स्विच. TCP के साथ, हर कनेक्शन मर जाता है. QUC के साथ कनेक्शन जारी है.
0-REC रीमेशन:
First connection: Full handshake (1-RTT)
Returning user: Send data immediately (0-RTT)
हर जगह एनक्रिप्शनः
TCP + TLS: Handshake, then encrypted tunnel
QUIC: Encryption is the handshake (TLS 1.3 integrated)
एचटीटीपी/3 दुनिया के लिए बनाया गया है हम वास्तव में में में रहते हैं:
प्रोटोकॉल अंत में नेटवर्क वास्तविकता से मेल खाता है. HTTP/1.0 के तीस साल के बाद भरोसेमंद तारी कनेक्शन माना गया, HTTP/3 स्वीकार करता है कि भरोसे योग्यता अपवाद है, नियम नहीं.
एचटीटीपी/3 मुक्त नहीं है:
लेकिन मोबाइल प्रथम अनुप्रयोगों के लिए, अविश्वसनीय नेटवर्क सेवा तथा देर के लिए, HTTP/3 पहला संस्करण है जो कि कैसे नेटवर्क वास्तव में बर्ताव करता है.
क्योंकि हर एचटीटीपी संस्करण परिवर्तन हुआ प्रोटोकॉल से वातावरण तेजी से बदल गया है.
20वीं सदी के दौरान, दुनिया - भर में बहुत - से लोग इस बीमारी से जूझ रहे हैं । |---------|-----|-------------|------------|--------------| UNICONIT HTTP/ हक़ हक़त 1996 Oandthbe Bandthack पृष्ठ है, देर से विषयों के बारे में बात की UNINI HTTP/1. 199-201999 ब्बबबैंडे, वेब एप्पस कम आड़ी के साथ पैकेट नुकसान के साथ आया UNICOS HTTP/2CLLLLLLCONAL Libis HTTP/332022+CKS पहले, विश्वस्त कुछ भी नहीं है कि अभी भी तैनात कर रहा है ...
पैटर्न स्पष्ट है:
लेकिन जब पर्यावरण की माँग की जाती थी, तब ऐसा लगता था कि हर खिलाड़ी को पीछे हटा दिया जा रहा है ।
अन्य टिप्पणियाँ:
यहाँ अजीब हिस्सा है. प्रोटोकॉल विकास के तीस साल के बावजूद के बारे में:
निवेदन अभी भी असफल. नेटवर्क विभाजन. सर्वर क्रैश हो गया. टाइमआउट होने के लिए आपका कोड अभी भी तर्क फिर से कोशिश की आवश्यकता है.
नेटवर्क अब भी झूठ है. 200 OK अनुक्रिया का मतलब सही नहीं है. कनेक्शन बन्द करने का मतलब यह नहीं है कि निवेदन सफल नहीं हुआ. टाइमआउट सर्वर का मतलब नहीं है आपके निवेदन प्रक्रिया कर रहा है.
कैश अभी भी रियल डाटा सेवा करते हैं.
Cache-Control एक निवेदन है, कमांड नहीं. gixies वे क्या चाहते हैं. सीडी अवैधीकरण सबसे अच्छी तरह से समाप्त हो रहा है.
क्लाएंट अभी भी बुरी तरह से कोशिश करते हैं. उपयोक्ता क्लिक बटन, कुछ नहीं होता, क्लिक फिर से होता है. अब आपके पास दो निवेदन हैं. 'dicdicadphidpadpadicadicadpadp, मामले के बारे में.
विकासकर्ता अभी भी गलत पहचान. आउटपुट को सुरक्षित होना चाहिए. सबसे अधिक जंगली पश्चिम है. अधिकांश API यह गलत मिलता है.
// This is still your problem, regardless of HTTP version
public async Task<Result> CreateOrderAsync(Order order)
{
// What happens if this times out?
// Did the server receive it?
// Did it process it?
// Will the client retry?
// Will you create duplicate orders?
// HTTP/3 doesn't save you here.
// Idempotency keys do.
}
यदि आप इन्हें नहीं समझते हैं, HTTP/3 आप को नहीं बचा लेंगे.
इन सभी प्रोटोकॉल संस्करणों के पार वेब अनुप्रयोग बनाने के बाद, यहाँ क्या फंस गया है:
1. प्रोटोकॉल आपके भरोसेमंद परत नहीं है.
एचटीटीपी आपको अनुरोध/ SERPELENECKY देता है BAR यह गारंटी नहीं देता है कि आप काम करते हैं BAR यह आपके काम की गारंटी नहीं देता BAR यह आपकी नौकरी है BAR
2 विस्तार दुश्मन है, नहीं TX.
अधिकतर प्रदर्शन समस्या गोल हैं, नहीं बाध्य के द्वारा. रेडीकरण के मामले को लोड करने से ज्यादा की मांग कर रहे हैं.
3. हर "सबसे अच्छा अभ्यास" एक एक्सपायरेशन तारीख है.
डोमेन fuging HTTP/1 के लिए आवश्यक था. यह HTTP/2 के लिए बुरा है. सामग्री में सीएसएस स्मार्ट था. अब हमारे पास सर्वर धक्का है (जो भी असफल) और जल्दी संकेत. रणनीति परिवर्तन. लक्ष्य (संग्रेति के अंत में) एक ही रहता है.
4 असली नेटवर्क पर माप.
स्थानीय होस्ट पर बेचमार्क्स कुछ भी साबित नहीं करते ।
5. उबाऊ भाग सबसे ज्यादा मायने रखता है.
समय समाप्त. सर्किट ब्रेकर्स. सर्किट ब्रेकक. Idmadmamade. updmaking. इन fargils विवरण निर्धारित करते हैं कि क्या आपका तंत्र लोड के अंतर्गत काम करता है.
HTTP तेजी से नहीं मिला क्योंकि यह स्मार्ट मिल गया. यह तेजी से हो गया क्योंकि हम अंत में स्वीकार किया नेटवर्क समस्या थी.
हर संस्करण अपने समय के लिए सही था:
जब पर्यावरण बदल गया, तब प्रोटोकॉल को पालन करना पड़ा ।
एचटीटीपी संस्करण उपभोक्ता भाव में उन्नयन नहीं कर रहे हैं. वे विभिन्न विफलता वितरणों के लिए व्यवसायित हैं.
और फिर भी, कि सभी के बाद, बुनियादी बातें बनी रहती हैं:
प्रोटोकॉल विकास. समस्या गायब नहीं हुई. वे सिर्फ प्रेरित.
तंत्रों का निर्माण करें जो असफल हो जाते हैं. वास्तविक नेटवर्क पर जाँच करें. यह समझते हैं कि हर एचटीटीपी संस्करण इसके युग द्वारा आकार का व्यापार आकार है, एक ऐसा उन्नयन नहीं जो पहले आया था.
यह HTTP के तीस साल है. यह वेब है जो हमने बनाया है. और एक और दशक में, HTTP/3 के अनुमान शायद एचटीटीपी/0 के रूप में अब देखे होंगे.
© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.