Metodları əldə edin və göndərin. POST, GET: sorğuların bir-birindən necə fərqləndiyi. HTML forması vasitəsilə HTTP sorğu parametrlərinin müəyyən edilməsi

Bu yazı mənim məqalələrimdən birinə şərhdə verilən suala cavabdır.

Bu yazıda sizə GET / POST / PUT / DELETE və başqalarının HTTP üsullarının nə olduğunu, nə üçün icad edildiyini və REST-ə uyğun olaraq necə istifadə olunacağını söyləmək istəyirəm.

HTTP

Beləliklə, İnternetin əsas protokollarından biri nədir? Pedantları RFC2616-ya göndərəcəm, qalanını isə insan kimi deyəcəm :)

Bu protokol Sorğu və Cavab adlı mesajlara əsaslanan iki kompüter (müştəri və server) arasında əlaqəni təsvir edir. Hər bir mesaj üç hissədən ibarətdir: başlanğıc xətti, başlıqlar və gövdə. Bu halda, yalnız başlanğıc xətti tələb olunur.

Sorğu və cavab üçün başlanğıc xətləri var fərqli format- bizi yalnız sorğunun başlanğıc xətti maraqlandırır, bu belə görünür:

METOD URI HTTP / VERSİYA ,

METHOD sadəcə HTTP sorğu metodu olduğu halda, URI resurs identifikatoru, VERSION protokol versiyasıdır (1.1 versiyası hazırda müvafiqdir).

Başlıqlar iki nöqtə ilə ayrılmış ad-dəyər cütlərinin toplusudur. Başlıqlarda müxtəlif xidmət məlumatları ötürülür: mesajın kodlaşdırılması, brauzerin adı və versiyası, müştərinin gəldiyi ünvan (Referrer) və s.

Mesajın əsas hissəsi, əslində, ötürülən məlumatdır. Cavabda ötürülən məlumatlar, bir qayda olaraq, brauzerin tələb etdiyi html səhifəsidir və sorğuda, məsələn, mesajın mətnində serverə yüklənmiş faylların məzmunu ötürülür. Ancaq bir qayda olaraq, sorğudakı mesajın mətni ümumiyyətlə mövcud deyil.

Nümunə HTTP rabitəsi

Bir nümunəyə baxaq.

Sorğu:
GET /index.php HTTP / 1.1 Host: example.com İstifadəçi-Agent: Mozilla / 5.0 (X11; U; Linux i686; ru; rv: 1.9b5) Gecko / 2008050509 Firefox / 3.0b5 Qəbul edin: mətn / html Bağlantı: bağlayın
Birinci sətir sorğu xətti, qalanları başlıqlardır; mesajın əsas hissəsi yoxdur

Cavab:
HTTP / 1.0 200 OK Server: nginx / 0.6.31 Məzmun-Dil: ru Məzmun növü: mətn / html; charset = utf-8 Məzmun uzunluğu: 1234 Əlaqə: bağlayın ... HTML SƏHİFƏSİNİN ÖZÜ ...

Resurslar və üsullar

Başlanğıc sorğu sətirinə qayıdaq və onun URI kimi parametri ehtiva etdiyini xatırlayaq. Bu vahid resurs identifikatoru deməkdir - vahid resurs identifikatoru. Resurs adətən serverdəki bir fayldır (məsələn, URI bu məsələ"/styles.css"), lakin ümumiyyətlə mücərrəd obyekt resurs ola bilər ("/ blogs / webdev /" - konkret faylı deyil, "Veb inkişaf" blokunu göstərir).

HTTP sorğu növü (həmçinin HTTP metodu adlanır) serverə resursla hansı hərəkəti etmək istədiyimizi bildirir. Əvvəlcə (90-cı illərin əvvəllərində) güman edilirdi ki, müştəri resursdan yalnız bir şey istəyə bilər - onu əldə etmək, lakin indi HTTP protokolundan istifadə edərək yazılar yarada, profili redaktə edə, mesajları silə və s. Və bu hərəkətləri "qəbul etmək" termini ilə birləşdirmək çətindir.

HTTP metodları səviyyəsində resurslarla hərəkətləri fərqləndirmək üçün aşağıdakı variantlar icad edilmişdir:

  • GET - resurs əldə etmək
  • POST - resurs yaratmaq
  • PUT - resurs yeniləməsi
  • DELETE - resursun silinməsi
