Skip to content

Commit

Permalink
Provide a default host header to make request as valid as possible
Browse files Browse the repository at this point in the history
While working on this sinatra/sinatra#2053 in
our project. I noticed than when using Webmock, sinatra logs and
especially the enforced rack-protection were showing this kind of logs:

```
D, [2024-11-22T13:05:16.798156 #26673] DEBUG -- : Rack::Protection::HostAuthorization @all_permitted_hosts=[".company.com"] @permitted_hosts=["company.com"] @domain_hosts=[/\A(?-mix:[a-z0-9\-.]+)company\.com\z/i] @ip_hosts=[] origin_host="" forwarded_host=nil
```

As you can see, `origin_host` is empty, because the header is missing.

When not using webmock, we fallback on `net/http` host header setup.
https://github.com/ruby/net-http/blob/cfbbb50c931a78fc2b5c731b9abeda161e1dfdd1/lib/net/http.rb#L2482
  • Loading branch information
benoittgt committed Nov 22, 2024
1 parent 9ff63ac commit bb1f976
Showing 1 changed file with 4 additions and 0 deletions.
4 changes: 4 additions & 0 deletions lib/webmock/http_lib_adapters/net_http.rb
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,10 @@ def self.request_signature_from_request(net_http, request, body = nil)

headers = Hash[*request.to_hash.map {|k,v| [k, v]}.inject([]) {|r,x| r + x}]

# Prevent empty Host header by providing similar behavior to Net::HTTP
# https://github.com/ruby/net-http/blob/cfbbb50c931a78fc2b5c731b9abeda161e1dfdd1/lib/net/http.rb#L2482
headers['host'] = URI(uri).host if headers['host'].nil?

if request.body_stream
body = request.body_stream.read
request.body_stream = nil
Expand Down

0 comments on commit bb1f976

Please sign in to comment.