Ho un requisito insolito. Essenzialmente ho bisogno di un modo in cui, quando l'utente fa clic su un link o un pulsante, riceveranno un PDF. La parte difficile è che il server non elaborerà la richiesta su tutti a meno che non venga inviata un'intestazione personalizzata (in caso contrario riterrà la persona che ha effettuato il logout e li invierà alla schermata di accesso).Richiedere un file con un'intestazione personalizzata
Al momento il modo in cui funziona l'intestazione non può essere modificato quindi per favore non soffermarsi su di esso; verrà modificato in futuro ed è un'applicazione interna di cui non ho alcun controllo.
Le opzioni che ho esplorato:
- L'utilizzo di un iframe o semplicemente aprendo una nuova finestra con una sorta di percorso che restituirà il PDF. Questo non può funzionare perché non posso specificare l'intestazione richiesta per il PDF e verrei reindirizzato prima di raggiungere il PDF stesso.
- L'utilizzo di un modulo e l'invio della richiesta non possono funzionare perché non è possibile aggiungere intestazioni personalizzate ai moduli (solo XHR e plug-in, AFAIK).
- L'utilizzo di XHR non può funzionare perché, mentre è possibile aggiungere l'intestazione e recuperare il file, non è possibile salvarlo sul lato client.
Sembrerebbe mie uniche opzioni a questo punto sono essenzialmente:
- utilizzare una sorta di plug-in come Flash o Silverlight per richiedere il file.
- Forza la modifica del requisito molto prima del previsto in modo che non sia più necessaria un'intestazione.
C'è qualcosa che mi manca qui? Spero che qualcuno possa verificare le mie scoperte o indicarmi qualcosa che ho perso perché, per quanto posso dire, non c'è davvero nulla che io possa fare qui.
EDIT: Questo sembra apt e conferma quello che stavo pensando: XMLHttpRequest to open PDF in browser
Che ne dici di aggiungere una specie di tunnel tra l'app e il tuo script? Il tunnel potrebbe interrogare l'app e ricevere il file, quindi impostare un'intestazione corretta prima di scaricare il file all'utente, quindi attivare effettivamente un download. Non so se questo è possibile per il tuo sistema, a seconda della sicurezza. –
Un tunnel non è una cattiva idea, anche se non sono sicuro che potremmo implementarlo qui. Hmm. Grazie, ci penserò. – Kris
Se è possibile fare a meno del supporto per IE <10 (non molto probabile, giusto?), È possibile utilizzare XMLHttpRequest Level 2 (XHR2) e Blob URL. Ecco un esempio: http://stackoverflow.com/q/9620497 Vedi anche http://stackoverflow.com/q/6165266 e http://www.html5rocks.com/en/tutorials/file/xhr2/ –