Diqqət yetirin ki, HTTP spesifikasiyası serveri bütün metodları (əslində 4-dən çox) başa düşməyə məcbur etmir - yalnız GET tələb olunur və həmçinin sorğu qəbul edərkən serverə nə etməli olduğunu demir. xüsusi bir üsulla. Bu o deməkdir ki, server DELETE /index.php HTTP / 1.1 sorğusuna cavab verir məcburiyyətində deyil GET /index.php HTTP / 1.1 sorğusunda olduğu kimi serverdəki index.php səhifəsini silin məcburiyyətində deyil index.php səhifəsini sizə qaytarın, kimi silə bilər :)

REST işə düşür

REST (Representational State Transfer) - bu termin 2000-ci ildə HTTP protokolunun tərtibatçılarından biri olan Roy Fielding tərəfindən veb proqramların qurulması üçün bir qrup prinsiplərin adı kimi təqdim edilmişdir. Ümumiyyətlə, REST HTTP-dən daha geniş ərazini əhatə edir - digər protokollarla digər şəbəkələrdə istifadə oluna bilər. REST "resurs" və "fel" anlayışlarına əsaslanaraq müştəri-server qarşılıqlı əlaqəsi prinsiplərini təsvir edir (onları mövzu və predikat kimi başa düşə bilərsiniz). HTTP vəziyyətində, resurs onun URI-si ilə müəyyən edilir və fel HTTP metodudur.

REST müxtəlif resurslar üçün eyni URI-nin istifadəsindən imtina etməyi təklif edir (yəni, /index.php?article_id=10 və /index.php?article_id=20 kimi iki fərqli məqalənin ünvanları REST yolu deyil) və istifadə müxtəlif fəaliyyət üçün müxtəlif HTTP üsulları. Yəni REST yanaşmasından istifadə etməklə yazılmış veb tətbiqi HTTP DELETE metodu ilə daxil olduqda resursu siləcək (əlbəttə bu o demək deyil ki, siz hər şeyi və hər şeyi silə bilməlisiniz, lakin hər hansı proqram silmə sorğusu HTTP DELETE metodundan istifadə etməlidir).

REST proqramçılara standartlaşdırılmış və əvvəlkindən daha gözəl veb proqramlar yazmaq imkanı verir. REST istifadə edərək, yeni istifadəçi əlavə etmək üçün URI /user.php?action=create (GET / POST metodu) deyil, sadəcə olaraq /user.php (ciddi olaraq POST metodu) olacaq.

Nəticədə, mövcud birləşir HTTP spesifikasiyası və REST yanaşması nəhayət müxtəlif HTTP metodları üçün məna kəsb edir. GET - resursu qaytarır, POST - yenisini yaradır, PUT - mövcud olanı yeniləyir, DELETE - silir.

Problemlər?

Bəli, REST-in praktikada tətbiqi ilə bağlı kiçik bir problem var. Bu problem HTML adlanır.

PUT/DELETE sorğuları XMLHttpRequest vasitəsilə serverlə "əl ilə" əlaqə saxlamaqla (məsələn, curl və ya hətta telnet vasitəsilə) göndərilə bilər, lakin siz tam PUT/DELETE sorğusu göndərməklə HTML formasını yarada bilməzsiniz.

Məsələ burasındadır ki, HTML spesifikasiyası GET və ya POST-dan fərqli olaraq məlumatları təqdim edən formalar yaratmağa imkan vermir. Buna görə də, digər üsullarla normal işləmək üçün onları süni şəkildə təqlid etməlisiniz. Məsələn, Rack-də (Ruby-nin veb-serverlə qarşılıqlı əlaqədə olduğu mexanizm; Rails, Merb və digər Ruby çərçivələri Rack-dən istifadə etməklə hazırlanır) formada "_method" adlı gizli sahə əlavə edə və onun adını göstərə bilərsiniz. dəyər kimi metod (məsələn, "PUT") - bu halda POST sorğusu göndəriləcək, lakin Rack POST deyil, PUT qəbul etdiyini iddia edə biləcək.

Demək olar ki, bütün proqramlar üçün ümumi olan iki anlayış var - giriş məlumatlarının işlənməsi və nəticələrin çıxarılması. Bu səhifədə biz CGI proqramlarının daxil edilməsinə diqqət yetirəcəyik. Birincisi, giriş haradan gəlir, ikincisi, giriş serverə necə ötürülür. Effektiv CGI proqramları yazmaq üçün bu şeyləri aydın başa düşməlisiniz.

HTTP haqqında bir az

Server üç növ sorğu qəbul edir: GET, POST və HEAD. Veb serverə proqram sorğusu belə görünür:

GET /index.html HTTP / 1.0

Birinci hissə, bu halda GET, sorğu metodudur, ikinci, index.html, tələb olunan URL-dir və üçüncü, HTTP / 1.0, müştəri tərəfindən istifadə olunan protokoldur.

İki əsas sorğu metodu GET və POST-dur. Bunlar forma yaratarkən istifadə edə biləcəyiniz üsullardır. HEAD metodu brauzer tərəfindən nadir hallarda istifadə olunur, çünki o, yalnız cavab başlığını tələb edir və bu halda cavab orqanı göndərilmir. Məsələn, səhifənin dəyişdiyini yoxlamaq üçün brauzer başlıq tələb edə bilər, lakin bu, tam ünsiyyət yaratmır.

GET üsulu

Varsayılan olaraq, sorğu GET metodundan istifadə edir. POST metodu yalnız forma sorğusunda açıq şəkildə göstərildikdə istifadə olunur. CGI proqramçısı üçün GET sorğusu verildikdə forma məlumatlarının URL ilə birlikdə serverə göndərildiyini başa düşməsi çox vacibdir. CGI-ni dəstəkləyən veb serverlər bu məlumatları QUERY_STRING adlı mühit dəyişəninə köçürür. Bundan sonra CGI proqramı ətraf mühit dəyişənindən verilənlərin alınması və onun işlənməsi üçün məsuliyyət daşıyır.

Sorğu sətri ilə URL belə görünür:

Http://www.domen-name.com/login.pl?nick=maks&psw=parol

İmza? sorğu sətirini resursun faktiki URL-indən ayırır; nick və psw serverə ötürülən dəyişənlərdir, maks və parol müvafiq olaraq onların dəyərləridir.

POST metodu

POST metodu formanın METHOD atributunda açıq şəkildə göstərildikdə istifadə olunur. GET metodundan fərqli olaraq, POST məlumatları URL-də deyil, sorğunun mətnində yerləşdirir. POST sorğusu HTTP cavabına çox bənzəyir. Birinci sətir POST metodunu təyin edən standart HTTP sorğusudur. O, sorğunun əsas hissəsindən boş sətirlə ayrılmış zəruri əlavə başlıqları ehtiva edə bilər.

POST metodundan istifadə edərkən sorğunun əsas hissəsi standart giriş kimi proqrama ötürülür.

GET və POST arasında seçim

Aydındır ki, formalar hazırlayarkən CGI proqramçısı bu üsullardan hansını istifadə etməli sualı ilə qarşılaşacaq. Əksər hallarda hər iki üsul tətbiq olunur və hər ikisi yaxşı işləyəcək. Bununla belə, bu və ya digər metodun istifadəsi müəyyən üstünlüklər verdiyi hallar var.

GET və ya POST metoduna üstünlük vermənin məntiqli olduğu bir neçə vəziyyətə baxaq.

  • Proqramınızın istinadla çağırılmasını istəyirsinizsə, GET metoduna üstünlük verilməlidir.
  • Proqramınıza ötürülən arqumentlərin server log faylına yazılmasını istəmirsinizsə, POST metodundan istifadə edin. Məsələn, əgər forma istifadəçi adı və parol tələb edirsə, yəqin ki, adların və parolların hesabat faylında saxlanmasını istəmirsiniz. Həmçinin, parolu URL-in bir hissəsi kimi ötürmək müdrik deyil.
  • Formanız böyükdürsə, məsələn, qeydlər və şərhlər olan mətn qutuları varsa, POST metodundan istifadə etməlisiniz. Ümumiyyətlə, siz bu halda da GET metodundan istifadə edə bilərsiniz, lakin sonra URL-nin ölçüsü ilə bağlı müxtəlif məhdudiyyətlərlə qarşılaşa bilərsiniz. əməliyyat sistemləri və brauzerlər (mühit dəyişənlərinin ölçüsü ilə məhdudlaşır). POST metodundan istifadə etmək daha asandır.
  • Əgər formanızda fayl sahəsi varsa, POST metodundan istifadə edin. Bundan əlavə, bu halda, ENCTYPE atributunun dəyərini çoxhissəli / forma məlumatlarına təyin etməlisiniz.

