Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Działanie HTTP POST i jego wpływ na aplikacje, programowanie rozproszone
Niktoś
post
Post #1





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


Witam , czy każdorazowe wykonanie żądania HTTP POST powoduje parsowanie całego dokumentu w języku PHP?

Ten post edytował Niktoś 28.01.2012, 21:23:38
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat
.Myślałem ,że jak szerzej przedstawię swój problem,to jakaś życzliwa osoba wytłumaczy ,albo naprowadzi na właściwy tok rozumowania, abym mógł sobie sam poradzić z problemem, a tu tylko:
Cytat
Chłopie, jesteś naćpany czy co... Naprawdę próbowałem zrozumieć to co napisałeś, ale to jakiś bełkot.
Nie wiem czy zauważyłeś, ale kilka osób już się w tym wątku wypowiedziało, więc ktoś jednak jest życzliwy i chce Ci pomóc. Ale wybacz, czytając [...] zostaje przekierowany na moją stronę, w procesach serwerowych ta czynność widnieje jako GET czy czy każdorazowe wykonanie żądania HTTP POST powoduje parsowanie całego dokumentu w języku PHP? nie da się tego potraktować inaczej niż bełkot.

Najpierw odpowiedz czy poniższy opis przedstawia Twoją sytuację. Nie ma sensu dyskutować gdy nie jesteśmy pewni czy Cię w ogóle dobrze zrozumieliśmy.

1. Istnieją dwie strony internetowe na kompletnie oddzielnych serwerach, powiedzmy strona A i B.
2. Użytkownik znajduje się na stronie A.
3. Wypełnia formularz i go wysyła (czy też klika w jakiś link) w obrębie strony A.
4. Strona A przetwarza jego żądanie po czym zwraca nagłówek Location przekierowujący na stronę B.
5. Przeglądarka reaguje na nagłówek - użytkownik zostaje przekierowany na stronę B.

Następnie upływa kilka sekund i...
6. Strona A samoczynnie (bez żadnej reakcji ze strony użytkownika) wysyła żądanie HTTP z jakimiś tam danymi do strony B.
7. Strona B odbiera to żądanie po czym w jakiś sposób odebrane dane powinny zostać przedstawione użytkownikowi na stronie z punktu #5. Innymi słowy w jakiś sposób na stronie B powinny nagle pojawić się użytkownikowi nowe dane.

Czy ten opis jest poprawny? Jak nie to doprecyzuj.

