标签: http-status-code-304

"304 Not Modified"如何运作?

  • 如何生成"304 Not Modified"?

  • 浏览器如何确定对http请求的响应是否为304?

  • 是由浏览器设置还是从服务器发送?

  • 如果由服务器发送,服务器如何知道缓存中可用的数据,它如何将304设置为图像?

我的猜测,如果由浏览器生成

function is_modified()
{
    return get_data_from_cache() === get_data_from_url();
};

function get_data_from_cache()
{
    return some_hash_or_xxx_function(cache_data);
}

function get_data_from_url()
{
     return some_hash_or_xxx_function(new_data);
}

function some_hash_or_xxx_function(data)
{
  // do something with data
  // what is that algorithm.?
      return result;
}

console.log(is_modified());
Run Code Online (Sandbox Code Playgroud)

我依靠第三方API提供程序来获取数据,解析并将其推送到数据库.在每个请求期间数据可能会也可能不会发生变化,但是标题总是发送200,我不想解析,检查DB中的最后一个唯一ID等等来确定数据的变化,也不直接比较结果而是我md5(),sha1()&crc32()HASHed结果和工作正常,但想知道算法来确定304.

我想使用相同类型的算法来确定数据的变化.

browser http http-headers http-status-code-304

165
推荐指数
2
解决办法
15万
查看次数

NodeJS/express:缓存和304状态代码

当我重新加载使用express制作的网站时,我得到一个使用Safari(而不是Chrome)的空白页面,因为NodeJS服务器向我发送了304状态代码.

怎么解决这个?

当然,这也可能只是Safari的问题,但实际上它适用于所有其他网站,所以它也必须是我的NodeJS服务器上的问题.

要生成页面,我正在使用Jade res.render.

更新:似乎发生此问题是因为Safari发送'cache-control': 'max-age=0'重新加载.

更新2:我现在有一个解决方法,但有更好的解决方案吗?解决方法:

