[英]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.