2015-12-14 13 views
7

Używam zdarzeń wysłanych z serwera HTML5. Po stronie serwera jest serwlet Java. Mam dane tablicy json chce przekazać do serwera.Zdarzenia wysłane przez serwer przekazują parametr za pomocą metody poczty

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

Jeśli rozmiar tablicy jest małe, po stronie serwera można uzyskać ciągu kwerendy. Ale jeśli rozmiar tablicy jest duży. (może ponad tysiące znaków), serwer nie może uzyskać kwerendy. Czy można użyć metody POST w new EventSource(...) do przekazania tablicy json na serwer, aby uniknąć ograniczenia długości zapytania?

Odpowiedz

16

Nie, standard SSE nie pozwala na POST.

(Bez żadnego technicznego powodu, o ile mogłem powiedzieć - myślę, że po prostu projektanci nigdy nie widzieli przypadków użycia: to nie tylko duże dane, ale jeśli chcesz zrobić niestandardowe schemat uwierzytelniania istnieją powody, dla których nie należy umieszczać hasła w danych GET).

XMLHttpRequest (tj. AJAX) dopuszcza POST, więc jedną z opcji jest powrót do starszych metod długich sond/komet. (Moja książka, Data Push Apps with HTML5 SSE idzie do jakiegoś szczegółu o tym, jak to zrobić).

Innym podejściem jest POST wszystkich danych z wyprzedzeniem i przechowywać go w HttpSession, a następnie wywołać proces SSE, które mogą skorzystać danych sesji. (SSE obsługuje pliki cookie, więc plik cookie JSESSIONID powinien działać poprawnie.)

P.S. Numer standard nie oznacza, że ​​POST nie może być użyty. Ale w przeciwieństwie do XMLHttpRequest, nie ma parametru określającego metodę http do użycia i nie ma możliwości określenia danych, które chcesz opublikować.

+0

Tks za odpowiedź. –

+3

"Sądzę, że projektanci nigdy nie widzieli przypadków użycia" innego, jeśli chcesz przesłać plik i uzyskać postęp przetwarzania po stronie serwera końcowego. – Yaroslav

+0

90% moich przypadków użycia dla SSE to POST. Tworzenie jakiegoś zasobu na serwerze, który wymaga czasu. –