簡體   English   中英

字節數組作為自定義HTTP標頭編碼?

[英]Byte Array as Custom HTTP Header Encoding?

我想添加以utf8編碼(Encoding.UTF8.GetString)編碼的自定義HTTP標頭( 散列和簽名 )。 將數據發布IIS時遇到Bad Request(400)錯誤。

如果自定義HTTP標頭使用base64編碼進行編碼,則沒有問題。 但是我們的合作伙伴堅持使用utf8編碼。

我想知道此“錯誤請求(400)”是否僅由IIS引起?

這是代碼:

    var client = new HttpClient();
    client.DefaultRequestHeaders.Accept.Add(new 
    MediaTypeWithQualityHeaderValue("application/json"));
    HttpRequestMessage msg = new HttpRequestMessage(HttpMethod.Post, 
             "https://putsreq.com/AIWKVacHh2ok5FMGFpEg");
    var reqBody = "{'hello': 'world'}";
    msg.Content = new StringContent(reqBody);
    msg.Content.Headers.ContentType = new 
         MediaTypeWithQualityHeaderValue("application/json");
    var signature = SignMessage(reqBody); //hash and sign the message using 
                                          //private key
    var signatureString = Encoding.UTF8.GetString(signature); 
    msg.Headers.Add("signature", signature);
    try{
        var response = await client.SendAsync(msg);
        response.EnsureSuccessStatusCode();
        //Continue if success
   }catch(Exception ex){
        Trace.WriteLine("Exception: " + ex);
   }

復制自評論。

HTTP標頭對出現的字符有嚴格的規定,

https://tools.ietf.org/html/rfc7231#section-6.5.1

UTF8數據的標題可能包含無效字符,這可能會觸發400個錯誤。 您可以捕獲請求並進行分析(瀏覽器,Fiddler或Wireshark的開發人員工具)。

相反,Base64是安全的選擇。 而且諸如基本身份驗證之類的標准確實使用Base64來編碼用戶憑據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM