Are there any constants for the default HTTP headers?
Solution 1
I found this question while trying to discover the same thing: where are the header name constants as strings?
In ASP.NET Core, Microsoft.Net.Http.Headers.HeaderNames
is the class that saved me.
public static class HeaderNames
{
public const string Accept = "Accept";
public const string AcceptCharset = "Accept-Charset";
public const string AcceptEncoding = "Accept-Encoding";
public const string AcceptLanguage = "Accept-Language";
public const string AcceptRanges = "Accept-Ranges";
public const string Age = "Age";
public const string Allow = "Allow";
public const string Authorization = "Authorization";
public const string CacheControl = "Cache-Control";
public const string Connection = "Connection";
public const string ContentDisposition = "Content-Disposition";
public const string ContentEncoding = "Content-Encoding";
public const string ContentLanguage = "Content-Language";
public const string ContentLength = "Content-Length";
public const string ContentLocation = "Content-Location";
public const string ContentMD5 = "Content-MD5";
public const string ContentRange = "Content-Range";
public const string ContentType = "Content-Type";
public const string Cookie = "Cookie";
public const string Date = "Date";
public const string ETag = "ETag";
public const string Expires = "Expires";
public const string Expect = "Expect";
public const string From = "From";
public const string Host = "Host";
public const string IfMatch = "If-Match";
public const string IfModifiedSince = "If-Modified-Since";
public const string IfNoneMatch = "If-None-Match";
public const string IfRange = "If-Range";
public const string IfUnmodifiedSince = "If-Unmodified-Since";
public const string LastModified = "Last-Modified";
public const string Location = "Location";
public const string MaxForwards = "Max-Forwards";
public const string Pragma = "Pragma";
public const string ProxyAuthenticate = "Proxy-Authenticate";
public const string ProxyAuthorization = "Proxy-Authorization";
public const string Range = "Range";
public const string Referer = "Referer";
public const string RetryAfter = "Retry-After";
public const string Server = "Server";
public const string SetCookie = "Set-Cookie";
public const string TE = "TE";
public const string Trailer = "Trailer";
public const string TransferEncoding = "Transfer-Encoding";
public const string Upgrade = "Upgrade";
public const string UserAgent = "User-Agent";
public const string Vary = "Vary";
public const string Via = "Via";
public const string Warning = "Warning";
public const string WebSocketSubProtocols = "Sec-WebSocket-Protocol";
public const string WWWAuthenticate = "WWW-Authenticate";
}
Solution 2
Request Headers
/// <summary>
/// Contains the standard set of headers applicable to an HTTP request.
/// </summary>
public static class HttpRequestHeaders
{
///<summary>Content-Types that are acceptable</summary>
public const string Accept = "Accept";
///<summary>Character sets that are acceptable</summary>
public const string AcceptCharset = "Accept-Charset";
///<summary>Acceptable encodings. See HTTP compression.</summary>
public const string AcceptEncoding = "Accept-Encoding";
///<summary>Acceptable languages for response</summary>
public const string AcceptLanguage = "Accept-Language";
///<summary>Acceptable version in time</summary>
public const string AcceptDatetime = "Accept-Datetime";
///<summary>Authentication credentials for HTTP authentication</summary>
public const string Authorization = "Authorization";
///<summary>Used to specify directives that MUST be obeyed by all caching mechanisms along the request/response chain</summary>
public const string CacheControl = "Cache-Control";
///<summary>What type of connection the user-agent would prefer</summary>
public const string Connection = "Connection";
///<summary>an HTTP cookie previously sent by the server with Set-Cookie (below)</summary>
public const string Cookie = "Cookie";
///<summary>The length of the request body in octets (8-bit bytes)</summary>
public const string ContentLength = "Content-Length";
///<summary>A Base64-encoded binary MD5 sum of the content of the request body</summary>
public const string ContentMD5 = "Content-MD5";
///<summary>The MIME type of the body of the request (used with POST and PUT requests)</summary>
public const string ContentType = "Content-Type";
///<summary>The date and time that the message was sent</summary>
public const string Date = "Date";
///<summary>Indicates that particular server behaviors are required by the client</summary>
public const string Expect = "Expect";
///<summary>The email address of the user making the request</summary>
public const string From = "From";
///<summary>The domain name of the server (for virtual hosting), mandatory since HTTP/1.1. Although domain name are specified as case-insensitive[5][6], it is not specified whether the contents of the Host field should be interpreted in a case-insensitive manner[7] and in practice some implementations of virtual hosting interpret the contents of the Host field in a case-sensitive manner.[citation needed]</summary>
public const string Host = "Host";
///<summary>Only perform the action if the client supplied entity matches the same entity on the server. This is mainly for methods like PUT to only update a resource if it has not been modified since the user last updated it.</summary>
public const string IfMatch = "If-Match";
///<summary>Allows a 304 Not Modified to be returned if content is unchanged</summary>
public const string IfModifiedSince = "If-Modified-Since";
///<summary>Allows a 304 Not Modified to be returned if content is unchanged, see HTTP ETag</summary>
public const string IfNoneMatch = "If-None-Match";
///<summary>If the entity is unchanged, send me the part(s) that I am missing; otherwise, send me the entire new entity</summary>
public const string IfRange = "If-Range";
///<summary>Only send the response if the entity has not been modified since a specific time.</summary>
public const string IfUnmodifiedSince = "If-Unmodified-Since";
///<summary>Limit the number of times the message can be forwarded through proxies or gateways.</summary>
public const string MaxForwards = "Max-Forwards";
///<summary>Implementation-specific headers that may have various effects anywhere along the request-response chain.</summary>
public const string Pragma = "Pragma";
///<summary>Authorization credentials for connecting to a proxy.</summary>
public const string ProxyAuthorization = "Proxy-Authorization";
///<summary>Request only part of an entity. Bytes are numbered from 0.</summary>
public const string Range = "Range";
///<summary>This is the address of the previous web page from which a link to the currently requested page was followed. (The word “referrer” is misspelled in the RFC as well as in most implementations.)</summary>
public const string Referersic = "Referer[sic]";
///<summary>The transfer encodings the user agent is willing to accept: the same values as for the response header Transfer-Encoding can be used, plus the trailers value (related to the chunked transfer method) to notify the server it expects to receive additional headers (the trailers) after the last, zero-sized, chunk.</summary>
public const string TE = "TE";
///<summary>Ask the server to upgrade to another protocol.</summary>
public const string Upgrade = "Upgrade";
///<summary>The user agent string of the user agent</summary>
public const string UserAgent = "User-Agent";
///<summary>Informs the server of proxies through which the request was sent.</summary>
public const string Via = "Via";
///<summary>A general warning about possible problems with the entity body.</summary>
public const string Warning = "Warning";
///<summary>Contains the original source address of the request.</summary>
public const string XForwardedFor = "X-Forwarded-For";
}
Response Headers
/// <summary>
/// Contains the standard set of headers applicable to an HTTP response.
/// </summary>
public static class HttpResponseHeaders
{
///<summary>What partial content range types this server supports</summary>
public const string AcceptRanges = "Accept-Ranges";
///<summary>The age the object has been in a proxy cache in seconds</summary>
public const string Age = "Age";
///<summary>Valid actions for a specified resource. To be used for a 405 Method not allowed</summary>
public const string Allow = "Allow";
///<summary>Tells all caching mechanisms from server to client whether they may cache this object. It is measured in seconds</summary>
public const string CacheControl = "Cache-Control";
///<summary>Options that are desired for the connection[17]</summary>
public const string Connection = "Connection";
///<summary>The type of encoding used on the data. See HTTP compression.</summary>
public const string ContentEncoding = "Content-Encoding";
///<summary>The language the content is in</summary>
public const string ContentLanguage = "Content-Language";
///<summary>The length of the response body in octets (8-bit bytes)</summary>
public const string ContentLength = "Content-Length";
///<summary>An alternate location for the returned data</summary>
public const string ContentLocation = "Content-Location";
///<summary>A Base64-encoded binary MD5 sum of the content of the response</summary>
public const string ContentMD5 = "Content-MD5";
///<summary>An opportunity to raise a File Download dialogue box for a known MIME type with binary format or suggest a filename for dynamic content. Quotes are necessary with special characters.</summary>
public const string ContentDisposition = "Content-Disposition";
///<summary>Where in a full body message this partial message belongs</summary>
public const string ContentRange = "Content-Range";
///<summary>The MIME type of this content</summary>
public const string ContentType = "Content-Type";
///<summary>The date and time that the message was sent</summary>
public const string Date = "Date";
///<summary>An identifier for a specific version of a resource, often a message digest</summary>
public const string ETag = "ETag";
///<summary>Gives the date/time after which the response is considered stale</summary>
public const string Expires = "Expires";
///<summary>The last modified date for the requested object, inRFC 2822 format</summary>
public const string LastModified = "Last-Modified";
///<summary>Used to express a typed relationship with another resource, where the relation type is defined by RFC 5988</summary>
public const string Link = "Link";
///<summary>Used in redirection, or when a new resource has been created.</summary>
public const string Location = "Location";
///<summary>This header is supposed to set P3P policy, in the form of P3P:CP=your_compact_policy. However, P3P did not take off,[22] most browsers have never fully implemented it, a lot of websites set this header with fake policy text, that was enough to fool browsers the existence of P3P policy and grant permissions for third party cookies.</summary>
public const string P3P = "P3P";
///<summary>Implementation-specific headers that may have various effects anywhere along the request-response chain.</summary>
public const string Pragma = "Pragma";
///<summary>Request authentication to access the proxy.</summary>
public const string ProxyAuthenticate = "Proxy-Authenticate";
///<summary>Used in redirection, or when a new resource has been created. This refresh redirects after 5 seconds. This is a proprietary, non-standard header extension introduced by Netscape and supported by most web browsers.</summary>
public const string Refresh = "Refresh";
///<summary>If an entity is temporarily unavailable, this instructs the client to try again after a specified period of time (seconds).</summary>
public const string RetryAfter = "Retry-After";
///<summary>A name for the server</summary>
public const string Server = "Server";
///<summary>an HTTP cookie</summary>
public const string SetCookie = "Set-Cookie";
///<summary>A HSTS Policy informing the HTTP client how long to cache the HTTPS only policy and whether this applies to subdomains.</summary>
public const string StrictTransportSecurity = "Strict-Transport-Security";
///<summary>The Trailer general field value indicates that the given set of header fields is present in the trailer of a message encoded with chunked transfer-coding.</summary>
public const string Trailer = "Trailer";
///<summary>The form of encoding used to safely transfer the entity to the user. Currently defined methods are:chunked, compress, deflate, gzip, identity.</summary>
public const string TransferEncoding = "Transfer-Encoding";
///<summary>Tells downstream proxies how to match future request headers to decide whether the cached response can be used rather than requesting a fresh one from the origin server.</summary>
public const string Vary = "Vary";
///<summary>Informs the client of proxies through which the response was sent.</summary>
public const string Via = "Via";
///<summary>A general warning about possible problems with the entity body.</summary>
public const string Warning = "Warning";
///<summary>Indicates the authentication scheme that should be used to access the requested entity.</summary>
public const string WWWAuthenticate = "WWW-Authenticate";
}
Solution 3
There are some available in the Microsoft.Net.Http.Headers
nuget package. In my asp.net core project it was already installed.
Example usage:
var value = request.Headers[Microsoft.Net.Http.Headers.HeaderNames.IfNoneMatch]
Might be what some are looking for?
Solution 4
They have them in HttpKnownHeaderNames but unfortunately that class is internal. I opened an issue for it: https://github.com/dotnet/corefx/issues/10632.
Solution 5
Microsoft created enums for the Request and Response Headers.
Take a look at the following:
Related videos on Youtube
Luke Puplett
Started out as a Windows PSS engineer for Microsoft UK, then built industrial scale automation solutions for banks before turning to application and systems programming on .NET and Azure.
Updated on August 11, 2021Comments
-
Luke Puplett over 2 years
Has Microsoft created a class full of constants for the standard HTTP header names or will I have to write my own?
-
Luke Puplett almost 12 yearsThanks Jed - sometimes the Framework is like wandering up and down the isles of a huge hardware store, and as you can see, I'm impatient ;)
-
Niyati Priyadarshinee over 10 yearsI thought to myself, "surely these constants must exist in the .NET framework somewhere," but when I reflected on System.Net.Http.Headers.HttpRequestHeader.IfModifiedSince I find the baked-in string "If-Modified-Since" not once, but twice.
-
Luke Puplett over 10 years@Hugh Not so fast; the compiler will have burned those strings into that code even if they were const, see stum.de/2009/01/14/… --additionally, thjs is why they say never to use const for strings that may change since they get burned across references and could end-up different in different versions of libs compiled at different times.
-
Anton almost 10 yearsThis won't provide you with string constants. Although you can do
HttpRequestHeader.AcceptLanguage.ToString()
, the result will beAcceptLanguage
and notAccept-Language
. So I don't think it really answers the question. -
Jed almost 10 years@Anton - The OP never mentioned he was looking for for string constants - Also, the comment that he posted (right above yours) implies that the MS enums suffice.
-
Anton almost 10 years@Jed - Indeed. I guess the first answer caused me to believe this is what he wants. Sorry about that. Just suggested an edit with clarification to be able to remove the downvote.
-
crush almost 8 yearsThese enums seem to have integer values. Is the only option to call
.ToString()
on them, or is there another way to get the name as a string? -
JG in SD almost 8 years@crush I wouldn't use
ToString()
to get the string representation of the value, as many header values have a hyphen which you will not get in this manner. -
crush almost 8 yearsThanks, that's a good point I didn't think about. I'm trying to set headers on a Response object in MVC.
System.Web.HttpResponseBase
version 4.0.0.0. Is there an enum that has strings that I can use, or will I need to make a helper class myself? -
JG in SD almost 8 years@crush I'm not aware of something in .NET that'll have the string constants for you. Luke Puplett's answer may be close to what you're looking for.
-
Ajay Suwalka over 6 yearsThere's no such class, Can you please give the reference?
-
Mashton over 6 yearsSure there is, if you're using AspNetCore. As I say, it helped me and may help others with the same problem. github.com/aspnet/AspLabs/blob/master/src/Microsoft.AspNetCore/… for the code, or the MSDN reference is docs.microsoft.com/en-us/dotnet/api/…
-
user3335999 about 5 yearsDown vote. This class specified enum values NOT string constants like asked for.
-
Sampath Dilhan over 3 yearsNow its available in github.com/dotnet/aspnetcore repo in followoing path:
src/Http/Headers/src/HeaderNames.cs
. NuGet package is:Microsoft.Net.Http.Headers
-
Palec over 2 yearsCurrently, in .NET 5, the class has static readonly fields, not constants. :-( Not usable e.g. as
[FromHeader(Name = HeaderNames.IfNoneMatch)]
, because HeaderNames.IfNoneMatch is not a compile time constant anymore. -
Palec over 2 yearsI solved it by creating a copy of the class in my code. See my answer: stackoverflow.com/a/68731770/2157640
-
Palec over 2 yearsAs far as I know, this is still accurate as of ASP.NET Core 6.
-
Carmageddon about 2 yearsWhere is
Access-Control-Expose-Headers
? Its not on the list you pasted... -
Mashton about 2 years@Carmageddon That was a snapshot of this class from nearly 5 years. Also seems the URL in GitHub changed, but if you look at the class (or search for its new location in GitHub) you'll see it has that header. github.com/dotnet/aspnetcore/blob/main/src/Http/Headers/src/…