fix: curl async http client empty-valued header #2953
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Behavior
I found that some of the requests I sent by tornado would lose part of headers, exactly the empty-valued ones.
For example, when posting a request with headers
{'Content-Type': "application/json", 'Authorization': ""}
, only headerContent-Type
will be sent out actually, with the headerAuthorization
dropped because it's empty.For some requests, header with blank content is indispensable. In my case, I met an odd server must make sure there is an
Authorization
in headers even it is blank.Reason
The behavior caused by the way curl-http-client constructing headers, which converting all of headers in "%s: %s" format. The headers having no value, such as 'xxxx: ', would be removed by cURL.
To keep those headers in request, the colon should be replaced with semicolon, such as 'xxxx;'. libcurl examples