diff --git a/proxy/proxy.js b/proxy/proxy.js index bcc7f2f81dd02f65689c78f429e2c4f619ea1278..f60eee61c6a0a36560361159ee76888e98fb2e93 100644 --- a/proxy/proxy.js +++ b/proxy/proxy.js @@ -2,6 +2,7 @@ const http = require('http'); const PORT = 8080; +// filtering const filter = request=>{ if(request.url==='/good'){ return true; @@ -9,23 +10,42 @@ const filter = request=>{ return false; } +let cache = ``; + +let lastModified=null; const requestListener = (req,res)=>{ const options = { hostname:'localhost', port:3000, - path:'/' + path:'/', + headers: { + 'If-Modified-Since': `${JSON.stringify(lastModified)}` + } }; + if(filter(req)){ const get = http.get(options,response=>{ console.log(`statusCode: ${response.statusCode}`); - let buffer=""; - response.on('data',d=>{buffer+=d}); - response.on('error',err=>{console.log(`error:${err}`)}); - response.on('end',()=>{ + if(response.statusCode===304){ res.setHeader("Content-Type", "text/html"); res.writeHead(200); - res.end(buffer); - }); + res.end(cache); + } + else{ + let buffer=""; + // console.log(`Last modified: ${JSON.stringify(response.headers['last-modified'] )}`); + lastModified = new Date(JSON.parse(response.headers['last-modified'])); + console.log(`Last modified; ${lastModified}`); + response.on('data',d=>{buffer+=d}); + response.on('error',err=>{console.log(`error:${err}`)}); + response.on('end',()=>{ + cache=buffer; + res.setHeader("Content-Type", "text/html"); + res.writeHead(response.statusCode); + res.end(buffer); + }); + } + }); } else{ diff --git a/server/server.js b/server/server.js index 6f948a22ac2361150931070f0e07761445dc2896..9a3d0d806ba14fab67e09b4166d1716c7abe32a5 100644 --- a/server/server.js +++ b/server/server.js @@ -2,12 +2,20 @@ const http = require('http'); const fs = require('fs').promises; const PORT = 3000; +const lastModified=(new Date()).toJSON(); const requestListener = (req,res)=>{ - fs.readFile('./contents/index.html').then(contents=>{ + if(req.headers['if-modified-since'] && req.headers['if-modified-since']===JSON.stringify(lastModified)){ + res.setHeader("Last-Modified",`${JSON.stringify(lastModified)}`); + res.writeHead(304); + res.end("Not applicable"); + } + + else{fs.readFile('./contents/index.html').then(contents=>{ res.setHeader("Content-Type", "text/html"); + res.setHeader("Last-Modified",`${JSON.stringify(lastModified)}`); res.writeHead(200); res.end(contents); - }); + });} console.log(req.headers); }