sobota, 14 marca 2020

Hierarchia plików konfiguracyjnych w ASP.NET

Obecnie większość z Was pewnie tworzy aplikacje w .NET Core. Konfiguracja w .NET Core znacząco różni się od tej znanej z ASP.NET. Niemniej jednak ostatnio musiałem prześledzić zgłoszenie klienta w jednej ze starszych aplikacji. Ponieważ nie do końca wiedziałem dlaczego jedno z ustawień pobieranych z Web.configa ma taką a nie inną wartość, musiałem prześledzić hierarchię ustawień.
Konfiguracja w ASP.NET ma strukturę hierachiczną:


Na samej górze hierarchii znajduje się Machine.config - jest to globalny plik ustawień dla każdej aplikacji .NET. Kolejnym miejscem gdzie możemy wprowadzić ustawienia jest globalny Web.config. Plik ten nadpisuje część ustawień machine.config jak i dodaje nowe.
Kolejne poziomy to:

  • katalog witryn
  • pojedyncza aplikacja webowa
  • folder w aplikacji webowej
Ostatni poziom hierarchii jest o tyle ciekawy, że w aplikacji webowej dla każdego podfolderu możemy zdefiniować osobny plik ustawień.

Ustawienia są oczywiście cachowane, przez co nie są za każdym razem odczytywane z dysku twardego co przyspiesza aplikację.  

poniedziałek, 9 marca 2020

Rola klienta i serwera

Często podczas rozmowy kwalifikacyjnej pada pytanie o rolę serwera / klienta aplikacji internetowej. Postaram się w kilku słowach streścić prawidłową odpowiedź na to pytanie.
Zacznijmy od tego czym jest klient i serwer:

  • klient - w przypadku aplikacji internetowej jest to przeglądarka, pozwala wyświetlać interfejs aplikacji i wysyłać komendy do serwera w celu ich przetworzenia
  • serwer - zwraca żądane przez klienta strony; odpowiedź z serwera zawiera kod HTML który determinuje sposób wyświetlenia żądania klienta
Zarówno klient jak i serwer komunikują się ze sobą za pomocą protokołu HTTP. Protokół ten używa portu 80, lub jeżeli serwer używa certyfikatu SSL - HTTPS na porcie TCP 443.

Proces uzyskiwania połączenia:
  1. Użytkownik wprowadza w przeglądarce adres żądanej strony
  2. Przeglądarka za pomocą protokołu HTTP wysyła żądanie GET do serwera
  3. Serwer WWW otrzymuje zapytanie i rozpoczyna je przetwarzać
  4. Jeżeli zapytanie jest poprawne, serwer zwraca odpowiedź wraz z kodem statusu 200. W przeciwnym przypadku, np. jeżeli adres strony jest błędny, zwraca status błędu 404.
  5. Przeglądarka internetowa użytkownika otrzymuje odpowiedź wraz z kodem statusu. Jeżeli kod jest równy 200 wyświetla zwróconą stronę. Jeżeli kod błędu jest inny, np. 404 wyświetla błąd.
Rola serwera:
  1. Walidacja przychodzącego żądania (requestu)
  2. Uwierzytelnienie - jeżeli serwer używa certyfikatu SSL
  3. Uwierzytelnienie użytkownika jeżeli aplikacja wymaga podania użytkownika i hasła
  4. Autoryzacja użytkownika - sprawdzenie czy ma dostęp do żądanych treści
  5. Przetworzenie żądania
  6. Obsługa błędów
  7. Wynik odpowiedzi może zostać zapamiętany w pamięci (cache) co pozwoli przetworzyć kolejne, takie samo zapytanie znacznie szybciej
  8. Kompresja wyniku w celu zredukowania ilości przesyłanych danych
  9. Logowanie danych zapytania, statystyk
Rola klienta:
  1. Przesyłanie żądań do serwera
  2. Uwierzytelnianie serwera gdy ten dysponuje certyfikatem SSL
  3. Przetworzenie odpowiedzi z serwera i wyświetlenie odpowiedzi
  4. Uruchamianie skryptów po stronie przeglądarki (JavaScript)
Niektóre komendy HTTP:
  • GET - pobieranie danych
  • POST - wysyłanie danych do serwera (np. pola formularza)
  • PUT - pozwala tworzyć dane bezpośrednio na serwerze (o ile użytkownik ma do tego prawo)
  • DELETE - usuwa dane po stronie serwera (o ile użytkownik ma do tego prawo)
  • HEAD - zwraca metadane strony bez jej pobierania; jeżeli strona została zapisane w pamięci (cache) po stornie przeglądarki, można wykorzystać HEAD w celu weryfikacji czy dane po stronie serwera się zmieniły
  • OPTIONS - zwraca listę obsługiwanych komend przez serwer
  • TRACE - diagnostyka i śledzenie wysłanego żądania
  • CONNECT - tworzy tunel, np. gdy chcemy użyć serwera proxy
Kody statusów podzielone są na grupy:

  • 1xx - informacje - żądanie zostało dostarczone do serwera i wciąż jest przetwarzane
  • 2xx - żądanie zostało poprawnie przetworzone
  • 3xx - żądanie przekierowania - klient musi użyć innego adresu aby otrzymać żądane dane
  • 4xx - błąd klienta - w żądaniu (requescie) albo serwer nie wie jak przetworzyć zapytanie
  • 5xx - błędy serwera; serwer nie jest w stanie przetworzyć zapytania
Pełną listę kodów odpowiedzi można sprawdzić w Wikipedii