app.get('/:language(' + content.languageSelector + ')/:page', function (req, res)
{
    // Disable caching for content files
    res.header("Cache-Control", "no-cache, no-store, must-revalidate");
    res.header("Pragma", "no-cache");
    res.header("Expires", 0);

    // rendering stuff here…
}
Run Code Online (Sandbox Code Playgroud)

更新3: 所以完整的代码部分目前是:

app.get('/:language(' + content.languageSelector + ')/:page', pageHandle);

function pageHandle (req, res)
{
    var language = req.params.language;
    var thisPage = content.getPage(req.params.page, language);

    if (thisPage)
    {
        // Disable caching for content files
        res.header("Cache-Control", "no-cache, no-store, must-revalidate");
        res.header("Pragma", "no-cache");
        res.header("Expires", 0); …
Run Code Online (Sandbox Code Playgroud)

safari caching node.js http-status-code-304 express

78
推荐指数
2
解决办法
8万
查看次数

如何检查jQuery.ajax()请求标头状态是否为"304 Not Modified"?

如何检查jQuery.ajax()请求标头状态是否为"304 Not Modified"?

jqXHR.status通常返回200,即使请求的标题是"304 Not Modified".

ifModified:true 没有太多帮助,因为它破坏了XHR数据请求.

ajax jquery header http-status-code-304

46
推荐指数
1
解决办法
2万
查看次数

为什么我在使用HttpWebRequest时在某些链接上出现"(304)Not Modified"错误?

我尝试使用HttpWebRequest访问某些链接的任何想法我得到"远程服务器返回错误:(304)未修改." 在代码中?

我正在使用的代码来自Jeff的帖子(该页面似乎已经消失,请在Wayback Machine上查看归档副本).

注意代码的概念是一个简单的代理服务器,因此我将浏览器指向这个本地运行的代码片段,它获取我的浏览器请求,然后通过创建新的HttpWebRequest代理它,如您所见代码.它适用于大多数网站/链接,但对于一些人来说,这个错误出现了.您将在代码中看到一个关键位,它似乎将http标头设置从浏览器请求复制到它的请求到网站,并在标头属性中复制.不确定问题是否与它如何模仿请求的这个方面有关,然后结果会发生什么?

case "If-Modified-Since":
   request.IfModifiedSince = DateTime.Parse(listenerContext.Request.Headers[key]);
   break;
Run Code Online (Sandbox Code Playgroud)

我从例如http://en.wikipedia.org/wiki/Main_Page获得了该问题

PS.更新在这里

仍然无法解决这个问题.基本上我可以识别1个有问题的链接,它似乎工作正常,第二次得到错误,第3次OK,第4次得到错误,第5次OK等等好像有一些状态没有被清除或代码中有些东西.我尝试使用"使用"类型语句等来清理代码.

这是代码.如果有人能够发现为什么我每次第二次浏览http://newsimg.bbc.co.uk/css/screen/1_0_16/nol/v4/story.css这样的链接(从第2次开始,而不是第一次)通过这个代理代码,我得到了我想听到的错误.

class Program
{
    static void Main(string[] args)
    {
        Proxy p = new Proxy(8080);

        Thread proxythread = new Thread(new ThreadStart(p.Start));
        proxythread.Start();

        Console.WriteLine("Proxy Started. Press Any Key To Stop...");
        Console.ReadKey();

        p.Stop();
     }
}

public class Proxy
{
    private HttpListener _listener;
    private int _port;

    public Proxy(int port)
    {
        int defaultport = 8080;

        // Setup Thread Pool
        System.Threading.ThreadPool.SetMaxThreads(50, 1000); …
Run Code Online (Sandbox Code Playgroud)

http httpwebrequest if-modified-since http-status-code-304

42
推荐指数
3
解决办法
17万
查看次数

HttpWebRequest.GetResponse在HTTP 304上抛出WebException

当Web服务器HttpWebRequest.GetResponse()使用HTTP 304(未修改)进行响应时,GetResponse()发生了a WebException,这对我来说非常奇怪.这是设计还是我错过了一些明显的东西?

.net http httpwebrequest http-status-code-304

29
推荐指数
3
解决办法
1万
查看次数

jQuery AJAX在不应该生成304响应时

这真让我挠头.也就是因为它只发生在IE浏览器中,而不是Firefox中,而且我认为jQuery实际上是浏览器中立的.在过去的几个小时里,我一直在抨击这件事情,至少已经确定了发生的事情.

这个jqGrid:

$("#DocumentListByPartRecordsGrid").jqGrid(
          {
            datatype: 'local',            
            colNames: ['<b>Id</b>', '<b>Document Name</b>', '<b>Document Type</b>', '<b>Effective Date</b>', '<b>Expiration Date</b>', '<b>Delete</b>'],
            colModel: [
                  { name: 'ASSOCIATION_ID', Index: 'ASSOCIATION_ID', resizable: true, align: 'left', hidden: true, sortable: false },
                  { name: 'FILE_NAME', Index: 'FILE_NAME', resizable: true, align: 'left', sortable: false, width:'20%' },
                  { name: 'DOCUMENT_TYPE', Index: 'DOCUMENT_TYPE', resizable: true, align: 'left', sortable: false, width:'20%' },
                  { name: 'EFFECTIVE_DATE', Index: 'EFFECTIVE_DATE', resizable: true, align: 'left', sortable: false, width:'20%' },
                  { name: 'EXPIRATION_DATE', Index: 'EXPIRATION_DATE', resizable: true, align: …
Run Code Online (Sandbox Code Playgroud)

ajax jquery http-status-code-304

28
推荐指数
2
解决办法
3万
查看次数

304未修改为200(来自缓存)

我试图了解"状态304未修改"和"200(来自缓存)"之间究竟有什么区别 这是截图

我在最后更改的javascript文件上获得304.为什么会这样?谢谢你的帮助.

http http-status-code-304

25
推荐指数
2
解决办法
1万
查看次数

如何在WebKit中控制Google App Engine缓存行为(etags疯狂)?

情况:运行Google App Engine站点,我的静态内容的default_expiration设置为"14d"

问题:在Chrome和Safari中,访问URL(重新加载,只是将光标放在地址栏中并按Enter)会导致大量请求被If-None-Match标头触发.正如预期的那样,响应总是304 Not Modified.我可以看到这些请求在Charles或Fiddler等调试代理中被触发.

想要:完全避免这些请求和完全针对静态内容的304响应 - 只需信任浏览器缓存的内容即可.

我们使用标准的"缓存静态内容很长一段时间,当我们需要破坏缓存"系统时,我们将负责对我们的查询字符串进行附加?version = {version}修改,所以我们真的很想避免304的.

信念:我认为这是由app引擎随每个静态内容响应发送的etag标头引起的.在App Engine SDK并没有下来发送这个头,并与SDK乱搞的时候我没有看到这个304的行为.

有什么建议?你可以关闭app引擎静态内容的etags吗?

更新了静态内容的示例: http ://www.khanacademy.org/stylesheets/shared-package/compressed.css

google-app-engine caching webkit google-chrome http-status-code-304

23
推荐指数
2
解决办法
6262
查看次数

AFNetworking:如何知道响应是否正在使用缓存?304或200

我找不到任何问题的答案,可能是我错过了什么......

当我要求提供网址时,我需要知道响应是来自缓存还是来自网络.

状态代码是304还是200?(但AFNetworking总是回应200)

随着ASIHTTPRequest我用来检查" didUseCachedResponse"从ASIHTTPRequest,这是完美的.

iphone asihttprequest http-status-code-304 ios afnetworking

19
推荐指数
1
解决办法
1万
查看次数

ASP.NET MVC:如何返回304"未修改"状态?

ASP.NET MVC 3.0,IIS 7,.NET 4

我有一个动作,返回很少变化的数据(几乎是静态的).

有一个简单的方法:

  1. 从行动中返回304"未修改";
  2. 在响应中包含"Last-Modified"时间戳.

return Content('my data');用于行动结果.

基本上我想要一个简单的方法来完成本文中所讨论的内容:http://weblogs.asp.net/jeff/archive/2009/07/01/304-your-images-from-a-database.aspx

http-status-code-304 asp.net-mvc-3

18
推荐指数
2
解决办法
8554
查看次数