RUNĀTĀJS: Parunāsim par citu protokolu — hiperteksta pārsūtīšanas
protokolu jeb HTTP.
Mēs jau esam runājuši par IP un TCP iepriekšējos videoklipos.
Un tie ir protokoli, kas nosaka, kā informācija tiek pārvietota no
mašīnas uz mašīnu un no programmas uz programmu, vai pakalpojumu uz
pakalpojumu, izmantojot internetu, izmantojot šo maršrutētāju un
iekārtu tīklu.
Bet tā parasti nav pilna bilde, vai ne?
Parasti, kad mēs nosūtām informāciju, pati programma — kad dati tiek
saņemti, piemēram, e-pastā, izmantojot TCP portu 25 vai tīmekļa lapas
pieprasījumu, izmantojot portu 80, tur parasti ir noteikumu sistēma,
lai apstrādātu to, ko esmu tikko saņēmis.
Un HTTP ir tieši šāda protokola piemērs.
HTTP ir vienīgais lietojumprogrammas slāņa protokols, par kuru mēs
runāsim.
Taču tas ir vēl viena noteikumu kopa, kas nosaka, kā informācija ir
jāpārraida un jāapstrādā, izmantojot internetu.
Konkrēti, HTTP precīzi norāda, kā ir jāiesniedz pieprasījums tīmekļa
lapai un kā serveris, mašīna, kas mitina tīmekļa lapas, piegādā šo
informāciju atpakaļ klientiem.
Tātad šim protokolam faktiski nav nekāda sakara ar to, kā informācija
pārvietojas no punkta A uz punktu B.
Tā patiešām ir noteikumu sistēma — tie būtībā ir noteikumi par
iesaistīšanos darbā ar tīmekļa lapu, līdzīgi kā tad, kad kāds pamāj
jums sveicinot, jums ir jāatbild.
Tas ir sava veida parasts cilvēku mijiedarbības protokols.
HTTP protokols vienkārši saka: ja vēlaties pieprasīt tīmekļa lapu,
pārliecinieties, vai jūsu formāts izskatās šādi — līdzīgi, kā ir ar
biznesa vēstules noformēšanu.
Un atbilde līdzīgi tiks sniegta saskaņā ar šo protokolu.
Ir arī citi lietojumprogrammu slāņa protokoli, par kuriem mēs
nerunāsim videoklipos.
Bet tie ietver tādas lietas kā: datņu pārsūtīšanas protokols,
vienkāršais pasta pārsūtīšanas protokols e-pasta sūtīšanai, datu
izplatīšanas pakalpojums, attālās darbvirsmas protokols, RDP, kas
tiek izmantots, ja vēlaties attālināti piekļūt savam datoram no cita
datora, XMPP, kas ir bieži zināms kā Jabber vai tērzēšana, tāpēc šis
ir tērzēšanas pakalpojumu izmantošanas protokols.
Un tur ir daudz, daudz, daudz kā cita.
Tāpēc katru reizi, kad izmantojat pakalpojumu, pakalpojums sagaida,
ka informācija tiks saņemta — pieprasījums tiks saņemts — ļoti
noteiktā formātā, un tam arī ir jāatgriež informācija ļoti noteiktā
formātā.
Tāpēc atgriezīsimies pie ilustrācijas, kurā mēs vēlamies runāt ar
internetu.
Tātad mēs esam laimīgi un vēlamies apmeklēt cats.com, vai ne?
Tātad, ja mēs tikai runājam ar cats.com, mēs varētu teikt kaut ko
līdzīgu: “Hej, vai varu apskatīt jūsu sākumlapu?”
Un cats.com droši vien atbildēs: jā, protams.
Lūdzu!
Tātad tā ir cilvēku jautājums-atbilde komunikācija.
Kā tas izskatās HTTP?
Nu, patiesībā tas diezgan skaidri parāda kaut ko līdzīgu šim.
Mēs varētu teikt GET/HTTP/1.1 no vietnes cats.com.
Tātad būtībā tas, ko es šeit daru, ir tīmekļa lapas www.cats.com/
prasīšana.
Mūsdienās slīpsvītru parasti izlaižam, taču tas nozīmētu tikai
cats.com mājaslapu.
Ak, un, starp citu, es izmantošu HTTP versiju 1.1, lai sazinātos ar
jums.
Tas ir līdzīgi kā teikt: starp citu, es runāšu franču valodā, vai:
starp citu, es runāšu angliski.
Tas ir tikai protokola formāts.
Tas ir arī 1.0, kas vairs netiek plaši izmantots.
Tāpēc es runāju par HTTP 1.1, un es vēlētos www.cats.com/.
Lūdzu, dabūjiet to man.
Un tad ir arī cita informācija — daudzpunkte, kas ir informācija par
to, kas jūs esat, lai cats.com zinātu, kur to nosūtīt.
Bet šīs ir divas kritiskās daļas HTTP pieprasījuma pašā sākumā —
tāpat kā tad, kad sākat rakstīt vēstuli, jūs sakāt: dārgais, vārds.
Tas pēc būtības ir ļoti līdzīgi tam.
Un, ja vietne cats.com sacīs: ak, protams, še tev.
Viņi varētu atbildēt šādi — es arī atbildu.
Es arī runāju HTTP 1.1.
Jūsu pieprasījums ir apstiprināts, 200 OK.
Tas, ko jūs tūlīt saņemsiet, ir HTML un pēc tam: daudzpunkte, papildu
informācija.
Pieprasījuma pašā apakšā patiesībā ir HTML, iezīmēšanas valoda,
cats.com mājaslapas saturs.
Tātad HTTP/1.1 — es atzīstu, ka jūsu pieprasījums tika pieņemts,
izmantojot HTTP 1.1.
Jūsu pieprasījums tika apstiprināts.
Es varu dot jums to, ko vēlaties, 200 OK.
Jūs tūlīt saņemsiet HTML.
Un tad šeit ir jūsu pieprasītais HTML.
Bet dažreiz mūsu pieprasījumi ne vienmēr notiek saskaņā ar plānu.
Vai es varu redzēt jūsu cats.html lapu?
Nu, ja viņi saka, ka mums nav cats.html lapas, kas šķiet nereāli, jo
viņi ir cats.com.
Varētu domāt, ka viņiem ir cats.html.
Bet labi.
Tātad šī ir sava veida parasta cilvēku mijiedarbība, kāda mums tagad
ir bijusi ar cats.com.
Kā tā tiek tulkota?
Tas jums varētu būt pazīstami.
Mūsu pieprasījums izskatījās tieši tāds pats, tikai tā vietā, lai
iegūtu slīpsvītru, mēs tagad saņemam cats.html.
Tātad tagad būtībā viss šis pieprasījums ir: lūdzu, sniedziet man
www.cats.com/cats.html.
Tātad saimniekdators un šīs augšējās līnijas vidējā daļa precīzi
norāda, kuru lapu es meklēju.
Taču cats.com šajā gadījumā nespēs atbildēt pozitīvi.
Viņi nezina, par ko mēs runājam.
Tātad tas ir kaut kas, ko jūs, iespējams, redzējāt iepriekš —
HTTP 1.1 404 Not Found.
Es nevarēju atrast to, ko jūs lūdzāt.
Starp citu, es jums atdošu kādu HTML, un parasti tas HTML ir kādas
404 lapas saturs.
Un cats.com gadījumā, iespējams, tie ir daži jauki kaķi grozā ar
skumju 404 purniņu blakus, jo jums būs skumji, ja jūs nesaņemsit
lapu, kuru meklējāt.
Tādi ir sava veida pamati tam, kā izskatās protokols, HTTP protokola
pieprasījumi.
Tie patiešām ir līdzīgi tam, kā mēs veiktu līdzīgu mijiedarbību, ja
mēs kaut ko lūdzam un saņemam atpakaļ, vai rakstot vēstuli un gaidot
atbildes vēstuli noteiktā formātā.
Tas ir gandrīz tas, ko HTTP tikai kanonizē visām ierīcēm, kas vēlas
piekļūt tīmekļa lapām hiperteksta pārsūtīšanai.
Tātad formas rinda, šī metodes pieprasījuma mērķa HTTP versija tiek
saukta par HTTP pieprasījuma rindiņu.
Parasti tā ir pirmā lieta, kas tiek pārsūtīta kā daļa no HTTP
pieprasījuma vai, ja jūs pieprasāt HTTP.
Tas ir apmēram tāpat, kā es teicu, sakot: dārgais, vārds jūsu
vēstules augšpusē.
Viņi zina, ka jūs rakstāt viņiem vēstuli.
Tātad tas ir ļoti līdzīgs apgalvojumam: es zinu, ka viņi veic HTTP
pieprasījumu, un šis ir konkrētais formāts, ko viņi pieprasa.
HTTP versija, iespējams, vienmēr būs HTTP/1/1.
1.0 arī pastāv, bet vairs netiek īsti izmantota.
CS50 vajadzībām GET, iespējams, vienmēr ir tas, ko izmantosit, kad
faktiski veicat tiešus HTTP pieprasījumus.
Bet POST ir vēl viena iespēja, par kuru mēs šobrīd nerunāsim.
Un tad request-target ir tas, kuru mitinātāja servera lapu vēlaties
iegūt.
Kā jau teicu, šis mitinātāja nosaukums ir atsevišķa rinda, parasti
vispārējā pieprasījuma otrā rinda.
Un tā kopā mitinātāja nosaukums un pieprasījuma mērķis norāda
konkrētu meklējamo resursu.
Mūsu 404 piemērā pirms brīža es vēlreiz meklēju www.cats.com, kur
cats.com būtu mitinātājs.
Un savā pieprasījuma rindā es teicu /cats.html.
Tas bija mana pieprasījuma mērķis.
Tātad kopumā es prasīju saturu vai resursu, kas atrodas vietnē
www.cats.com/cats.html.
Pēc tam, pamatojoties uz to, vai resurss pastāv un vai serveris var
piegādāt resursu atbilstoši klienta pieprasījumam, jūs varat saņemt
atpakaļ dažādus statusa kodus.
Dažus no šiem statusa kodiem esat redzējuši, jo tie ir daļa no
atbildes.
Daži no tiem, 200 OK, iespējams, ir diezgan klusi.
Jūs, iespējams, nekad neesat redzējuši, ka lapa atbildētu 200 OK.
Jūs vienkārši saņemat lapu.
Tas nav kā 404 kļūda, kas parasti ir diezgan skaidra.
Parasti redzat, ka tajā ir rakstīts 404.
Tātad, parunāsim par to, kādi varētu būt daži no šiem statusa kodiem.
Atkal, kad serveris mums atbild, viņi atbildēs: uz HTTP version
status.
Parasti HTTP/1.1.
Kādi būs šie statusa kodi?
Nu, mums varētu būt success.
Tātad panākumu kategorijā mēs varētu iegūt kodu 200 ar tekstu OK.
Ko tas nozīmē?
Nu, viss ir labi.
Jūs iesniedzāt derīgu pieprasījumu.
Šeit ir derīga atbilde.
Es varēju piegādāt tieši to, ko jūs gribējāt.
Dažreiz jūs varat iegūt citas lietas, kuras jūs uzreiz nepamanīsit,
taču tās ir zināmas neveiksmes.
Tās sauc par novirzīšanu.
Šeit ir divas izplatītas.
301 Moved Permanently — tas būtībā nozīmē, ka lapa tagad atrodas
jaunā vietā.
Tā tur dzīvos mūžīgi.
Un lielākā daļa pārlūkprogrammu jūs automātiski novirzīs.
Tātad jūs arī nekad neredzēsit 301, ja vien neizmantojat patiešām
novecojušu pārlūkprogrammu, iespējams, jo 301 atbilde ir daļa no 301
atbildes daudzpunktes.
Tā arī norāda, kur atrodas jaunā lapa.
Tāpēc lielākā daļa pārlūkprogrammu jūs vienkārši novirzīs uz turieni,
pieņemot, ka vēlaties tur doties.
Dažreiz jūs saņemsiet arī 302 Found.
Un šo jūs patiešām joprojām varat redzēt laiku pa laikam.
Dažreiz lapas īslaicīgi pārvietojas.
Tāpēc tas netiks iekļauts pieprasījumā, kas liek pārlūkprogrammai
neatgriezeniski veikt izmaiņas ikreiz, kad tā redz jūsu pieprasījumu
mainīt to uz kaut ko citu.
Tātad jūs varētu redzēt 302 Found, kas būtībā saka, ka šī lapa dzīvo
kaut kur citur.
Bet tā tur nedzīvos mūžīgi.
Tā galu galā, iespējams, atgriezīsies tur, kur jūs domājat tā ir.
Tad jūs saņemsit tādas lietas kā klienta kļūdas.
Tātad šīs ir tās, kuras jūs, iespējams, esat redzējuši.
Jūs, iespējams, neesat redzējuši 200. vai 300. kļūdas, bet jūs,
iespējams, pazīstat 400. kļūdas.
Un tas ir tas, par ko mēs runāsim pēc brīža, arī par 500.
Jūs varētu redzēt 401 Unauthorized.
Parasti tas nozīmē, ka mēģināt piekļūt lapai, bet neesat pieteikušies.
Tātad jūs mēģināt atvērt kādu profilu vai kaut ko pakalpojumā
Facebook, vai mēģināt piekļūt kaut kam — jūs esat darbā.
Jūs mēģināt kaut kam piekļūt no sava darba interneta, taču neesat
pieteikušies.
Jūs neredzat lapu.
Jūs varat saņemt 401 Unauthorized, kas nozīmē, ka mēs, iespējams,
varēsim apmierināt šo pieprasījumu, taču vispirms jums ir jāpiesakās,
lai to izdarītu.
Un otrādi, jūs varat saņemt 403 Forbidden, kas nozīmē, ka nav īsti
svarīgi, vai esat pieteicies vai ne.
Šis pieprasījums nav atļauts.
Resurss atrodas serverī
Bet jums nav atļauts tam piekļūt.
Parasti tās ir iekšējās datnes, kas dažādu iemeslu dēļ atrodas
serverī, bet nav paredzētas, lai tām piekļūtu no ārpasaules, un tāpēc
tās ir aizliegtas.
Tās tur dzīvo.
Es nesaku, ka nevaru atrast.
Bet es saku, ka nevaru jums to dot.
Un nav svarīgi, vai esat pieteikušies vai ne.
Un tad, protams, plaši izplatītā kļūda 404 Not Found.
Datne serverī neeksistē.
Es vēlētos apmierināt jūsu pieprasījumu, bet es nevaru.
Dažkārt tiek parādītas arī servera kļūdas, no kurām visizplatītākā
parasti ir 500 Internal Server Error, kas faktiski neko jums neteiks
par to, kas ir noticis nepareizi.
Bet patiesībā jūs neesat pieļāvuši kļūdu savā pieprasījumā.
Faktiski serveris kaut kā nespēj izpildīt pieprasījumu.
Tātad 500 ir vispārējā atbilde.
Jūs redzēsit arī tādu informāciju kā Service Unavailable, kas,
manuprāt, ir kods 503.
Un Gateway Timeout — ja jums kādreiz ir bijusi lapa, kas vienkārši
sēž tur un lādējas, lādējas, lādējas, un jūs nekad nezināt, vai tā
tiks ielādēta vai ne, un galu galā tā vienkārši saka — vienkārši
padodas.
Tā ir 504 Gateway TImeout.
Serveris vēlējās izpildīt jūsu pieprasījumu, taču servera pusē radās
problēma, nevis jūsu pusē radās problēma.
Tagad mēs varētu beigt stāstu šeit, bet tas, ko es tagad darīšu, ir -
es atvēršu savu pārlūkprogrammu un parādīšu, kā jūs varētu redzēt
dažus no šiem statusa kodiem, pat ja parasti jūs tos neredzat.
Un mēs to darīsim, apskatot dažus izstrādātāja rīkus.
Tā, tagad es esmu savā pārlūkprogrammas logā.
Un es vēlos uzzināt mazliet vairāk par šiem HTTP pieprasījumiem.
Kā es varu zināt — mēs noteikti zinām, vai lapa aiziet — ja kaut kas
noiet greizi, mēs saņemam 404.
Mēs visi to esam redzējuši.
Mums nav nepieciešams to ilustrēt.
Bet kādi ir daži citi?
Un kā mēs redzētu šos pieprasījumus darbībā?
Tāpēc pirmā lieta, ko es darīšu, ir atvērt Developer Tools.
Tāpēc izstrādātāja rīki ir iebūvēti lielākajā daļā moderno
pārlūkprogrammu un ļauj mums redzēt lietas, kuras mēs citādi
neredzam — kāda papildu informācija tiek pārsūtīta zem mūsu tīmekļa
pieprasījumiem.
Es šeit izmantoju Google Chrome.
Un, lai pārlūkā Chrome atvērtu izstrādātāja rīkus, vienkārši
nospiediet taustiņu F-12, un tas atvērs to sānos.
Kad es ierakstīšu pieprasījumu, es pietuvināšu, lai mēs varētu
redzēt, kas šeit notiek.
Bet es darīšu savā pārlūkprogrammas joslā — un es pietuvināšu šeit —
es nosūtīšu pieprasījumu vietnei www.google.com.
Mēs visi, iespējams, kādreiz esam izteikuši šo pieprasījumu.
Es nospiedīšu Enter.
Tagad savos izstrādātāja rīkos esmu izvēlējies cilni Network.
Un jūs šeit pamanāt daudzas lietas.
Paskatieties uz šiem — 200 OK, 200 OK, daži no šiem statusa kodiem
parādās.
Es nezinu, kāpēc es saņemu 302 Found.
Es nezināju, ka es to redzēšu.
Bet būtībā ievērojiet, ka, runājot par manu Google pieprasījumu, es
iesniedzu ļoti vienkāršu pieprasījumu Google lapai.
Un mana pieprasījuma piegādes procesā Google manā vārdā acīmredzot ir
iesniedzis daudz citu pieprasījumu.
Bet es esmu iesniedzis Google lapas saņemšanas pieprasījumu, un es
saņemu daudz 200 OK.
Es savā ekrānā neredzu 200 OK, taču saņemu daudz pieprasījumu.
Vēl viena lieta, par kuru esmu diezgan pārliecināts, ka darbosies,
ir — tie, kas patiešām ir no vecās skolas, jūs zināt, ka Facebook ne
vienmēr atradās vietnē Facebook.com.
Sākumā tas bija vietnē wwww.thefacebook.com.
Acīmredzot viņi kādu laiku nevarēja piekļūt vietnei Facebook.com.
Un tāpēc es šeit gaidu informāciju.
Un mēs redzēsim, vai tas izdosies.
Es šeit gaidu informāciju, ka Facebook ir neatgriezeniski pārcēlies
no vietnes thefacebook.com uz Facebook.com.
Tāpēc es gaidu, ka izstrādātāja rīkos es saņemšu 301 paziņojumu, ka
Facebook ir neatgriezeniski pārcēlies uz citu vietni.
Atkal, es neredzēšu 301 savā pārlūkprogrammas ekrānā.
Un, tā kā tas ir 301, tas ir pastāvīgs gājiens.
Mana pārlūkprogramma, tā kā tā ir moderna pārlūkprogramma, droši vien
mani novirzīs uz vietni Facebook.com.
Bet paskatīsimies, kas notiks.
Un tagad es došos uz thefacebook.com.
Un jā, tur tā tieši ir augšpusē.
Tā aizgāja, bet tā bija tur.
Ļaujiet man atritināt šeit uz augšu.
Tepat augšā.
Es iesniedzu pieprasījumu vietnei thefacebook.com, un es saņemu
atbildi, ka šī lapa ir neatgriezeniski pārvietota.
Un tad 307 šeit ir Internal Redirect.
Un tas ir tas, kas mani patiesībā pārvirzīja uz daudz pazīstamāku
www.facebook.com.
Tātad šie atbildes kodi joprojām notiek, pat ja mēs tos neredzam.
Es netaisos ilustrēt 401, 403, 404, jo jūs, iespējams, esat tos
redzējuši dažādās situācijās.
Un 500, es vienkārši būšu tāds - kā mums paveiktos, ja iegūtu 500, jo
mēs nezinām, kuri serveri pašlaik nekur nedarbojas.
Taču šie kodi pastāv, un ir veids, kā tiem piekļūt, pat ja mēs tos
savās sistēmās neredzam.
Es esmu Dags Loids.
Šis ir CS50.