Currently, the requestRedirected delegate method will be called right after the header is parsed. However, the data received delegate method which comes together with the redirected header will be called after the requestRedirected callback.
The sequence is like this:
I think in this sequence, step 4 may cause bugs. The delegate is most likely accumulating the received data for writing to file, live parsing, etc. Apparently, we should not append the data received from step 4 to step 8. The most straight forward thought is to "reset" the data status after the request being redirected but that actually happens before step 4.
I propose to move the step 2 between step 4 and 5.
Call requestRedirected after the request is actually redirected, not …
There is actually a check in handleBytesReceived that returns before calling the dataReceived delegate if there is a redirect happening. This redirect flag is set at step 1 during response header reading and reset after step 4. Hence, it should be fine in this case.