Po pierwsze to cały problem jest kompletnie niezależny od języka. Czy to PHP, Java, C# czy Python nie ma znaczenia bo problem jest na poziomie protokołu HTTP, a nie oprogramowania po stronie serwera.
Po drugie podstawowa cecha protokołu HTTP - "brak stanu/bezstanowość" (ang. stateless - nie da się tego chyba sensownie przetłumaczyć). Oznacza to, że wszystkie żądania (punkt #3, #5 oraz #6) są kompletnie niezależne od siebie i nie mają żadnego powiązania pomiędzy sobą. Dlatego też wypadałoby wprowadzić jakiś identyfikator, który byłby współdzielony przez te wszystkie żądania (dokładnie w ten sam sposób co identyfikator w mechanizmach sesji), aby powiązać je wszystkie ze sobą. Nie chciałbyś w końcu odczytać danych innego użytkownika.

Cała procedura mogłaby wyglądać następująco:
A. W punkcie #5 generujesz jakiś w miarę unikalny identyfikator, który zostaje zapamiętany na stronie A oraz dołączony jako fragment URL-a strony B, do której użytkownik zostaje przekierowany:
  1. // Strona A
  2.  
  3. $uid = /* wygenerowanie losowego ciągu */;
  4. $redirectURL = 'http://strona.b/?uid=' . $uid;
  5.  
  6. $db->save('do_wykonania_za_10_sek', array('uid' => $uid, 'param1' => 'wartość1', ...)); // dane dla skryptu, który wykona się za 10 sek.
  7. header('Location: ' . $redirectURL);

B. Strona B jest już wygenerowana, więc za 10 sek. nie będziesz wstanie wpłynąć już w żaden sposób na jej treść, dlatego też będziesz musiał skorzystać z AJAX-a* by co kilka sekund odpytywać serwer "czy pojawiły się już jakieś dane dla mojego identyfikatora?". Coś w stylu:
[JAVASCRIPT] pobierz, plaintext
  1. // strona B
  2.  
  3. window.setInterval(function() {
  4. sendXHR('http://strona.b/czy-sa-jakies-dane-dla-mojego-identyfikatora?uid={WARTOŚĆ UID Z URL-A}', function(data) {
  5. console.log("Pojawiły się następujące dane: " + data);
  6. });
  7. }, 5000);
[JAVASCRIPT] pobierz, plaintext

C. Mija kilka sekund, serwera A wysyła żądanie do serwera B. W żądaniu tym poza jakimiś tam danymi znajduje się jeszcze wcześniej wygenerowany identyfikator.
D. Strona B zapisuje odebrane i przetworzone dane w bazie danych.
E. Skrypt czy-sa-jakies-dane-dla-mojego-identyfikatora sprawdza czy dla podanego identyfikatora są zapisane w bazie jakieś dane, jeśli tak zwraca je.

* AJAX nie jest tutaj najlepszym rozwiązaniem, ale jest najprostszym w implementacji. Jeżeli chciałbyś by na stronie B nie było bezsensownych, cyklicznych żądań do czy-sa-jakies-dane-dla-mojego-identyfikatora, ani zbędnych opóźnień (patrz: setInterval) powinieneś skorzystać z dwukierunkowej komunikacji serwerB-klientNaStroneB - Google: JavaScript WebSockets, Comet Server, Bidirectional AJAX etc.
Go to the top of the page
+Quote Post

Posty w temacie
- Niktoś   Działanie HTTP POST i jego wpływ na aplikacje   28.01.2012, 17:19:15
- - l0ud   Wybacz, ale to pytanie w takiej formie jest bez se...   28.01.2012, 18:10:01
- - Niktoś   CytatWybacz, ale to pytanie w takiej formie jest b...   28.01.2012, 19:16:41
- - mls   Nie da się wykonać $_POST - to jest tylko zmi...   28.01.2012, 21:03:10
- - Niktoś   To nie tylko zmienna, chodziło mi o metodę przesył...   28.01.2012, 21:11:00
- - l0ud   $_POST to globalna zmienna tablicowa a nie ża...   28.01.2012, 21:32:01
- - Niktoś   @UP wreszcie rzeczowa odpowiedź. To bez względu c...   28.01.2012, 21:43:50
|- - Theqos   Cytat(Niktoś @ 28.01.2012, 21:43:50 )...   29.01.2012, 11:46:43
- - by_ikar   POST wygląda bardzo podobnie do GET, tyle że w prz...   29.01.2012, 10:43:17
- - Crozin   Czytam Twoje posty, próbuję cokolwiek sensownego w...   29.01.2012, 11:24:17
- - Niktoś   Postaram się to wyjaśnić: Użytkownik wypełnia dane...   29.01.2012, 12:25:49
- - mls   Mówiąc krótko - nic nie zrobisz. To, co użytkownik...   29.01.2012, 13:27:13
- - Niktoś   Niestety regulamin tamtego serwisu zabrania mi udo...   29.01.2012, 13:53:23
- - Crozin   Cytat.Myślałem ,że jak szerzej przedstawię swój pr...   29.01.2012, 15:09:00
- - Niktoś   Opis jak najbardziej poprawny.Dziękuję.No i właśni...   30.01.2012, 16:11:22
- - Crozin   CytatPo przekierowaniu użytkownika na w/w stronę p...   30.01.2012, 19:12:56
- - Niktoś   Chyba mnie to przerasta. Te żądania ajaksowe wydaj...   5.02.2012, 19:13:02
- - Crozin   I znowu bełkot... czytaj swoje posty przed wysłani...   5.02.2012, 19:57:10
- - kwiateusz   Uff a myślałem że to ja ułomny jestem i znowu nie ...   5.02.2012, 20:57:47
- - Niktoś   CytatI znowu bełkot... czytaj swoje posty przed wy...   6.02.2012, 11:31:49
- - strife   @Niktoś - Nie no stary od razu lepiej, jaśniej i c...   6.02.2012, 13:47:33
- - piotrooo89   a jak tak z czystej ciekawości, mógłbyś podać jaki...   6.02.2012, 20:39:39
- - Crozin   CytatCzy ja pisze po hiszpańsku??Nie zarzucaj bełk...   7.02.2012, 12:47:57


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 27.12.2025 - 04:37