Hal-hazırda, yalnız iki HTTP metodu ən çox istifadə olunur: GET və POST. Amma məlum oldu ki, bu iki "şam" arasında belə veb tərtibatçılar itməyi bacarırlar. Bunun bir izahı var: eyni nəticəni əldə etmək üçün hər iki üsuldan istifadə etmək olar. Ancaq yadda saxlamaq lazımdır ki, hər hansı bir metodun düşünülməmiş tətbiqi kanalda və təhlükəsizlik boşluqlarında böyük yüklər də daxil olmaqla fəlakətli nəticələrə səbəb ola bilər.

Bunun qarşısını almaq üçün bu üsulların məqsədini və fərqlərini daha ətraflı başa düşmək kifayətdir.

Metodların adlarının mənasını araşdırsanız, çox şey aydın olacaq. GET (ingilis dilindən qəbul etmək), yəni. məlumatların sorğulanması üçün istifadə edilməlidir. POST (ingilis dilindən poçtla göndərmək üçün) - məlumatları serverə göndərmək üçün istifadə edirik. Hər şey son dərəcə sadə və başa düşülən görünür. Bəs bir formalı vizit kartı saytından bir az daha mürəkkəb saytları kim inkişaf etdirmək istəyər? rəy, məsələyə daha yaxından baxmaq daha yaxşıdır.

Təhlükəsiz və etibarsız HTTP sorğuları

HTTP 1.1 spesifikasiyası iki anlayış təqdim edir: təhlükəsiz sorğu və etibarsız sorğu, daha dəqiq desək, metod.

Təhlükəsiz üsullar yalnız məlumat tələb edə bilən üsullardır. Onlar tələb olunan resursu dəyişə bilməz, istifadəçi, digər şəxslər və ya server üçün arzuolunmaz nəticələrə gətirib çıxara bilməz. Təhlükəsiz olanlara misal olaraq veb səhifənin və ya şəklin HTML kodunu tələb etmək olar. Təhlükəsiz üsullar HEAD və GET-dir.

Qeyd

Əslində, sənətkarlar əlbəttə ki, zərər verə bilər və sorğu GET mi. Məsələn, sorğu döngələri.

Təhlükəsiz sorğular, hər kəsin təxmin etdiyi kimi, təkrar istifadə olunarsa, pis nəticələrə səbəb ola bilər. Bu cür sorğular daxil olan resursun məzmununu dəyişə bilər. Bu cür sorğulara misal olaraq: mesaj göndərmək, qeydiyyatdan keçmək, onlayn ödənişlər... Təhlükəli üsullar POST, PUT, DELETE-dir.

İdempotent üsullar

Idempotency, məlumat köhnəlmədikcə, bir neçə dəfə təkrar edilən zənglərlə eyni nəticəni verəcək metodların xüsusiyyətidir. Bu o deməkdir ki, eyni URL-ə daxil olduqda, bütün istifadəçilər eyni veb səhifəni, şəkli, videonu və s. GET, PUT, DELETE metodları bu xüsusiyyətə malikdir.

İndi GET və POST üsullarının özləri haqqında daha ətraflı: hər biri üçün qısa bir "xülasə" tərtib edək.

GET

  • serverdən məlumat almaq üçün nəzərdə tutulmuşdur;
  • sorğunun mətni boşdur;
  • boş sorğu orqanına görə server tərəfində daha sürətli və server resurslarının daha az istehlakı ilə işlənir;
  • dəyişənlərin köçürülməsi baş verir ünvan çubuğu(istifadəçi belə görür, texniki olaraq məlumat sorğu sətirində ötürülür) və buna görə də dəyişənlər və onların dəyərləri haqqında məlumat görünür (məlumatlar qorunmur);
  • serverə az miqdarda məlumat ötürə bilir: URL-in uzunluğuna məhdudiyyətlər var, bu brauzerdən asılıdır, məsələn IE6 = 2Kb. Bu Yahoo!-nun tərtibatçılarının hədəf almağı tövsiyə etdiyi rəqəmdir;
  • yalnız ASCII simvollarını ötürə bilər;
  • belə bir sorğu kopyalana, saxlanıla bilər (məsələn, əlfəcinlərdə);
  • sorğu önbelleğe alına bilər (buna nəzarət etmək olar);
  • kanala və serverə yükü daha da azaltmaq üçün şərti və qismən sorğular mövcuddur;
  • HTTP bağlantısını pozmur (serverdə keepAlive rejimi aktiv olduqda).

