7

मैं एक वेब पेज है कि निम्नलिखित हैडर लौटाता है जब मैं सामग्री का उपयोग किया है में "कैश-नियंत्रण" मूल्यों ओवरराइड:HTTP उत्तर

HTTP/1.1 200 OK 
Date: Sat, 29 Jun 2013 15:57:25 GMT 
Server: Apache 
Content-Length: 2247515 
Cache-Control: no-cache, no-store, must-revalidate, max-age=-1 
Pragma: no-cache, no-store 
Expires: -1 
Connection: close 

एक क्रोम एक्सटेंशन का उपयोग करना, मैं इतना है कि इस response header संशोधित करना चाहते हैं सामग्री वास्तव में बैंडविड्थ बर्बाद करने के बजाय कैश किया जाता है।

मैं निम्न नमूना कोड है:

chrome.webRequest.onHeadersReceived.addListener(function(details) 
    { 
     // Delete the required elements 
     removeHeader(details.responseHeaders, 'pragma'); 
     removeHeader(details.responseHeaders, 'expires'); 

     // Modify cache-control 
     updateHeader(details.responseHeaders, 'cache-control', 'max-age=3600;') 

     console.log(details.url); 
     console.log(details.responseHeaders); 

     return{responseHeaders: details.responseHeaders}; 
    }, 
    {urls: ["<all_urls>"]}, ['blocking', 'responseHeaders'] 
); 

कौन सा सही ढंग से कुछ इस तरह (console.log() उत्पादन के आधार पर) के लिए शीर्ष लेख को संशोधित करता है:

HTTP/1.1 200 OK 
Date: Sat, 29 Jun 2013 15:57:25 GMT 
Server: Apache 
Content-Length: 2247515 
Cache-Control: max-age=3600 
Connection: close 

लेकिन सब कुछ के आधार पर मैंने इसे जांचने की कोशिश की है, मुझे यह सबूत नहीं दिख रहा है कि यह वास्तव में हुआ है:

  1. cache में इस फ़ाइल के लिए कोई प्रविष्टि नहीं है
  2. NetworkDeveloper Console में टैब HTTP प्रतिक्रिया के लिए कोई बदलाव नहीं दिखाता है (मैंने इसे सुनिश्चित करने के लिए केवल मामूली संशोधन में बदलने की कोशिश की है कि यह कोई त्रुटि नहीं है, लेकिन अभी भी कोई बदलाव नहीं)।

केवल वास्तविक संकेत मैं पा सकते हैं जिससे पता चलता है कि मेरे दृष्टिकोण अभी भी काम करता है और webRequest API documentation पर इस पैरा जो लेकिन पता चलता है कि इस काम नहीं करेगा (व्याख्या नहीं करता है कारण है कि मैं किसी भी परिवर्तन नहीं कर सकते हैं जो भी हो):

ध्यान दें कि वेब अनुरोध एपीआई नेटवर्क विस्तार के लिए स्टैक का एक अमूर्त प्रस्तुत करता है। आंतरिक रूप से, एक यूआरएल अनुरोध में कई HTTP अनुरोधों में विभाजित किया जा सकता है (उदाहरण के लिए व्यक्तिगत बाइट श्रेणियों को को बड़ी फ़ाइल से लाने के लिए) या नेटवर्क के साथ संचारित के बिना नेटवर्क स्टैक द्वारा संभाला जा सकता है। इस कारण से, एपीआई नेटवर्क पर भेजे गए अंतिम HTTP शीर्षलेख प्रदान नहीं करता है। उदाहरण के लिए, कैशिंग से संबंधित सभी शीर्षलेख एक्सटेंशन के लिए अदृश्य हैं।

कुछ भी काम नहीं कर रहा है (मैं HTTP response header को बिल्कुल संशोधित नहीं कर सकता) इसलिए मुझे लगता है कि यह मेरी पहली चिंता है।

कोई सुझाव जहां मैं गलत हो रहा था या यहां क्या गलत हो रहा है यह जानने के लिए कैसे जाना है?

यदि यह संभव नहीं है, तो क्या हासिल करने का प्रयास करने के लिए कोई और तरीका है?

उत्तर

5

मैं हाल ही में एक फ़ाइल कैश्ड प्राप्त करने की कोशिश के बारे में कुछ घंटे बिताए, और पाया कि chrome.webRequest और chrome.declarativeWebRequest एपीआई कैश्ड को बल संसाधनों नहीं किया जा सकता है है। किसी तरह भी नहीं।

Cache-Control (और अन्य) प्रतिक्रिया शीर्षलेख बदला जा सकता है, लेकिन यह केवल getResponseHeader विधि में दिखाई देगा। कैशिंग व्यवहार में नहीं।

+0

दुर्भाग्य से मैं क्या उम्मीद कर रहा था ... क्या आप इन फ़ाइलों को कैश करने के लिए मजबूर करने के किसी भी अन्य तरीके से जानते हैं?मुझे प्रॉक्सी सर्वर जैसे 'स्क्विड' मिल गए हैं, लेकिन वे मेरे सिस्टम पर नेटवर्क के साथ बहुत सी चीजों की तरह लग रहे हैं, बस एक विशिष्ट साइट –

+0

@ बीटी से फ़ाइलों को कैश करने के लिए अपनी पसंदीदा प्रॉक्सी चुनें जो सही हेडर जोड़ता है, और [क्रोम .proxy'] (https://developer.chrome.com/extensions/proxy.html) एपीआई आपके प्रॉक्सी के माध्यम से उस विशिष्ट साइट को रूट करने के लिए। –

+0

वास्तविक शर्म की बात है कि आप एक्सटेंशन से कैशिंग को संशोधित नहीं कर सकते हैं। अगर आप कर सकते हैं तो यह बहुत उपयोगी होगा। –

संबंधित मुद्दे