2016-06-06 13 views
5

मैं अमेज़ॅन से एस 3 सेवा के लिए सीधे आरईएसटी एपीआई के साथ काम करने की कोशिश कर रहा हूं और मुझे समझ में नहीं आता कि एक कैननिकल अनुरोध क्या है।एडब्ल्यूएस - वास्तव में एक कैननिकल अनुरोध वास्तव में क्या है?

क्या मुझे समझ में है:

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

Authentication header creation line

फिर, सवाल कर रहे हैं:

  • विहित अनुरोध वास्तविक अनुरोध के रूप में ही है?
  • एक कैननिकल अनुरोध स्ट्रिंग केवल एक बार बनाई जाती है और फिर अगले अनुरोधों पर उपयोग की जाती है?

उत्तर

2

canonical request एक शब्दावली है।

कैननिकल अनुरोध वास्तविक अनुरोध के समान है?

यह वास्तविक अनुरोध का प्रतिनिधित्व है; अपने स्क्रीनशॉट प्रति, यह

CanonicalRequest = 
    HTTPRequestMethod + '\n' + 
    CanonicalURI + '\n' + 
    CanonicalQueryString + '\n' + 
    CanonicalHeaders + '\n' + 
    SignedHeaders + '\n' + 
    HexEncode(Hash(RequestPayload)) 
निश्चित रूप से

अगर आप पारित है कि अपने ब्राउज़र में सख्त है, यह समझा नहीं किया जाएगा परिभाषित किया गया है और इसलिए यह परिणत हो जाएगा यह निष्पादित नहीं किया जाएगा (अच्छा आदि एन्कोडिंग बनाने के ...)

तो उदाहरण के लिए यदि आप अपने अनुरोध की एक विहित प्रतिनिधित्व के रूप में

CanonicalRequest = 
    "GET" + '\n' + 
    "http://s3.amazonaws.com/examplebucket" + '\n' + 
    URI-encode("marker")+"="+URI-encode("someMarker")+"&"+URI-encode("max-keys")+"="+URI-encode("20") + "&" +URI-encode("prefix")+"="+URI-encode("somePrefix") + '\n' + 
    Lowercase("host")+":"+Trim("s3.amazonaws.com")+"\n"+Lowercase("x-amz-<something>")+":"+Trim("<the_value>")+ '\n' + 
    "host;x-amz-<something (same as above)>" + '\n' + 
    HexEncode(Hash(RequestPayload)) 

परिभाषित मिलता तो इस परिभाषा से, प्रणाली "असली" अनुरोध एक है कि सर्वर के विरुद्ध निष्पादित किया जाएगा जिसका अर्थ पैदा करेगा जाएगा

+2

* "फिर इस परिभाषा से, सिस्टम" वास्तविक "अनुरोध तैयार करेगा जिसका अर्थ सर्वर के खिलाफ निष्पादित किया जाएगा" * इससे? नहीं, कैननिकल अनुरोध अनुरोध तत्वों का एक निर्धारिती प्रतिनिधित्व है, "कैननिकल" जिसका अर्थ है कि जब S3 अनुरोध प्राप्त करता है तो यह वास्तविक अनुरोध से इस समान स्ट्रिंग को फिर से उत्पन्न कर सकता है, और यह देखने के लिए कि आपको भेजा गया हस्ताक्षर की गणना कर सकते हैं या नहीं, यह देखने के लिए कि क्या आप यह सही हो गया (जो साबित करता है कि आप अपनी पहुंच कुंजी आईडी से मेल खाने वाले रहस्य का उपयोग कर रहे हैं)। * कैननिकल अनुरोध से * कुछ भी नहीं लिया गया है, क्योंकि इसे तुरंत चरण 2 में धोया और त्याग दिया जाता है। –

+0

कैननिकल अनुरोध में एक ही शीर्षलेख होना चाहिए? हेडर में तिथियों (कैननिकल और वास्तविक अनुरोधों में) और प्रमाणीकरण हेडर पीढ़ी के दौरान उपयोग की जाने वाली तिथियों के बारे में क्या? क्या वे वही होना चाहिए? – MikeVelazco

+0

मैं प्रोग्रामिक रूप से कैनोलिक रूप कैसे उत्पन्न कर सकता हूं? –

संबंधित मुद्दे