POST

  • serverə məlumat göndərmək üçün nəzərdə tutulmuşdur;
  • məlumat ötürülməsi sorğu orqanında baş verir;
  • server tərəfində emal GET-dən daha yavaş və "daha çətin" olur, çünki başlıqlara əlavə olaraq, sorğunun əsas hissəsini təhlil etməlisiniz;
  • böyük miqdarda məlumat ötürmək imkanı;
  • faylları ötürmək imkanı;
  • POST metodu ilə yaradılan səhifə əlfəcin edilə bilməz;
  • HTTP bağlantısını pozur;
  • hətta çox az miqdarda məlumat ötürmək üçün əksər brauzerlər ən azı iki TCP paketi göndərirlər: başlıq və sonra sorğunun əsas hissəsi.

Məlum olub ki, bu iki üsul o qədər də oxşar deyil. Bu və ya digərinin istifadəsi GET-in standart olaraq istifadə edilməsi və ya onunla işləmək daha asan olması ilə deyil, qarşıda duran vəzifə ilə müəyyən edilməlidir. GET, şübhəsiz ki, əksər hallarda, xüsusən sürətli AJAX qurarkən daha yaxşı seçimdir, lakin onun çatışmazlıqlarını da unutma. Özüm üçün metodun seçimi ilə bağlı sadə bir alqoritm qeydi etdim.

Onların ortaq cəhəti eyni şəkildə işləmələridir. Onların arasında texniki cəhətdən heç bir fərq yoxdur. Amma ideoloji fərqlər var.

Mən onları PHP kontekstində əhatə edəcəyəm. Nəzərə alın ki, HTTP protokolu mübadilə üçün yaradıldığı üçün dolayı yolla PHP ilə bağlıdır html səhifələri PHP sadəcə hər ikisinin imkanlarını genişləndirir.

GET sorğusu məlumat almaq üçün, POST isə göndərmək üçün istifadə olunur. (Xatırladıram ki, onlar texniki cəhətdən eyni şəkildə işləyirlər).

Buna görə də, PHP kontekstində bu ideologiyaya əsaslanaraq aşağıdakıları etdilər:
1. Hər dəfə PHP-ni işə saldığınız zaman, standart olaraq, superqlobal massivlər($ _GET, $ _POST).
2. Sorğu sətirində varsa sual işarəsi(?). Sonra ondan sonra sayılan hər şey parametrlər GET sorğusunda, onlar "açar" = "dəyər" formatında təqdim olunur və ayırıcı kimi ampersand simvolu (&) istifadə olunur
Misal:
GET /index.php?name=Andrey&soyadı=Galkin
bu sorğu sətridir, 2 parametr var. bu parametrlər $ _GET massivində bitəcək.
3. $ _POST başqa şəkildə doldurulur. bu massivin məzmunu "sorğu başlıqları"ndan doldurulur. Yəni açıq formada gözdən gizlənən yerdən. Bu cür başlıqların yaradılmasının bütün qaydası brauzer tərəfindən həyata keçirilir. Baxmayaraq ki, bəzən başlıqlarda bir şey əl ilə redaktə edilir.

Çox vaxt poçt sorğusu formalarda istifadə olunur (məlumatların təqdim edilməsi üçün).

Məsələn, bizdə giriş forması var 2 sahə giriş və şifrə.

Təsəvvür edək ki, biz GET metodundan istifadə edirik. Sonra formanı təqdim edərkən aşağıdakı ünvana keçəcəyik /login.php?login=Andrey&password=123 razılaşırıq ki, bu cür məlumatların bu şəkildə ötürülməsi heç də təhlükəsiz deyil. Hər kəs brauzerinizi aça bilər və saytın ünvanını daxil etməyə başlayır, o, tarixdən parollarınızı və girişlərinizi görə bilər.

