   @spec forward_response(Message.response) :: on_response_sent
   def forward_response(%Message{start_line: %StatusLine{}} = response) do
     response
-    |> remove_topmost_via()
     |> fallback_to_transport(&Transactions.send_response/1)
-  end
-
-  defp remove_topmost_via(message) do
-    message =
-      message |> Message.update_header(:via, [],
-          fn [_ | t] -> t end)
-
-    if message.headers.via == [] do
-      raise ArgumentError, "Via cannot be empty, wrong message forward"
-    end
-
-    message
   end
 
   defp fallback_to_transport(message, fun) do

  def forward_response(%Message{start_line: %StatusLine{}} = response,
                       %Transactions.Server.Key{} = server_key) do
    response
    |> remove_topmost_via()
    |> fallback_to_transport(&Transactions.send_response(&1, server_key))
  end
end


  A proxy must insert a Via header field value before the existing request Via
  header field values. If the `branch` parameter does not start with the magic
  cookie `"z9hG4bK"`, one will be added.
  """
  @spec add_via(Message.request, Message.protocol, host :: String.t,
                dport :: integer, branch :: String.t) :: Message.request
