Wstecz | Dalej |
Wartością pola Location jest adres, do którego chcemy przekierować przeglądarkę. Może to być zarówno adres bezwzględny (Location: http://www.serwer.com/katalog/plik.html), jak i względny (Location: plik.html) - wówczas nazwa pliku interpretowana jest jako znajdująca się na tym samym serwerze i w tym samym katalogu, co skrypt, z ktorego dokonujemy przekierowania. W obydwu przypadkach serwer WWW wyśle do przeglądarki użytkownika odpowiedni komunikat sygnalizujący konieczność przejścia do nowego adresu. Natomiast jeżeli jako wartość pola Location podamy tekst zaczynający się od znaku "/" (np. Location: /katalog/plik.html), wówczas nastąpi tzw. przekierowanie wewnętrzne - serwer po prostu wyśle wprost do przeglądarki zawartość wskazanego pliku, tak jakby przeglądarka odwołała się bezpośrednio do niego (poprzez adres http://www.serwer.com/katalog/plik.html), a nie do skryptu.
Pole Status służy do zasygnalizowania serwerowi, a w dalszej kolejności przeglądarce, nienormalnego zakończenia wykonywania skryptu (np. z powodu braku potrzebnego pliku, nieprawidłowych danych itp.). Wartość pola Status ma postać: nnn komentarz gdzie nnn jest trzycyfrową liczbą określającą kod błędu zdefiniowany w protokole HTTP, a komentarz - krótkim słownym komentarzem opisującym znaczenie tego kodu. Komentarz można pominąć, jednakże podanie go jest zalecane. Przykładowo, jeżeli chcemy wyświetlić informację o braku pliku, możemy skorzystać ze zdefiniowanego w protokole HTTP kodu 404 wraz z odpowiednim komentarzem:
Status: 404 Nie znaleziono plikuW przeciwieństwie do innych pól nagłówka, pole Status nie jest przez serwer przekazywane do przeglądarki użytkownika, lecz używane do skonstruowania kodu odpowiedzi HTTP, stanowiącego pierwszy wiersz nagłówka generowanego przez serwer. Normalne zakończenie operacji (brak błędu) sygnalizowane jest przez serwer odpowiedzią (por. przykład w poprzednim rozdziale) "HTTP/1.1 200 OK". Wypisanie przez skrypt pola Status takiego jak w powyższym przykładzie spowoduje, że zamiast powyższej odpowiedzi przeglądarce zostanie przekazana odpowiedź "HTTP/1.1 404 Nie znaleziono pliku". Nie wystarczy jednak poprzestać na samym polu Status - niezbędne jest także podanie pola Content-type i treści dokumentu informującej bardziej szczegółowo o zaistniałym błędzie. W przeciwnym razie bowiem użytkownik zobaczyłby w przeglądarce pusty dokument (!) i nie mógłby się zorientować, co się stało (treść odpowiedzi HTTP nie jest widoczna wprost). Tak więc pełna odpowiedź wypisywana przez skrypt mogłaby w tym przypadku wyglądać np. tak:
Status: 404 Nie znaleziono pliku Content-type: text/html; charset=iso-8859-2 <html> <head><title>Błąd !</title></head> <body> <h1>Błąd !</h1> Skrypt nie znalazł pliku o podanej nazwie. </body> </html>Warto jeszcze zwrócić uwagę, że specyfikacja CGI określa specjalny sposób traktowania skryptów, których nazwy zaczynają się od ciągu znaków nph-. Nagłówki wypisywane przez te skrypty nie są w żaden sposób interpretowane ani uzupełniane przez serwer (litery nph są skrótem od non-parsed headers - nieanalizowane nagłówki), lecz w całości przesyłane bezpośrednio do przeglądarki. Skrypty takie muszą więc, zamiast uproszczonego nagłówka omawianego powyżej, wypisywać przed dokumentem pełny nagłówek HTTP, wraz z kodem odpowiedzi i wszystkimi wymaganymi protokołem polami. Ten rodzaj skryptów stosuje się zwykle w sytuacji, gdy operacja, którą ma wykonać skrypt, jest długotrwała. W przypadku zwykłych skryptów CGI dokument wygenerowany przez skrypt jest wysyłany do przeglądarki dopiero po całkowitym zakończeniu działania skryptu. Gdy więc skrypt działa długo, użytkownik czeka na wyświetlenie strony nie wiedząc, co się dzieje (czy nastąpiło w ogóle połączenie z serwerem?). W przypadku skryptów typu nph wypisywany przez nie dokument jest wysyłany do przeglądarki na bieżąco, zatem można najpierw przesłać początek strony (zawierający np. informację "Proszę czekać"), który zostanie wyświetlony przez przeglądarkę, a po zakończeniu działania skryptu - resztę dokumentu.
Wstecz | Dalej |
Powrót do spisu treści | Statystyka |