相关疑难解决方法(0)

为什么我在使用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万
查看次数

为什么 $http.get 返回 304 错误

我是 Angular 的新手,在使用一直有效的服务时遇到了麻烦,直到它不起作用。我的服务有以下调用。

this.getForms = function() {
    return $http.get("/forms").
    then(function(response) {
        return response;
    }, function(response) {
        alert("Error finding forms.");
    });
};
Run Code Online (Sandbox Code Playgroud)

当刷新页面(safari)时,触发 getForms,调用 $http.get,我的 Node.js/Express 服务器表单端点正确返回表单数据。

app.get("/forms", function (req, res) {
    Form.find({}, function (err, docs) {
        if (err) {
            server.handleError(res, err.message, "Failed to get forms.");
        } else {
            res.status(200).json(docs);
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

但我得到的不是 JSON,而是 304 错误,这表明数据在缓存中可用。但 304 响应标头有一个空数据字符串,因此它不会从缓存返回任何数据。

我的问题是

1)如果数据在缓存中可用,为什么它会调用我的服务器?

2)我如何告诉它不缓存此调用,以便页面可以正确更新表单?

javascript safari caching node.js angularjs

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