2015-12-14 18 views
7

Sto utilizzando eventi inviati dal server Html5. Il lato server è Java Servlet. Ho un array json che vuole passare al server.Gli eventi inviati dal server passano i parametri per mezzo del metodo

var source = new EventSource("../GetPointVal?id=100&jsondata=" + JSON.stringify(data)); 

Se la dimensione dell'array è piccola, il lato server può ottenere la querystring. Ma se la dimensione dell'array è grande. (forse più di migliaia di caratteri), il server non può ottenere la querystring. È possibile utilizzare il metodo POST in new EventSource(...) per passare l'array json al server in modo da evitare la limitazione della lunghezza della stringa di querystring?

risposta

16

No, lo standard SSE non consente il POST.

(Per nessun motivo tecnico, per quanto ho potuto dire - penso che fosse solo che i progettisti non hanno mai visto i casi d'uso: non sono solo grandi dati, ma se si vuole fare un costume schema di autenticazione ci sono motivi di sicurezza per non inserire la password nei dati GET.)

XMLHttpRequest (ad esempio AJAX) non consente il POST, quindi un'opzione è di tornare ai vecchi metodi long-poll/comet. (Il mio libro, Data Push Apps with HTML5 SSE va in un po 'di dettagli su come fare questo.)

Un altro approccio è quello di POST tutti i dati in anticipo, e conservarlo in un HttpSession, e quindi chiamare il processo di SSE, che può fare uso di quei dati di sessione. (SSE supporta i cookie, quindi il cookie JSESSIONID dovrebbe funzionare correttamente.)

P.S. Il standard non dice esplicitamente che il POST non può essere utilizzato. Tuttavia, a differenza di XMLHttpRequest, non esiste alcun parametro per specificare il metodo http da utilizzare e nessun modo per specificare i dati che si desidera pubblicare.

+0

Tks per la risposta. –

+3

"Penso che sia stato solo che i designer non hanno mai visto i casi d'uso" un altro se si desidera caricare il file e ottenere progressi di completamento dell'elaborazione lato server. – Yaroslav

+0

Il 90% dei miei casi d'uso per SSE è POST. Creare una sorta di risorsa sul server che richiede tempo per essere elaborata. –

Problemi correlati