File tree Expand file tree Collapse file tree 2 files changed +20
-4
lines changed
lib/internal/Magento/Framework/App Expand file tree Collapse file tree 2 files changed +20
-4
lines changed Original file line number Diff line number Diff line change @@ -137,9 +137,7 @@ public function process(\Magento\Framework\App\Response\Http $response)
137137 if (preg_match ('/public.*s-maxage=(\d+)/ ' , $ response ->getHeader ('Cache-Control ' )->getFieldValue (), $ matches )) {
138138 $ maxAge = $ matches [1 ];
139139 $ response ->setNoCacheHeaders ();
140- if (($ response ->getHttpResponseCode () == 200 || $ response ->getHttpResponseCode () == 404 )
141- && ($ this ->request ->isGet () || $ this ->request ->isHead ())
142- ) {
140+ if ($ this ->shouldCacheResponse ($ response )) {
143141 $ tagsHeader = $ response ->getHeader ('X-Magento-Tags ' );
144142 $ tags = $ tagsHeader ? explode (', ' , $ tagsHeader ->getFieldValue ()) : [];
145143
@@ -218,4 +216,22 @@ private function getCache()
218216 }
219217 return $ this ->fullPageCache ;
220218 }
219+
220+ /**
221+ * Check if the response should be cached. For GET requests both 200 and 404 responses should be
222+ * cached. For HEAD requests only 200 responses should be cached.
223+ *
224+ * @param \Magento\Framework\App\Response\Http $response
225+ * @return bool
226+ */
227+ private function shouldCacheResponse (\Magento \Framework \App \Response \Http $ response )
228+ {
229+ $ responseCode = $ response ->getHttpResponseCode ();
230+ if ($ this ->request ->isGet ()) {
231+ return $ responseCode == 200 || $ responseCode == 404 ;
232+ } elseif ($ this ->request ->isHead ()) {
233+ return $ responseCode == 200 ;
234+ }
235+ return false ;
236+ }
221237}
Original file line number Diff line number Diff line change @@ -248,7 +248,7 @@ public function testProcessSaveCacheDataProvider()
248248 {
249249 return [
250250 [200 , [3 , 4 , 5 ]],
251- [404 , [4 , 5 , 6 ]]
251+ [404 , [3 , 4 , 5 ]]
252252 ];
253253 }
254254
You can’t perform that action at this time.
0 commit comments