开发者

Header order question in PHP (and HTTP in general)

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

h开发者_JS百科eader('Content-Type: text/plain');

or does the order not matter?

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


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.


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)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