The next difficulty to solve a block is determined from how fast blocks were solved before it. In addition, the difficulty only changes once every two weeks or so.
So, couldn't every node keep track of the expected difficulty and not need to have it in each block header? Or is there a reason nodes need to be communicating the current difficulty in each block? Not that it would be a major savings, or anything, it just seems strange that this is included when it's just a function of all the other pieces of a chain.
Maybe it's because calculating nBits would take a long time eventually if you had to go through all the block headers every time you wanted to calculate the next difficulty?
so there's technically not much need to store past headers
What about unconfirmed transactions? You need to look into past blocks to confirm that their inputs are valid. – Nick ODell Dec 23 '14 at 22:16nBits
value in headers isn't actually useful anymore (it's always known before a header or block is received already). – Pieter Wuille Nov 08 '18 at 09:09