वास्तव में एक HTTP इकाई क्या है?


114

क्या कोई मुझे बताएगा कि वास्तव में क्या है HTTP इकाई है?

मैं HTTPClient डॉक्यूमेंटेशन पढ़ रहा हूं, लेकिन मुझे वास्तव में समझ में नहीं आया कि इसका क्या मतलब है?


2
मैं यहाँ से आया था इस पर लिखें HTTP: HTTP: द प्रोटोकॉल हर वेब डेवलपर को पता होना चाहिए कि क्या किसी और के माध्यम से यहाँ इस विषय पर जानकारी की तलाश है।
मेसन 240

2
ध्यान दें कि शब्द "HTTP एंटिटी" अब नवीनतम HTTP 1.1 विनिर्देशों में प्रकट नहीं होता है । ऐसा लगता है कि यह पदावनत कर दिया गया है। अब हम बस "हेडर फ़ील्ड" और "मैसेज बॉडी" का उपयोग कर सकते हैं।
हॉकी पार्कर

जवाबों:


139

एक HTTP इकाई एक HTTP अनुरोध या प्रतिक्रिया का बहुमत है, जिसमें कुछ हेडर और बॉडी शामिल हैं, यदि मौजूद है। यह अनुरोध या स्थिति रेखा के बिना संपूर्ण अनुरोध या प्रतिक्रिया प्रतीत होता है (हालांकि केवल कुछ हेडर फ़ील्ड को इकाई का हिस्सा माना जाता है )।

चित्रित करना; यहाँ एक अनुरोध है:

POST /foo HTTP/1.1          # Not part of the entity.
Content-Type: text/plain    # ┬ The entity is from this line down...
Content-Length: 1234        # │
                            # │
Hello, World! ...           # ┘

और एक प्रतिक्रिया:

HTTP/1.1 200 OK             # Not part of the entity.
Content-Length: 438         # ┬ The entity is from this line down...
Content-Type: text/plain    # │
                            # │
Response body ...           # ┘

3
होस्ट एक इकाई हेडर फ़ील्ड नहीं है।
गुमो

मैंने सोचा कि एक इकाई &इसके बजाय उपयोग कर रही थी &। एक इकाई भी नहीं है? क्या फर्क पड़ता है?
कोडिब्यूस्टीन

1
@ आईमैरे: &एक एचटीएमएल चरित्र इकाई संदर्भ है , न कि एक HTTP एंटिटी
माईक्रिक्स

2
@ लम्रे: वे पूरी तरह से अलग संस्थाएं हैं। ;) (एक HTML पाठ में तार एन्कोडिंग के बारे में है , दूसरा उस जानकारी को संरचित करने के बारे में है जब कोई ब्राउज़र और सर्वर HTTP प्रोटोकॉल पर एक दूसरे से बात करते हैं । इसके अलावा, एक दूसरे की तुलना में अधिक भ्रामक है। या इसके विपरीत; - ओ)
एसजे।

6
ध्यान दें कि शब्द "HTTP एंटिटी" अब नवीनतम HTTP 1.1 विनिर्देशों में प्रकट नहीं होता है । ऐसा लगता है कि यह पदावनत कर दिया गया है। अब हम सिर्फ "हेडर फील्ड्स" और "मैसेज बॉडी" के साथ टिक सकते हैं।
हॉकी पार्कर

15

यहाँ 3 सरल मामले हैं:

केस 1. आप एक अनुरोध में 3 फाइलें अपलोड कर रहे हैं। वे 3 फाइलें 3 इकाइयां हैं। उनमें से प्रत्येक के पास यह Content-Typeइंगित करने के लिए कि यह किस प्रकार की फ़ाइल है।

केस 2. आप एक वेब पेज देख रहे हैं। ब्राउज़र ने पृष्ठभूमि में एक HTML फ़ाइल को इकाई के रूप में डाउनलोड किया है। चूंकि पेज को लगातार अपडेट किया जा सकता है, इसलिए आपको बाद में पूरी तरह से अलग इकाई मिल सकती है।

केस 3. आपको मिल गया है 304 Not Modified। किसी भी इकाई को स्थानांतरित नहीं किया गया है।

एक शब्द में, Entity एक HTTP संदेश (या तो अनुरोध या प्रतिक्रिया) के अंदर एक वैकल्पिक पेलोड है , इसलिए यह Entity और संदेश के बीच एक " अंश-पूर्ण " संबंध है।

