သာမန် HTTP ပရောက်စီမှတစ်ဆင့် ssl::stream<tcp::socket> အတွက် ဦးတည်ရာသို့ TLS မလုပ်ခိုင်းမီ ၎င်း၏ အကြမ်းထည် သယ်ယူမှုကို အသုံးပြုပါ:

auto& transport = tlsStream.next_layer();
  1. ထို သယ်ယူမှုကို ပရောက်စီ host နှင့် port သို့ ချိတ်ဆက်ပါ။ ပရောက်စီ အထောက်အထား မသတ်မှတ်ထားသော ခွင့်ပြုထားသည့် အများသူငှာ HTTPS ဦးတည်ရာအတွက် HTTP ပရောက်စီ စာရင်း သည် ကိုယ်စားလှယ်လောင်း endpoint များကို ပေးသည်; ကိုယ်စားလှယ်လောင်းသည် တောင်းဆိုထားသော tunnel ကို ခွင့်ပြုကြောင်း စစ်ဆေးပါ။
  2. ဦးတည်ရာ၏ authority ကို အမည်ပေး၍ CONNECT ပို့ပါ၊ ဥပမာ api.example:443၊ ထို့အပြင် အကြမ်းထည် သယ်ယူမှုပေါ်တွင် ပြည့်စုံသော တုံ့ပြန်မှု header များကို ခွဲခြမ်းစိတ်ဖြာပါ။ အောင်မြင်သော 2xx သည် tunnel ကို ဖွင့်သည်; ငြင်းပယ်မှုသည် HTTP ပရောက်စီ တုံ့ပြန်မှုအဖြစ် ကျန်ရှိသည်။
  3. ဦးတည်ရာ၏ host အမည်၊ လိုအပ်သော SNI၊ ယုံကြည်ရာ အမြစ်များနှင့် peer အတည်ပြုချက်ကို ပြင်ဆင်ပြီး tlsStream တွင် client လက်ဆွဲနှုတ်ဆက်မှုကို စတင်ပါ။
  4. TLS အောင်မြင်ပြီးနောက် အပလီကေးရှင်းအတွက် SSL stream ဖတ်ခြင်းနှင့် ရေးခြင်းကို အသုံးပြုပါ။ ထိုအချိန်တွင် နောက်လွှာကို တိုက်ရိုက်ဖတ်ခြင်းသည် TLS လုပ်ဆောင်မှုကို ကျော်သွားသည်။

HTTP parser ၏ ပိုလျှံမှုကို နောက်အဆင့်သို့ သယ်ဆောင်ပါ။ Asio တွင် buffer လုပ်ထားသော လက်ဆွဲနှုတ်ဆက်မှု overload များရှိသည်; parser ပိုင်ဆိုင်သော အမြီးကို ပစ်ပယ်ပါက socket မှ ဖတ်ပြီးသား byte များ ဆုံးရှုံးနိုင်သည်။

ဤရိုးရှင်းသော အမျိုးအစားဖြင့် next_layer နှင့် lowest_layer နှစ်ခုလုံး TCP သို့ ရောက်သည်။ wrapper ပိုများလာပါက ၎င်းတို့ကို ကွဲပြားစေနိုင်သည်၊ ထို့ကြောင့် ပရောက်စီ၏ အမှန်တကယ် wire protocol ကို သယ်ဆောင်သော interface ကို ရွေးပါ။ HTTPS ပရောက်စီသည် နောက်ထပ် TLS အဆင့်တစ်ခုကို ထည့်ပြီး ဤ plaintext CONNECT အစီအစဉ်၏ အပြင်ဘက်တွင် ရှိသည်။

ဆက်စပ်ဆောင်းပါးများ