标签: http-status-code-304

304:不满足使用HTTP条件头指定的条件

我目前正在Azure Blob存储中存储文件,当我请求文件时,我在304的firebug中收到消息"使用HTTP条件头指定的条件不符合"

我看过Azure Blob:"使用HTTP条件头指定的条件不符合",这是一个类似的问题,但我不是在阅读使用blob.openread等的内容...我只是在尝试在浏览器中查看内容.

如果我在firefox中进行控制刷新(ctrl和f5),我得到200的响应 - 所以它正确地提供了.我已经在我正在返回的文件上设置了缓存控制(max-age = 3600,public),但我仍然收到此错误/通知.

我的问题是,当我要求内容回复此回复时,我是否应该担心?

您将获得任何建议/想法

谢谢Steve

blob azure http-status-code-304

8
推荐指数
1
解决办法
5579
查看次数

Jquery.get()在IE8/9中不起作用.不会加载未修改的缓存页面304

Code Igniter版本'2.0.3'Jquery 1.7 Jquery History插件

嗨,大家好,

我有一个CodeIgniter应用程序,我以ajax方式构建.我有如下功能:

$(document).on('click','.ajax_link',function(e){
    //Stop the normal href action
    e.preventDefault();

    //Grab the destination URL
    var new_url = $(this).attr('href')

    //Grab the content via ajax and pass it to the history change function
    $.get(base_url+new_url,function(data){
        History.pushState({
            content:data.content,
            url:data.url
        }, data.title, data.url);
        //Refresh some site variables
        refresh();
    },'json');
});
Run Code Online (Sandbox Code Playgroud)

它只是通过一个ajax_link类捕获对锚元素的点击,并将响应发送到一个处理该响应数据放入页面的函数.

这适用于Chrome和FF.我点击链接,jQuery发出get请求,我得到一个JSON对象,我的history.pushState()函数将一些json数据注入我的页面.

我遇到的问题是在IE8中.基本上发生的事情是当我第一次打开应用程序时,链接可以工作,但它们只能工作一次.我第二次点击链接:

  • 是ajax GET
  • 收到304(未修改)的回复
  • 不调用jQuery.get()回调函数,因此停止死机.

如果我清除缓存它再次工作.所以我的假设是IE正在执行get请求,但后来它发现它已经在过去请求了完全相同的文件...因此完全停止了该过程.

有人知道解决这个问题吗?我已经看过在IE中提到304错误和ajax和缓存的错误但是还没有找到与我相同的问题.

任何帮助非常感谢

(在Windows虚拟机IE8和Internet Explorer 9中的IE 8模式上测试)

解决了

只需要将以下代码添加到我的document.ready函数中,问题就消失了.

$.ajaxSetup ({cache: false});
Run Code Online (Sandbox Code Playgroud)

ajax jquery caching internet-explorer-8 http-status-code-304

7
推荐指数
1
解决办法
5064
查看次数

为什么304状态代码算作"重定向?"

我目前正在尝试了解304/Not修改的确切条件是否符合3xx范围的HTTP状态代码类.RFC 1945,秒.9.3RFC 2616,sec.10.3都阅读:

此类状态代码指示用户代理需要采取进一步操作才能完成请求.

虽然"从客户端的本地缓存加载"显然是"进一步的行动",但我很难看到这是HTTP的意义上的重定向.我在字面上读这个吗?

http http-status-codes http-redirect http-status-code-304

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

如何在Django中集成304?

当用户请求相同的页面时,使用相同的数据......我希望Django返回304,这样浏览器就不必重新加载页面了.

我是新手.如何才能做到这一点?

谢谢.

python django header http-status-code-304

6
推荐指数
2
解决办法
3065
查看次数

返回304 Not Modified with ServiceStack时防止不需要的标头

使用ServiceStack,我只想返回304 Not Modified:

HTTP/1.1 304 Not Modified
Run Code Online (Sandbox Code Playgroud)

但ServiceStack添加了许多其他不需要的(返回带有304代码的HttpResult)标头:

HTTP/1.1 304 Not Modified
Content-Length: 0
Content-Type: application/json
Server: Microsoft-HTTPAPI/2.0
X-Powered-By: ServiceStack/3.94 Win32NT/.NET
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Headers: Content-Type
Date: Tue, 07 Aug 2012 13:39:19 GMT
Run Code Online (Sandbox Code Playgroud)

如何防止输出其他标题?我已经尝试了HttpResult的各种方法,注册了一个虚拟内容类型过滤器,但是它的名字仅暗示控件内容,而不是标题或此处列出的其他内容.我也尝试使用IStreamWriter和IHasOptions实现我自己的IHttpResult派生,结果相同:ServiceStack添加了不需要的标头.

谢谢

更新

