private void SetResponseHeader(string key, NameValueCollection headers, HttpListenerResponse response) { bool setValue = true; if (WebHeaderCollection.IsRestricted(key)) { var currentKey = key.ToLower().Trim(); var lookup = GetRestrictedHeaderLookup(); var match = lookup.FirstOrDefault(x => x.Item1 == currentKey); if (match != null) { setValue = false; try { if (headers[key].ToLower() == "keep-alive") { response.GetType().InvokeMember("KeepAlive", BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty, Type.DefaultBinder, response, new object[] { true }); } else { response.GetType().InvokeMember(match.Item2, BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty, Type.DefaultBinder, response, new object[] { headers[key] }); } } catch (Exception) { } } } if (setValue) { try { if (Array.IndexOf(response.Headers.AllKeys, key) != -1) { response.Headers[key] = headers[key]; } else { response.Headers.Add(key, headers[key]); } } catch (Exception) { } } }