HttpClient中“服务器返回无效或无法识别的响应”的含义

Mar*_*ery 8 .net c# http .net-core

等待HttpClient.PostAsync响应时,有时会出现错误,指出“服务器返回了无效或无法识别的响应”

System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.Http.WinHttpException: The server returned an invalid or unrecognized response
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
   at System.Net.Http.WinHttpHandler.<StartRequest>d__105.MoveNext()
   --- End of inner exception stack trace ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
   at System.Net.Http.HttpClient.<FinishSendAsync>d__58.MoveNext()
Run Code Online (Sandbox Code Playgroud)

那是一个相当神秘的错误;我想我可以设想一下“无效”响应可能是什么(即语法无效的HTTP响应,例如直接跳到没有状态行的标头中的响应),但实际上是对HTTP的“无法识别”响应请求?该消息似乎是胡说八道。

在什么情况下实际上可以触发此错误?

ris*_*ism 6

在使用 http 方案调用调用仅限 https 的端点时,您可以 100% 地重现此情况。因此,例如在以下位置调用 API:

https://www.mysecureapi.com
Run Code Online (Sandbox Code Playgroud)

使用

http://www.mysecureapi.com
Run Code Online (Sandbox Code Playgroud)


Kur*_*ula -2

可能的情况是您在没有授权令牌或标头的情况下发出了 http 请求。如果您尝试调用安全方法或 api,则需要共享或验证安全令牌才能获取或发布数据。

  • 这似乎不太可能。在这种情况下,API 通常会返回 401 或 403 响应,这仍然是有效的 HTTP 响应。 (2认同)