diff --git a/lib/plug/conn.ex b/lib/plug/conn.ex index ecb79c0b..90961d48 100644 --- a/lib/plug/conn.ex +++ b/lib/plug/conn.ex @@ -1437,7 +1437,7 @@ defmodule Plug.Conn do defp adapter_inform(%Conn{adapter: {adapter, payload}}, status, headers) do for {key, value} <- headers do - validate_header_key_value!(key, value) + validate_header_key_value!(to_string(key), value) end adapter.inform(payload, status, headers) diff --git a/test/plug/conn_test.exs b/test/plug/conn_test.exs index fba5caae..d5080944 100644 --- a/test/plug/conn_test.exs +++ b/test/plug/conn_test.exs @@ -468,6 +468,11 @@ defmodule Plug.ConnTest do end end + test "inform/3 accepts atom header keys (e.g. for websocket upgrades)" do + conn = conn(:get, "/foo") |> inform(101, [{:upgrade, "websocket"}, {:connection, "Upgrade"}]) + assert {101, [{:upgrade, "websocket"}, {:connection, "Upgrade"}]} in sent_informs(conn) + end + test "inform!/3 performs an informational request" do conn = conn(:get, "/foo") |> inform!(103, [{"link", "; rel=preload; as=style"}]) assert {103, [{"link", "; rel=preload; as=style"}]} in sent_informs(conn)