note right of User: URI fragment of a buffered, but changed resource User->UserAgent: http://www.example.com/video.ogv#t=10,20 activate UserAgent note right of UserAgent Local copy of fragment already in buffer But the resource could have changed on the server, so it needs to send a conditional GET end note UserAgent->Proxy: GET /video.ogv HTTP/1.1 \nIf-Modified-Since: Sat, 01 Aug 2009 09:34:22 GMT \nRange: bytes=19147-22890 activate Proxy Proxy->OriginServer: GET /video.ogv HTTP/1.1 \nIf-Modified-Since: Sat, 01 Aug 2009 09:34:22 GMT \nRange: bytes=19147-22890 activate OriginServer note right of OriginServer: Check if the resource has changed, \nthe resource was modified OriginServer->Proxy: HTTP/1.1 412 Precondition Failed \nContent-Range: bytes 19147-22890/22222222 deactivate OriginServer Proxy->UserAgent: HTTP/1.1 412 Precondition Failed \nContent-Range: bytes 19147-22890/22222222 deactivate Proxy note right of UserAgent Re-retrieve what it needs to being able to retrieve fragments. This may mean retrieving the header of the file. end note UserAgent->Proxy: HEAD /video.ogv HTTP/1.1 \nRange: bytes=19147-22890 activate Proxy Proxy->OriginServer: HEAD /video.ogv HTTP/1.1 \nRange: bytes=19147-22890 activate OriginServer note right of OriginServer: Only serve header of response \nwhen extracting bytes corresponding to range OriginServer->Proxy: HTTP/1.1 206 Partial Content \nContent-Range: bytes 19147-22890/22222222 deactivate OriginServer Proxy->UserAgent: HTTP/1.1 206 Partial Content \nContent-Range: bytes 19147-22890/22222222 deactivate Proxy note right of UserAgent After this it is possible again to do a real byte range retrieval again. end note