Question presented to candidate: "When a user clicks a link in an App Router app, the network tab shows a request returning something that is not HTML and not JSON. What is that response, what is inside it, and how does the first page load get the same data?"
What a strong answer should cover:
- The RSC payload is React's serialized output of the Server Component tree: rendered elements, references to Client Component modules, and the props passed to them.
- It is a line-based stream of rows (
id:value) that can reference rows not yet sent, which is how Suspense content arrives later in the same response. - On the first load it is inlined into the HTML as
self.__next_f.push(...)scripts next to the streamed HTML; on client navigation it is fetched alone with theRSC: 1header andtext/x-componentcontent type. - The
_rscquery parameter and theVaryheader keep caches from mixing HTML and RSC variants; Next.js 16 redirects requests with a wrong_rschash. - Consequences: everything passed to Client Components is visible in the payload, data is shipped twice on first load (HTML plus payload), and buffering proxies break streaming.
Clarifying questions expected:
- "Is this about the first page load or client-side navigation?" β the transport is different.
- "Is there a CDN or proxy in front?" β header forwarding and buffering decide whether it works.
Code / implementation expected: Optional β capturing the payload with curl -H 'RSC: 1' and reading a few rows.