कुछ शीर्ष लेख फ़ील्ड पर लागू होते हैं Messageचाहते Transfer-Encodingका वर्णन बिचौलियों के बीच संदेश स्थानांतरित करने का तरीका, और इस तरह जोड़ा या हटाया जा सकता है (अनुरोध / प्रतिक्रिया श्रृंखला के साथ किसी भी आवेदन से hop-by-hop headers)। तुलना में, उन हेडर फ़ील्ड Entityकुछ गुणों पर लागू होते हैं, जो इकाई के आकार, प्रकार, संपीड़न एल्गोरिदम, आदि का वर्णन करते हैं ...

आगे पढ़ने, आरएफसी 2616 खंड 1.4, 4.5 और 4.3 से उद्धृत:

  • एक अनुरोध / प्रतिक्रिया श्रृंखला
     request chain -------------------------------------->
   UA -----v----- A -----v----- B -----v----- C -----v----- O
      <------------------------------------- response chain

ऊपर दिया गया आंकड़ा उपयोगकर्ता एजेंट और मूल सर्वर के बीच तीन बिचौलियों (ए, बी और सी) को दर्शाता है। एक अनुरोध या प्रतिक्रिया संदेश जो पूरी श्रृंखला की यात्रा करता है, चार अलग-अलग कनेक्शनों से होकर गुजरेगा।

  • हेडर फ़ील्ड्स मैसेज या एंटिटी के लिए

कुछ हेडर फ़ील्ड हैं, जिनमें अनुरोध और प्रतिक्रिया संदेश दोनों के लिए सामान्य प्रयोज्यता होती है, लेकिन जो ट्रांसफर की जा रही इकाई पर लागू नहीं होती हैं । ये हेडर फ़ील्ड केवल प्रेषित होने वाले संदेश पर लागू होते हैं ।

  • संदेश के लिए हेडर फ़ील्ड को श्रृंखला के साथ बदला जा सकता है

ट्रांसफर-एनकोडिंग एमयूएस का उपयोग संदेश के सुरक्षित और उचित हस्तांतरण को सुनिश्चित करने के लिए एक आवेदन द्वारा लागू किसी भी हस्तांतरण-कोडिंग को इंगित करने के लिए किया जाना चाहिए। ट्रांसफर-एनकोडिंग संदेश की एक संपत्ति है, इकाई की नहीं, और इस प्रकार अनुरोध या प्रतिक्रिया श्रृंखला के साथ किसी भी आवेदन द्वारा जोड़ा या हटाया जा सकता है।

  • संदेश निकाय और निकाय निकाय के बीच संबंध

message-body = Transfer-Encoding( Content-Encoding(entity-body) )

जहां Transfer-Encoding"chunked" हो सकता है जिसका अर्थ है कि संदेश को कैसे स्थानांतरित किया जाए, और Content-Encoding"gzip" हो सकता है जो इकाई को संपीड़ित करने के तरीके के लिए खड़ा है।


वाह, इकाई और संदेश के बीच "भाग-पूरे" संबंध को स्पष्ट करने के लिए धन्यवाद! बाकी थोड़े 'भ्रम में जोड़ता है, लेकिन कुल मिलाकर, अभी भी एक मूल्य है। चीयर्स!
एस.जे.

12

यह एक अनुरोध या प्रतिक्रिया पेलोड का प्रतिनिधित्व करने वाला एक अमूर्त हैJavaDoc अपने उद्देश्य और विभिन्न इकाई प्रकार पर स्पष्ट है।


3
+1 इसे "पेलोड" कहने के लिए, जो अंत में उस शून्य शब्द ("इकाई") में कुछ अर्थ जोड़ता है।
एस.जे.


2

HTTP एक प्रोटोकॉल है जो किसी नेटवर्क के माध्यम से रिमोट मशीन से जानकारी एक्सेस करते समय देखा जाता है। आमतौर पर नेटवर्क इंटरनेट है और रिमोट मशीन एक सर्वर है।

जब आप व्यक्ति A से व्यक्ति B की जानकारी मांगते हैं, तो आप उसे एक संदेश देते हैं। (निवेदन)। व्यक्ति बी आपको जवाब देता है (प्रतिक्रिया)। अनुरोध और प्रतिक्रिया HTTP संदेश प्रकार हैं।

