views:

119

answers:

2

Is there a particular order in PHP to set HTTP headers with the header() function ?

I mean for example must I call header('Content-Language: en'); before header('Content-Type: text/plain'); or whathever order will be OK.

My guess is that order isn't important as long as all he headers are set before any content outputted, but I just want to be sure that's the case...

+5  A: 

No, the order of the header fields doesn’t matter:

The order in which header fields with differing field names are received is not significant. However, it is "good practice" to send general-header fields first, followed by request-header or response- header fields, and ending with the entity-header fields.

Only if you’re sending multiple fields of the same name. Then the field values are treated like they would appear in one list:

Multiple message-header fields with the same field-name MAY be present in a message if and only if the entire field-value for that header field is defined as a comma-separated list [i.e., #(values)]. It MUST be possible to combine the multiple header fields into one "field-name: field-value" pair, without changing the semantics of the message, by appending each subsequent field-value to the first, each separated by a comma. The order in which header fields with the same field-name are received is therefore significant to the interpretation of the combined field value, and thus a proxy MUST NOT change the order of these field values when a message is forwarded.

So the following:

Cache-Control: private
Cache-Control: must-revalidate

would be equivalent to:

Cache-Control: private, must-revalidate

And here it depends on the definition of the header field (here Cache-Control) if the order does matter.

Gumbo
+4  A: 

The order in which header fields with differing field names are received is not significant. However, it is "good practice" to send general-header fields first, followed by request-header or response- header fields, and ending with the entity-header fields.

http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2 (Hypertext Transfer Protocol -- HTTP/1.1)

Thomas