Zum Verständnis: Normalerweise werden die header geparsed. D.h.: Vom script her steht z.B.
header( Connection => 'Upgrade' );
was der Webserver bekommt. Der Webserver parst ALLE vom Script gesendeten header und je nach Konfiguration werden die ggf. vom Webserver ergänzt. Beispielweise ergibst sich dann für einen Response-Header "Connection":
Connection: Upgrade, Keep-Alive
NPH nun, ist eine Technik, womit das Parsen unterdrückt wird. Ein NPH-Script ist voll verantwortlich dafür, dass ALLE erforderlichen Response-Header rausgehen und letztendlich gehen auch nur diejeniger header raus, welche in einem NPH Script notiert sind. Wenn da steht
header( Connection => 'Upgrade' );
sendet der Webserver auch nichts anderes als
Connection: Upgrade
Er ist sozusagen transparent und auf diese Art und Weise kannst Du die Herstellung einer Websocket Verbindung emulieren.