Ancaq POST metodu ilə qeyd etsək, aşağıdakı sorğunu alacağıq:
POST /login.php (giriş = Andrey & parol = 123) mötərizədə nə gizlənəcək və brauzerdə saxlanmayacaq.

Ümumiyyətlə, ümumiləşdirmək üçün:
GET almaqdır xüsusi bir səhifə müəyyən bir formada (çeşidləmə, cari blog səhifəsi, axtarış çubuğu və s.).
POST - səhifənin ekranına təsir etməyən məlumatların göndərilməsi üçün, o mənada ki, bu məlumatlar yalnız skript icrasının nəticəsinə təsir edir (girişlər, parollar, kredit kartı nömrələri, mesajlar və s.).

Və başqa biri yaxşı xəbər məsələn, birləşdirilə bilər
POST /index.php?page=login (login = Andrey & password = 123) Düşünürəm ki, bundan nə çıxacağını və hansı massivdə hansı parametrlərin daxil olacağını artıq kifayət qədər izah etmişəm.

  • POST metodu məlumatları elə köçürür ki, sayt istifadəçisi skriptə ötürülən məlumatları daha görmür:
    http://www.komtet.ru/script.php

Hər iki üsul lazımi məlumatları veb formasından skriptə uğurla köçürür, buna görə saytınız üçün ən uyğun olan bu və ya digər metodu seçərkən aşağıdakı amilləri nəzərə almalısınız:

  1. GET metodunun necə işləməsi skriptə ötürülən məlumatın miqdarını məhdudlaşdırır;
  2. GET metodu bütün toplanmış forma məlumatlarını URL-in bir hissəsi kimi skriptə göndərdiyindən (yəni aydın mətndə), bu saytın təhlükəsizliyinə mənfi təsir göstərə bilər;
  3. GET metodu ilə yaradılan səhifə əlfəcin edilə bilər (səhifə ünvanı həmişə unikal olacaq), lakin POST metodu ilə yaradılan səhifə ola bilməz (məlumatlar URL-də əvəz olunmadığı üçün səhifə ünvanı dəyişməz qalır);
  4. GET metodundan istifadə edərək məlumatları veb forması ilə deyil, & işarəsi vasitəsilə lazımi dəyərləri daxil etməklə səhifənin URL-i vasitəsilə ötürə bilərsiniz:
    http://www.komtet.ru/script.php?login=admin&name=komtet
  5. POST metodu, GET metodundan fərqli olaraq, faylları sorğuya köçürməyə imkan verir;
  6. GET metodundan istifadə edərkən axtarış robotunun bu və ya digər “açıq sorğu”nu yerinə yetirə bilməsi riski var.

Daha aydın göstərmək üçün POST və GET arasındakı fərq, Mən onların hansı xüsusiyyətləri ilə fərqləndiyini görə biləcəyiniz bir cədvəl verirəm.

Bu xüsusiyyətə əsaslanaraq, nə vaxt istifadə edəcəyimiz barədə nəticə çıxara bilərik POST, və nə zaman GET... Məsələn, istifadəçi yaradılan səhifəni işarələmək istəyirsə. Sonra nəsil tərəfindən yer almalıdır sorğu GET, əks halda səhifəni əlfəcin edə bilməyəcəksiniz. Başqa bir misal: giriş və şifrəni köçürərkən, metodu təyin edə bilməzsiniz GET, çünki o, məlumatların ünvan çubuğundan ötürülməsinə əsaslanır. Əks halda, " düyməsini basdıqdan sonra təqdim", Ünvan çubuğunda buna bənzər bir şey görünəcək:" http://test.ru/login.php?log=User&pass=123", - və parol hər kəs tərəfindən görülə bilər, əlbəttə ki, icazə verilmir. Buna görə də burada metoddan istifadə etməlisiniz POST.

Həmçinin, metodla ötürülə bilən məlumatların ölçüsünü unutmayın POST, üsulla ötürüləndən daha böyük bir sıra GET... Ümumiyyətlə, bu cədvəli təhlil edin və bir nəticə çıxarın: müəyyən bir vəziyyətdə hansı məlumat ötürülməsi üsulu istifadə edilməlidir. Mən bunu əlavə etmək istərdim 80% hallarda istifadə edilməlidir POST, lakin bunun uzaq olduğunu unutmayın 100% .