The server compares the validator with the current resource tag.

highlighted = computed this step

The validator matches the current tag

The decision rows compare the request validator with the current resource tag.

validator equals current tag\text{validator equals current tag}
Compare the tagThe cache validation decision and response rows are recomputed from pinned data.Compare the tag - /logo.png validator "v7" -> 304 Not Modified, body 0 bytessectionnamevaluecheckrequest linemethodGETparsedrequest linepath/logo.pngparsedrequest lineversionHTTP/1.1parsedheaderHoststatic.exampleexactheaderIf-None-Match"v7"validatorresourcepath/logo.pngpinnedresourcecurrent ETag"v7"pinnedresourcebody bytes1280would send if changeddecisionvalidator"v7"from requestdecisioncurrent ETag"v7"from resourcedecisionmatchyessame tagdecisionresponse304 Not Modifiedskip bodydecisionsent body bytes0not sentstatusversionHTTP/1.1parsedstatusstatus304 Not Modifiednot modifiedheaderETag"v7"current tagheaderCache-Controlmax-age=60pinnedbodysent body bytes0skipped

The match row says yes

Because the tags match, the server can say the cached copy is still current.

match=yes\text{match}=\text{yes}
Compare the tagThe cache validation decision and response rows are recomputed from pinned data.Compare the tag - /logo.png validator "v7" -> 304 Not Modified, body 0 bytessectionnamevaluecheckrequest linemethodGETparsedrequest linepath/logo.pngparsedrequest lineversionHTTP/1.1parsedheaderHoststatic.exampleexactheaderIf-None-Match"v7"validatorresourcepath/logo.pngpinnedresourcecurrent ETag"v7"pinnedresourcebody bytes1280would send if changeddecisionvalidator"v7"from requestdecisioncurrent ETag"v7"from resourcedecisionmatchyessame tagdecisionresponse304 Not Modifiedskip bodydecisionsent body bytes0not sentstatusversionHTTP/1.1parsedstatusstatus304 Not Modifiednot modifiedheaderETag"v7"current tagheaderCache-Controlmax-age=60pinnedbodysent body bytes0skipped

The body length changes to zero sent bytes

The resource body length is 1280, but sent body length is 0.

1280→01280\to0
Compare the tagThe cache validation decision and response rows are recomputed from pinned data.Compare the tag - /logo.png validator "v7" -> 304 Not Modified, body 0 bytessectionnamevaluecheckrequest linemethodGETparsedrequest linepath/logo.pngparsedrequest lineversionHTTP/1.1parsedheaderHoststatic.exampleexactheaderIf-None-Match"v7"validatorresourcepath/logo.pngpinnedresourcecurrent ETag"v7"pinnedresourcebody bytes1280would send if changeddecisionvalidator"v7"from requestdecisioncurrent ETag"v7"from resourcedecisionmatchyessame tagdecisionresponse304 Not Modifiedskip bodydecisionsent body bytes0not sentstatusversionHTTP/1.1parsedstatusstatus304 Not Modifiednot modifiedheaderETag"v7"current tagheaderCache-Controlmax-age=60pinnedbodysent body bytes0skipped

Summary

A matching validator lets the server skip the body.

body skipped\text{body skipped}
Compare the tagThe cache validation decision and response rows are recomputed from pinned data.Compare the tag - /logo.png validator "v7" -> 304 Not Modified, body 0 bytessectionnamevaluecheckrequest linemethodGETparsedrequest linepath/logo.pngparsedrequest lineversionHTTP/1.1parsedheaderHoststatic.exampleexactheaderIf-None-Match"v7"validatorresourcepath/logo.pngpinnedresourcecurrent ETag"v7"pinnedresourcebody bytes1280would send if changeddecisionvalidator"v7"from requestdecisioncurrent ETag"v7"from resourcedecisionmatchyessame tagdecisionresponse304 Not Modifiedskip bodydecisionsent body bytes0not sentstatusversionHTTP/1.1parsedstatusstatus304 Not Modifiednot modifiedheaderETag"v7"current tagheaderCache-Controlmax-age=60pinnedbodysent body bytes0skipped