How BranchCache works with HTTP traffic? And how things really work when you cache HTTP (HTTPS) traffic ? This is what we will be discussing here. Let me tell you a story.
The picture shows the networking stack on the client and on the server side. So in the client we have IE, which makes use of wininet which is one of the client http stacks that ships with windows and below that we have the BranchCache service.
The client opens IE, you know Bob, going to view that company newsletter and he is going to open a URL.IE makes use of wininet component which is BranchCache capable, and here we make our http get which is transmitted across the wire, hits the web server and interrupted by http.sys which is BranchCache capable (Step 1 and 2).
What we are doing here is making a normal HTTP request, only marking it as BranchCache capable. So the web server says (hey this client knows BranchCache so I am going to send him some hashes rather than the full data). http.sys gets the data from IIS (Step 3 and 4), uses those Peer distribution APIs and sends the data to the BranchCache service (Step 5) where it cuts them into chunks (Step 6) and calculates hashes for those chunks. After that, those hashes are sent to http.sys (Step 7) which replies to the client with BranchCache response that contains something called (content information structure) which is a list of all hashes describing those chunks of the data (Step 8).
So on the client side, wininet gets that, and remember it is BranchCache capable, so it uses those Peer Distribution APIs and goes down to the BranchCache Service (Step 9).
BranchCache service looks for that data on a peer computer or a Hosted Cache server depending on how the client is configured (Step 10). Once we get the data, we verify it across the list of hashes we get from the web server and we pass it up to wininet and back to IE (Step 1 and 12).
This is part of the story. If you are interested to know more about this nice technology, come here again and filter posts with (BranchCache) tag.