能够去除content-type通过使用以下,但有些头依然存在,即content-length,serverdate.

    public override object OnGet(FaultTypes request)
    {
      var result = new HttpResult
      {
       StatusCode = HttpStatusCode.NotModified,
       StatusDescription = "Not Modified", // Otherwise NotModified written!
      }; …
Run Code Online (Sandbox Code Playgroud)

http-status-code-304 servicestack

6
推荐指数
1
解决办法
2350
查看次数

ETag是否以304响应返回?

我正在构建一个node.js应用程序 - 每天一次 - 从一些外部Web服务器(使用" 请求 "包)获取数据.

我想避免两次获取相同的数据,所以我在第一次下载(200状态代码)时跟踪每个资源ETag .

然后,当再次(第二天)获取该资源时,我If-None-Match在请求中添加了带有已保存的etag 的标头.

因为我怀疑有时候从远程Web服务器接收200状态代码(而不是预期304),即使资源内容没有被修改,我问我是否应该期望ETag304响应中返回资源(以及如何在request响应...),尝试调试此问题.

http http-status-codes http-status-code-304

6
推荐指数
1
解决办法
1508
查看次数

在 service worker / fetch() 中识别 HTTP 304

我构建了一个服务工作者,它总是用来自缓存的数据进行响应,然后在后台向服务器发送请求。如果服务器响应HTTP 304 - not modified一切正常,如果服务器响应HTTP 200,则意味着数据已更改并将新文件放入缓存中,同时通知用户并要求刷新页面。

我使用not-modified-since/last-modified标头来确保客户端获得最新版本。当通过请求发送fetch()请求时,它会在其通往网络的路上传递 HTTP 缓存 - 响应到达客户端时也会传递 HTTP 缓存。问题是当响应具有状态时304- 未修改 HTTP 缓存使用缓存版本响应服务工作者并将状态替换为200(如获取规范中所述 - HTTP-network-or-cache-fetch)。在 Service Worker 中,无法确定200响应最初是由服务器发送的(用户需要更新)还是由缓存发送并且服务器最初响应为304 (已经加载了最新版本)。

有可以设置为的缓存模式标志no-cache,但是当请求发送到服务器时,这也会绕过 HTTP 缓存,这意味着if-modified-since未设置标头并且服务器没有机会找出哪个版本客户有。此外,此标志目前仅由 Firefox 每晚支持。

我认为最好的解决方案是设置一个自定义的 HTTP 标头,就像x-was-modified服务器以200. 可以在 service worker 中访问此自定义标头,并可用于确定资源是否已更新 - 即使 HTTP 缓存将304状态替换为200.

  • 这是一个合法的解决方案/解决方法吗?是否有任何建议的方法来解决这个问题?
  • 在实现 Service Worker 缓存时,我是否应该依赖处理 HTTP 缓存的 HTTP 标头?或者我应该使用自定义x-if-modified-since …

caching http http-caching http-status-code-304 service-worker

6
推荐指数
1
解决办法
4460
查看次数

Rails 如何知道何时响应 304 状态?

鉴于我有 Rails 控制器,它访问数据库以检索数据并使用序列化程序呈现 JSON 响应,必须满足什么条件才能使 rails 以 304 响应?

如果它必须将先前的响应与当前检索到的响应进行比较,它是哪种比较?

ruby-on-rails http-headers http-status-code-304

6
推荐指数
2
解决办法
2805
查看次数

浏览器是否应该自动处理304响应?

可能是一个愚蠢的问题,但我还没有找到任何明确的答案.

我的服务器处理ETag缓存以获得我们所拥有的一些非常大的JSON响应,304 NOT MODIFIED如果If-None-Match标头包含与新生成的相同的散列(浅ETag),则返回空主体.

浏览器是否应该自动处理,或者异步使用API​​的浏览器内客户端应用需要实现一些逻辑来处理这样的响应(即如果304响应则使用缓存版本,否则创建/更新缓存版本)?

因为到目前为止,我已经手动实现了这个逻辑客户端,但我想知道我是否只是重新设计了方形轮...


换句话说,Cache-Control例如,使用标题,浏览器内的客户端应用程序不需要解析值,max-age例如检查,以某种方式存储它,设置超时等等:所有内容都由浏览器直接处理.问题是:浏览器在收到浏览器时应该采用相同的方式304吗?


以下是我到目前为止编写客户端的方法(使用AngularJS构建,在浏览器中运行):

myModule

  .factory("MyRepository", ($http) => {

    return {
      fetch: (etag) => {
        return $http.get(
          "/api/endpoint",
          etag ? { headers: { "If-None-Match": etag } } : undefined
        );
      }
    };

  })

  .factory("MyService", (MyRepository, $q) => {

    let latestEtag = null;
    let latestVersion = null;

    return {
      fetch: () => {
        return MyRepository
          .fetch(latestEtag)
          .then((response) => {
            latestEtag = response.headers("ETag");
            latestVersion = response.data; …
Run Code Online (Sandbox Code Playgroud)

browser etag caching http http-status-code-304

6
推荐指数
1
解决办法
1253
查看次数

缓存控制未返回 304

我有一个网站,其中包含不会更改的静态资产(js、图像等)。这些资源中的每一个都具有带有以下属性的缓存控制标头集:

cache-control: public, max-age=31536000, immutable
Run Code Online (Sandbox Code Playgroud)

但是,当我重新加载页面时,我仍然看到来自服务器的 200 响应,而不是 304 响应。浏览器指示正在从内存或磁盘缓存提供资源,但它仍在发出请求并下载内容。这以前是有效的,我倾向于这是一个浏览器错误,但我不完全确定。

http cache-control http-status-code-304 http-status-code-200

6
推荐指数
1
解决办法
2408
查看次数