Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 512273
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 13, 20262026-05-13T07:18:11+00:00 2026-05-13T07:18:11+00:00

I use PHP to generate dynamic Web pages. As stated on the following tutorial

  • 0

I use PHP to generate dynamic Web pages. As stated on the following tutorial (see link below), the MIME type of XHTML documents should be “application/xhtml+xml” when $_SERVER[‘HTTP_ACCEPT’] allows it. Since you can serve the same page with 2 different MIMEs (“application/xhtml+xml” and “text/html”) you should set the “Vary” HTTP header to “Accept”. This will help the cache on proxies.

Link:
http://keystonewebsites.com/articles/mime_type.php

Now I’m not sure of the implication of:
header(‘Vary: Accept’);
I’m not really sure of what ‘Vary: Accept’ will precisely do…

The only explanation I found is:

After the Content-Type header, a Vary
header is sent to (if I understand it
correctly) tell intermediate caches,
like proxy servers, that the content
type of the document varies depending
on the capabilities of the client
which requests the document.
http://www.456bereastreet.com/archive/200408/content_negotiation/

Anyone can give me a “real” explanation of this header (with that value). I think I understand things like:
Vary: Accept-Encoding
where the cache on proxies could be based on the encoding of the page served, but I don’t understand:
Vary: Accept

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-13T07:18:11+00:00Added an answer on May 13, 2026 at 7:18 am
    • The cache-control header is the primary mechanism for an HTTP server to tell a caching proxy the “freshness” of a response. (i.e., how/if long to store the response in the cache)

    • In some situations, cache-control directives are insufficient. A discussion from the HTTP working group is archived here, describing a page that changes only with language. This is not the correct use case for the vary header, but the context is valuable for our discussion. (Although I believe the Vary header would solve the problem in that case, there is a Better Way.) From that page:

    Vary is strictly for those cases where it’s hopeless or excessively complicated for a proxy to replicate what the server would do.

    • RFC2616 “Header-Field Definitions” describes the header usage from the server perspective, RFC2616 “Caching Negotiated Responses” from a caching proxy perspective. It’s intended to specify a set of HTTP request headers that determine uniqueness of a request.

    A contrived example:

    Your HTTP server has a large landing page. You have two slightly different pages with the same URL, depending if the user has been there before. You distinguish between requests and a user’s “visit count” based on Cookies. But — since your server’s landing page is so large, you want intermediary proxies to cache the response if possible.

    The URL, Last-Modified and Cache-Control headers are insufficient to give this insight to a caching proxy, but if you add Vary: Cookie, the cache engine will add the Cookie header to its caching decisions.

    Finally, for small traffic, dynamic web sites — I have always found the simple Cache-Control: no-cache, no-store and Pragma: no-cache sufficient.

    Edit — to more precisely answer your question: the HTTP request header ‘Accept’ defines the Content-Types a client can process. If you have two copies of the same content at the same URL, differing only in Content-Type, then using Vary: Accept could be appropriate.

    Update 11 Sep 12:

    I’m including a couple links that have appeared in the comments since this comment was originally posted. They’re both excellent resources for real-world examples (and problems) with Vary: Accept; Iif you’re reading this answer you need to read those links as well.

    The first, from the outstanding EricLaw, on Internet Explorer’s behavior with the Vary header and some of the challenges it presents to developers: Vary Header Prevents Caching in IE. In short, IE (pre IE9) does not cache any content that uses the Vary header because the request cache does not include HTTP Request headers. EricLaw (Eric Lawrence in the real world) is a Program Manager on the IE team.

    The second is from Eran Medan, and is an on-going discussion of Vary-related unexpected behavior in Chrome: Backing doesn’t handle Vary header correctly. It’s related to IE’s behavior, except the Chrome devs took a different approach — though it doesn’t appear to have been a deliberate choice.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Ask A Question

Stats

  • Questions 357k
  • Answers 357k
  • Best Answers 0
  • User 1
  • Popular
  • Answers
  • Editorial Team

    How to approach applying for a job at a company ...

    • 7 Answers
  • Editorial Team

    How to handle personal stress caused by utterly incompetent and ...

    • 5 Answers
  • Editorial Team

    What is a programmer’s life like?

    • 5 Answers
  • Editorial Team
    Editorial Team added an answer You probably want to call setlocale() first, "LC_ALL" should do… May 14, 2026 at 9:06 am
  • Editorial Team
    Editorial Team added an answer Linux Ubuntu Desktop Jaunty Firebug FireCookie Pixel Perfect Web developer… May 14, 2026 at 9:06 am
  • Editorial Team
    Editorial Team added an answer Your code should look like this: var par = [];… May 14, 2026 at 9:06 am

Related Questions

I would like to create a caching system that will bypass some mechanisms in
I'm looking for recommendations of a good, free tool for generating sample data for
I've a problem which is giving me some hard time trying to figure it
Edit: I have since found and published an efficient and elegant solution that transforms
I'm working on a new CMS to use on repeative projects. Basically this chunk

Trending Tags

analytics british company computer developers django employee employer english facebook french google interview javascript language life php programmer programs salary

Top Members

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.