Skip to content

Commit 8e8327c

Browse files
committed
Provide a default host header to make request as valid as possible
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
1 parent 50bb349 commit 8e8327c

1 file changed

Lines changed: 4 additions & 0 deletions

File tree

lib/webmock/http_lib_adapters/net_http.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,10 @@ def self.request_signature_from_request(net_http, request, body = nil)
271271

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

274+
# Prevent empty Host header by providing similar behavior as Net::HTTP
275+
# https://github.com/ruby/net-http/blob/cfbbb50c931a78fc2b5c731b9abeda161e1dfdd1/lib/net/http.rb#L2482
276+
headers['host'] = URI(uri).host if headers['host'].nil?
277+
274278
if request.body_stream
275279
body = request.body_stream.read
276280
request.body_stream = nil

0 commit comments

Comments
 (0)