व्यक्ति ए, व्यक्ति से सूचना मांगने के बजाय कुछ करने के लिए कह सकता है। कहते हैं, व्यक्ति ए चाहता है कि व्यक्ति बी एक सुरक्षित स्थान पर एक फ़ाइल संग्रहीत करे। तो, व्यक्ति A उस फ़ाइल (HTTP इकाई) को व्यक्ति B को पास करता है और उसे कुछ करने के लिए कहता है (HTTP संदेश)। इस मामले में, व्यक्ति एक "इकाई" पारित कर रहा है। HTTP इकाई के संदर्भ में, यह संदेश के साथ संलग्न एक पेलोड है।

आशा है कि सादृश्य ने मदद की।


2

जैसा कि @ hawkeye-parker द्वारा एक टिप्पणी में कहा गया है, ऐसा लगता है कि Entity को हटा दिया गया है। इस 2014 rfc में एक खोज करें , और आप एक्सएमएल संस्थाओं और संदेश निकाय के बारे में देखेंगे, लेकिन एचटीटीपी इकाई के बारे में कुछ भी नहीं।

फिर भी, HttpClient, लेकिन यह भी JaxRS ग्राहक, एक setEntity()औरgetEntity() विधि है।

स्वीकृत उत्तर को देखते हुए, दोनों पुस्तकालय गलत हैं! HttpClient.setEntity()पहले से सेट हेडर नहीं हटाए जाएंगे।


मुझे "इकाई" (और संबंधित "संस्था-हेडर्स") और "संदेश" का अंतर काफी उपयोगी लगा। यह जल्दी से स्पष्ट हो जाता है, जब आप एक नेटवर्क लाइब्रेरी डिज़ाइन करते हैं, और एक HTTP संदेश और इसके विभिन्न अवतारों का विश्लेषण करते हैं, जैसे कि एक बहुस्तरीय संदेश। दुर्भाग्य से, नए RFC इन अलग-अलग "वर्गों" को एक में मिलाते हैं और हमें अपनी खुद की शब्दावली शुरू करने की आवश्यकता है, या "एंटोन" के साथ रहना होगा।
काउचड्यूपर

1

HttpEntityवह वह है जो आप रिक्वेस्ट में (हेडर के साथ) पास करने जा रहे हैं और आपको रिस्पांस में क्या मिल रहा है। गेट रिक्वेस्ट के लिए हम साधारण स्ट्रिंग पास कर रहे हैं

 HttpHeaders headers = new HttpHeaders();
 headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
 HttpEntity<String> entity = new HttpEntity<String>(headers);

पोस्ट के लिए हम पूरा एंटिटी क्लास पास करने जा रहे हैं

public String createProducts(@RequestBody Product product) {
    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
    HttpEntity<Product> entity = new HttpEntity<Product>(product,headers);

    return restTemplate.exchange(
             "http://localhost:8080/products", HttpMethod.POST, entity, String.class
           ).getBody();
}

0

एंटिटी एक संदेश जैसा कुछ होता है, इसमें हेडर होते हैं, जहां मेटाडेटा जैसे स्थान, लैंग, एन्कोडिंग होते हैं ...

और वैकल्पिक रूप से एक निकाय - यह सामग्री आदि के रूप में हैडर में निर्दिष्ट है


0

हमारे पास जो अच्छे उत्तर हैं, उनमें से मेरा मानना ​​है कि आरएफसी 2616 (हाइपरटेक्स्ट ट्रांसफर प्रोटोकॉल - एचटीटीपी / 1.1) से सीधे आने वाली किसी चीज़ का उल्लेख करने लायक है :

सत्ता

अनुरोध और प्रतिक्रिया संदेश MAY एक इकाई को स्थानांतरित करते हैं यदि अन्यथा अनुरोध विधि या प्रतिक्रिया स्थिति कोड द्वारा प्रतिबंधित नहीं है। एक इकाई में इकाई-हेडर फ़ील्ड और एक निकाय निकाय होते हैं , हालांकि कुछ प्रतिक्रियाओं में केवल इकाई-हेडर शामिल होंगे।

एक संक्षेप में: एक इकाई को स्थानांतरित किया जा सकता है, और यह हेडर + बॉडी , या सिर्फ हेडर हो सकता है

चूँकि वहाँ ऊपर लिंक है, मैं अतिरिक्त टिप्पणी करने पर खुद को रोक लेता हूँ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.