QA_Bible
Search

⌃K

HTTP

HTTP (аМгл. HyperText Transfer Protocol - «прПтПкПл переЎачО гОпертекста») - прПтПкПл прОклаЎМПгП урПвМя переЎачО ЎаММых, ОзМачальМП - в вОЎе гОпертекстПвых ЎПкуЌеМтПв (тП есть ЎПкуЌеМтПв, кПтПрые ЌПгут сПЎержать ссылкО, пПзвПляющОе ПргаМОзПвать перехПЎ к ЎругОЌ ЎПкуЌеМтаЌ) в фПрЌате HTML, в МастПящее вреЌя ОспПльзуется Ўля переЎачО прПОзвПльМых ЎаММых.
ОсМПвПй HTTP является техМПлПгОя «клОеМт-сервер», тП есть преЎпПлагается существПваМОе:
  • ППтребОтелей (клОеМтПв), кПтПрые ОМОцООруют сПеЎОМеМОе О пПсылают запрПс;
  • ППставщОкПв (серверПв), кПтПрые ПжОЎают сПеЎОМеМОя Ўля пПлучеМОя запрПса, прПОзвПЎят МеПбхПЎОЌые ЎействОя О вПзвращают ПбратМП сППбщеМОе с результатПЌ.
HTTP ОспПльзуется также в качестве «траМспПрта» Ўля ЎругОх прПтПкПлПв прОклаЎМПгП урПвМя, такОх как SOAP, XML-RPC, WebDAV.
ОсМПвМыЌ ПбъектПЌ ЌаМОпуляцОО в HTTP является ресурс, Ма кПтПрый указывает URI (Uniform Resource Identifier) в запрПсе клОеМта. ОбычМП такОЌО ресурсаЌО являются храМящОеся Ма сервере файлы, МП ОЌО ЌПгут быть лПгОческОе Пбъекты ОлО чтП-тП абстрактМПе. ОсПбеММПстью прПтПкПла HTTP является вПзЌПжМПсть указать в запрПсе О Птвете спПсПб преЎставлеМОя ПЎМПгП О тПгП же ресурса пП разлОчМыЌ параЌетраЌ: фПрЌату, кПЎОрПвке, языку О т. ÐŽ. (в частМПстО, Ўля этПгП ОспПльзуется HTTP-загПлПвПк). ИЌеММП благПЎаря вПзЌПжМПстО указаМОя спПсПба кПЎОрПваМОя сППбщеМОя клОеМт О сервер ЌПгут ПбЌеМОваться ЎвПОчМыЌО ЎаММыЌО, хПтя ЎаММый прПтПкПл является текстПвыЌ.
HTTP - прПтПкПл прОклаЎМПгП урПвМя; аМалПгОчМыЌО еЌу являются FTP О SMTP. ОбЌеМ сППбщеМОяЌО ОЎёт пП ПбыкМПвеММПй схеЌе «запрПс-Птвет». Для ОЎеМтОфОкацОО ресурсПв HTTP ОспПльзует глПбальМые URI. В ПтлОчОе Пт ЌМПгОх ЎругОх прПтПкПлПв, HTTP Ме сПхраМяет свПегП сПстПяМОя (stateless). ЭтП ПзМачает ПтсутствОе сПхраМеМОя прПЌежутПчМПгП сПстПяМОя ЌежЎу параЌО «запрПс-Птвет». КПЌпПМеМты, ОспПльзующОе HTTP, ЌПгут саЌПстПятельМП Псуществлять сПхраМеМОе ОМфПрЌацОО П сПстПяМОО, связаММПй с пПслеЎМОЌО запрПсаЌО О ПтветаЌО (МапрОЌер, «кукО» Ма стПрПМе клОеМта, «сессОО» Ма стПрПМе сервера). Браузер, пПсылающОй запрПсы, ЌПжет ПтслежОвать заЎержкО ПтветПв. Сервер ЌПжет храМОть IP-аЎреса О загПлПвкО запрПсПв пПслеЎМОх клОеМтПв. ОЎМакП саЌ прПтПкПл Ме ПсвеЎПЌлёМ П преЎыЎущОх запрПсах О Птветах, в МёЌ Ме преЎусЌПтреМа вМутреММяя пПЎЎержка сПстПяМОя, к МеЌу Ме преЎъявляются такОе требПваМОя.
БПльшОМствП прПтПкПлПв преЎусЌатрОвает устаМПвлеМОе TCP-сессОО, в хПЎе кПтПрПй ПЎОМ раз прПОсхПЎОт автПрОзацОя, О ЎальМейшОе ЎействОя выпПлМяются в кПМтексте этПй автПрОзацОО. HTTP же устаМавлОвает ПтЎельМую TCP-сессОю Ма кажЎый запрПс; в бПлее пПзЎМОх версОях HTTP былП разрешеМП Ўелать МескПлькП запрПсПв в хПЎе ПЎМПй TCP-сессОО, МП браузеры ПбычМП запрашОвают тПлькП страМОцу О включеММые в Мее Пбъекты (картОМкО, каскаЎМые стОлО О т. п.), а затеЌ сразу разрывают TCP-сессОю. Для пПЎЎержкО автПрОзПваММПгП (МеаМПМОЌМПгП) ЎПступа в HTTP ОспПльзуются cookies; прОчеЌ такПй спПсПб автПрОзацОО пПзвПляет сПхраМОть сессОю Ўаже пПсле перезагрузкО клОеМта О сервера.
ПрО ЎПступе к ЎаММыЌ пП FTP ОлО пП файлПвыЌ прПтПкПлаЌ тОп файла (тПчМее, тОп сПЎержащОхся в МеЌ ЎаММых) ПпреЎеляется пП расшОреМОю ОЌеМО файла, чтП Ме всегЎа уЎПбМП. HTTP переЎ теЌ, как переЎать саЌО ЎаММые, переЎаёт загПлПвПк «Content-Type: тОп/пПЎтОп», пПзвПляющОй клОеМту ПЎМПзМачМП ПпреЎелОть, какОЌ ПбразПЌ Пбрабатывать прОслаММые ЎаММые. ЭтП ПсПбеММП важМП прО рабПте с CGI-скрОптаЌО, кПгЎа расшОреМОе ОЌеМО файла указывает Ме Ма тОп прОсылаеЌых клОеМту ЎаММых, а Ма МеПбхПЎОЌПсть запуска ЎаММПгП файла Ма сервере О ПтправкО клОеМту результатПв рабПты прПграЌЌы, запОсаММПй в этПЌ файле (прО этПЌ ПЎОМ О тПт же файл в завОсОЌПстО Пт аргуЌеМтПв запрПса О свПОх сПбствеММых сППбражеМОй ЌПжет пПрПжЎать Птветы разМых тОпПв - в прПстейшеЌ случае картОМкО в разМых фПрЌатах).
КрПЌе тПгП, HTTP пПзвПляет клОеМту прОслать Ма сервер параЌетры, кПтПрые буЎут переЎаМы запускаеЌПЌу CGI-скрОпту. Для этПгП же в HTML былО ввеЎеМы фПрЌы.
Структура HTTP-сППбщеМОя
КажЎПе HTTP-сППбщеМОе сПстПОт Оз трёх частей, кПтПрые переЎаются в указаММПЌ пПряЎке:
  1. 1.
    СтартПвая стрПка (аМгл. Starting line) - ПпреЎеляет тОп сППбщеМОя, разлОчается Ўля запрПса О Птвета;
  2. 2.
    ЗагПлПвкО (аМгл. Headers) - характерОзуют телП сППбщеМОя, параЌетры переЎачО О прПчОе свеЎеМОя;
  3. 3.
    ТелП сППбщеМОя (аМгл. Message Body) - МепПсреЎствеММП ЎаММые сППбщеМОя. ОбязательМП ЎПлжМП ПтЎеляться Пт загПлПвкПв пустПй стрПкПй.
Для версОО прПтПкПла 1.1 сППбщеМОе запрПса ПбязательМП ЎПлжМП сПЎержать загПлПвПк Host.
1. СтартПвая стрПка:
  • СтартПвая стрПка запрПса выгляЎОт так: МетПЎ URI HTTP/ВерсОя, гЎе:
    • МетПЎ (аМгл. Method) - тОп запрПса, ПЎМП слПвП заглавМыЌО букваЌО;
    • URI ПпреЎеляет путь к запрашОваеЌПЌу ЎПкуЌеМту;
    • ВерсОя (аМгл. Version) - пара разЎелеММых тПчкПй цОфр. НапрОЌер: 1.1.
    ЧтПбы запрПсОть страМОцу ЎаММПй статьО, клОеМт ЎПлжеМ переЎать стрПку (заЎаМ всегП ПЎОМ загПлПвПк):
    GET /wiki/HTTP HTTP/1.1
    Host: ru.wikipedia.org
  • СтартПвая стрПка Птвета сервера ОЌеет слеЎующОй фПрЌат: HTTP/ВерсОя КПЎСПстПяМОя ППясМеМОе, гЎе:
    • ВерсОя - пара разЎелеММых тПчкПй цОфр, как в запрПсе;
    • КПЎ сПстПяМОя (аМгл. Status Code) - трО цОфры. ПП кПЎу сПстПяМОя ПпреЎеляется ЎальМейшее сПЎержОЌПе сППбщеМОя О пПвеЎеМОе клОеМта;
    • ППясМеМОе (аМгл. Reason Phrase) - текстПвПе кПрПткПе пПясМеМОе к кПЎу Птвета Ўля пПльзПвателя. НОкак Ме влОяет Ма сППбщеМОе О является МеПбязательМыЌ.
    НапрОЌер, стартПвая стрПка Птвета сервера Ма преЎыЎущОй запрПс ЌПжет выгляЎеть так:
    HTTP/1.0 200 OK
2. ЗагПлПвкО: ЗагПлПвкО HTTP (аМгл. HTTP Headers) - этП стрПкО в HTTP-сППбщеМОО, сПЎержащОе разЎелёММую ЎвПетПчОеЌ пару параЌетр-зМачеМОе. ЀПрЌат загПлПвкПв сППтветствует ПбщеЌу фПрЌату загПлПвкПв текстПвых сетевых сППбщеМОй ARPA (сЌ. RFC 822). ЗагПлПвкО ЎПлжМы ПтЎеляться Пт тела сППбщеМОя хПтя бы ПЎМПй пустПй стрПкПй. ПрОЌеры загПлПвкПв:
  • Server: Apache/2.2.11 (Win32) PHP/5.3.0
  • Last-Modified: Sat, 16 Jan 2010 21:16:42 GMT
  • Content-Type: text/plain; charset=windows-1251
  • Content-Language: ru
В прОЌере выше кажЎая стрПка преЎставляет сПбПй ПЎОМ загПлПвПк. ПрО этПЌ тП, чтП МахПЎОтся ЎП ЎвПетПчОя, Мазывается ОЌеМеЌ (аМгл. name), а чтП пПсле МегП - зМачеМОеЌ (аМгл. value).
Все загПлПвкО разЎеляются Ма четыре ПсМПвМых группы:
  • General Headers («ОсМПвМые загПлПвкО») - ЌПгут включаться в любПе сППбщеМОе клОеМта О сервера;
  • Request Headers («ЗагПлПвкО запрПса») - ОспПльзуются тПлькП в запрПсах клОеМта;
  • Response Headers («ЗагПлПвкО Птвета») - тПлькП Ўля ПтветПв Пт сервера;
  • Entity Headers («ЗагПлПвкО сущМПстО») - сПпрПвПжЎают кажЎую сущМПсть сППбщеМОя.
ИЌеММП в такПЌ пПряЎке рекПЌеМЎуется пПсылать загПлПвкО пПлучателю.
Все МеПбхПЎОЌые Ўля фуМкцОПМОрПваМОя HTTP загПлПвкО ПпОсаМы в ПсМПвМых RFC. ЕслО Ме хватает существующОх, тП ЌПжМП ввПЎОть свПО. ТраЎОцОПММП к ОЌеМаЌ такОх ЎПпПлМОтельМых загПлПвкПв ЎПбавляют префОкс «X-» Ўля ОзбежаМОя кПМфлОкта ОЌёМ с вПзЌПжМП существующОЌО. НапрОЌер, как в загПлПвках X-Powered-By ОлО X-Cache. НекПтПрые разрабПтчОкО ОспПльзуют свПО ОМЎОвОЎуальМые префОксы. ПрОЌераЌО такОх загПлПвкПв ЌПгут служОть Ms-Echo-Request О Ms-Echo-Reply, ввеЎёММые кПрпПрацОей Microsoft Ўля расшОреМОя WebDAV. БПльше ЌПжМП узМать тут.
КакОе загПлПвкО важМы тестОрПвщОку: ПчевОЎМП, сЌПтря чтП Ќы тестОруеЌ. В ПсМПвМПЌ этП загПлПвкО, касающОеся автПрОзацОО, кук, кэша О юзер-агеМт, хПтя Ўля тПгП же security тестера ПМО буЎут ОМые. БПльше тут О тут.
Как сервер узМает, с какПгП тОпа устрПйства/браузера/ОС/языка вы Пткрываете веб-сайт (НапрОЌер, Ўля Adaptive design): кПгЎа вы Птправляете HTTP-запрПс, ПМ сПЎержОт в себе загПлПвкО (headers) с разлОчМПй ОМфПрЌацОей. ОЎМОЌ Оз МОх является User-Agent. ОМ сППбщает: браузер, егП версОю О язык, ЎвОжПк браузера, версОю ЎвОжка, ПперацОПММую сОстеЌу.
3. ТелП сППбщеМОя: ТелП HTTP-сППбщеМОя (message-body), еслО ПМП прОсутствует, ОспПльзуется Ўля переЎачО тела Пбъекта, связаММПгП с запрПсПЌ ОлО ПтветПЌ. ТелП сППбщеМОя ПтлОчается Пт тела Пбъекта (entity-body) тПлькП в тПЌ случае, кПгЎа прОЌеМяется кПЎОрПваМОе переЎачО, чтП указывается пПлеЌ загПлПвка Transfer-Encoding.
ППле Transfer-Encoding ЎПлжМП ОспПльзПваться Ўля указаМОя любПгП кПЎОрПваМОя переЎачО, прОЌеМеММПгП прОлПжеМОеЌ в целях гараМтОрПваМОя безПпасМПй О правОльМПй переЎачО сППбщеМОя. ППле Transfer-Encoding - этП свПйствП сППбщеМОя, а Ме Пбъекта, О, такОЌ ПбразПЌ, ЌПжет быть ЎПбавлеМП ОлО уЎалеМП любыЌ прОлПжеМОеЌ в цепПчке запрПсПв/ПтветПв.
ПравОла, устаМавлОвающОе ЎПпустОЌПсть тела сППбщеМОя в сППбщеМОО, ПтлОчМы Ўля запрПсПв О ПтветПв.
ПрОсутствОе тела сППбщеМОя в запрПсе ПтЌечается ЎПбавлеМОеЌ к загПлПвкаЌ запрПса пПля загПлПвка Content-Length ОлО Transfer-Encoding. ТелП сППбщеМОя ЌПжет быть ЎПбавлеМП в запрПс, тПлькП кПгЎа ЌетПЎ запрПса ЎПпускает телП Пбъекта.
Включается ОлО Ме включается телП сППбщеМОя в сППбщеМОе Птвета - завОсОт как Пт ЌетПЎа запрПса, так О Пт кПЎа сПстПяМОя Птвета. Все Птветы Ма запрПс с ЌетПЎПЌ HEAD Ме ЎПлжМы включать телП сППбщеМОя, Ўаже еслО прОсутствуют пПля загПлПвка Пбъекта (entity-header), заставляющОе пПверОть в прОсутствОе Пбъекта. НОкакОе Птветы с кПЎаЌО сПстПяМОя 1xx (ИМфПрЌацОПММые), 204 (Нет сПЎержОЌПгП, No Content), О 304 (Не ЌПЎОфОцОрПваМ, Not Modified) Ме ЎПлжМы сПЎержать тела сППбщеМОя. Все ЎругОе Птветы сПЎержат телП сППбщеМОя, Ўаже еслО ПМП ОЌеет Мулевую ЎлОМу.
МетПЎы HTTP
МетПЎ HTTP (аМгл. HTTP Method) - пПслеЎПвательМПсть Оз любых сОЌвПлПв, крПЌе управляющОх О разЎелОтелей, указывающая Ма ПсМПвМую ПперацОю МаЎ ресурсПЌ. ОбычМП ЌетПЎ преЎставляет сПбПй кПрПткПе аМглОйскПе слПвП, запОсаММПе заглавМыЌО букваЌО. ОбратОте вМОЌаМОе, чтП МазваМОе ЌетПЎа чувствОтельМП к регОстру.
Сервер ЌПжет ОспПльзПвать любые ЌетПЎы, Ме существует ПбязательМых ЌетПЎПв Ўля сервера ОлО клОеМта, крПЌе тПгП, прПграЌЌОст ЌПжет связать ЌетПЎ О выпПлМяеЌую фуМкцОю как угПЎМП егП фаМтазОО. ВП ОзбежаМОе хаПса существуют сПглашеМОя (тПт же REST) О стаМЎарты. ЀПрЌальМП еслО сервер Ме распПзМал указаММый клОеМтПЌ ЌетПЎ, тП ПМ ЎПлжеМ верМуть статус 501 (Not Implemented). ЕслО серверу ЌетПЎ ОзвестеМ, МП ПМ МепрОЌеМОЌ к кПМкретМПЌу ресурсу, тП вПзвращается сППбщеМОе с кПЎПЌ 405 (Method Not Allowed). В ПбПОх случаях серверу слеЎует включОть в сППбщеМОе Птвета загПлПвПк Allow сП спОскПЌ пПЎЎержОваеЌых ЌетПЎПв.
ОсМПвМыЌО О чаще всегП ОспПльзуеЌыЌО ЌетПЎаЌО являются GET, POST, PUT, DELETE кПтПрые эквОвалеМтМы базПвыЌ фуМкцОяЌ прО рабПте с БД ОлО любыЌО храМОЌыЌО вычОслОтельМыЌО сущМПстяЌО - CRUD (create, read, update, delete).
  • OPTIONS: ИспПльзуется Ўля ПпреЎелеМОя вПзЌПжМПстей веб-сервера ОлО параЌетрПв сПеЎОМеМОя Ўля кПМкретМПгП ресурса. В Птвет серверу слеЎует включОть загПлПвПк Allow сП спОскПЌ пПЎЎержОваеЌых ЌетПЎПв. Также в загПлПвке Птвета ЌПжет включаться ОМфПрЌацОя П пПЎЎержОваеЌых расшОреМОях. ПреЎпПлагается, чтП запрПс клОеМта ЌПжет сПЎержать телП сППбщеМОя Ўля указаМОя ОМтересующОх егП свеЎеМОй. ЀПрЌат тела О пПряЎПк рабПты с МОЌ в МастПящОй ЌПЌеМт Ме ПпреЎелеМ; сервер пПка ЎПлжеМ егП ОгМПрОрПвать. АМалПгОчМая сОтуацОя О с телПЌ в Птвете сервера. Для тПгП, чтПбы узМать вПзЌПжМПстО всегП сервера, клОеМт ЎПлжеМ указать в URI звёзЎПчку - «*». ЗапрПсы «OPTIONS * HTTP/1.1» ЌПгут также прОЌеМяться Ўля прПверкО рабПтПспПсПбМПстО сервера (аМалПгОчМП «пОМгПваМОю») О тестОрПваМОя Ма преЎЌет пПЎЎержкО серверПЌ прПтПкПла HTTP версОО 1.1. Результат выпПлМеМОя этПгП ЌетПЎа Ме кэшОруется;
  • GET: ИспПльзуется Ўля запрПса сПЎержОЌПгП указаММПгП ресурса. С пПЌПщью ЌетПЎа GET ЌПжМП также Мачать какПй-лОбП прПцесс. В этПЌ случае в телП ПтветМПгП сППбщеМОя слеЎует включОть ОМфПрЌацОю П хПЎе выпПлМеМОя прПцесса. КлОеМт ЌПжет переЎавать параЌетры выпПлМеМОя запрПса в URI целевПгП ресурса пПсле сОЌвПла «?»: GET /path/resource?param1=value1&param2=value2 HTTP/1.1. СПгласМП стаМЎарту HTTP, запрПсы тОпа GET счОтаются ОЎеЌпПтеМтМыЌО. КрПЌе ПбычМПгП ЌетПЎа GET, разлОчают ещё
    • УслПвМый GET - сПЎержОт загПлПвкО If-Modified-Since, If-Match, If-Range О пПЎПбМые;
    • ЧастОчМый GET - сПЎержОт в запрПсе Range.
    ППряЎПк выпПлМеМОя пПЎПбМых запрПсПв ПпреЎелеМ стаМЎартаЌО ПтЎельМП;
  • HEAD: АМалПгОчеМ ЌетПЎу GET, за ОсключеМОеЌ тПгП, чтП в Птвете сервера Птсутствует телП. ЗапрПс HEAD ПбычМП прОЌеМяется Ўля ОзвлечеМОя ЌетаЎаММых, прПверкО МалОчОя ресурса (валОЎацОя URL) О чтПбы узМать, Ме ОзЌеМОлся лО ПМ с ЌПЌеМта пПслеЎМегП ПбращеМОя. ЗагПлПвкО Птвета ЌПгут кэшОрПваться. ПрО МесПвпаЎеМОО ЌетаЎаММых ресурса с сППтветствующей ОМфПрЌацОей в кэше - кПпОя ресурса пПЌечается как устаревшая;
  • POST: ПрОЌеМяется Ўля переЎачО пПльзПвательскОх ЎаММых заЎаММПЌу ресурсу. НапрОЌер, в блПгах пПсетОтелО ПбычМП ЌПгут ввПЎОть свПО кПЌЌеМтарОО к запОсяЌ в HTML-фПрЌу, пПсле чегП ПМО переЎаются серверу ЌетПЎПЌ POST О ПМ пПЌещает Ох Ма страМОцу. ПрО этПЌ переЎаваеЌые ЎаММые (в прОЌере с блПгаЌО - текст кПЌЌеМтарОя) включаются в телП запрПса. АМалПгОчМП с пПЌПщью ЌетПЎа POST ПбычМП загружаются файлы Ма сервер. В ПтлОчОе Пт ЌетПЎа GET, ЌетПЎ POST Ме счОтается ОЎеЌпПтеМтМыЌ, тП есть ЌМПгПкратМПе пПвтПреМОе ПЎМОх О тех же запрПсПв POST ЌПжет вПзвращать разМые результаты (МапрОЌер, пПсле кажЎПй ПтправкО кПЌЌеМтарОя буЎет пПявляться ПчереЎМая кПпОя этПгП кПЌЌеМтарОя). ПрО результате выпПлМеМОя 200 (Ok) в телП Птвета слеЎует включОть сППбщеМОе Пб ОтПге выпПлМеМОя запрПса. ЕслО был сПзЎаМ ресурс, тП серверу слеЎует верМуть Птвет 201 (Created) с указаМОеЌ URI МПвПгП ресурса в загПлПвке Location. СППбщеМОе Птвета сервера Ма выпПлМеМОе ЌетПЎа POST Ме кэшОруется. СтПОт ПтЌетОть, чтП Ме всегЎа ЎаММые ЌПгут быть лОшь в теле;
  • PUT: ПрОЌеМяется Ўля загрузкО сПЎержОЌПгП запрПса Ма указаММый в запрПсе URI. ЕслО пП заЎаММПЌу URI Ме существует ресурса, тП сервер сПзЎаёт егП О вПзвращает статус 201 (Created). ЕслО же ресурс был ОзЌеМеМ, тП сервер вПзвращает 200 (Ok) ОлО 204 (No Content). Сервер Ме ЎПлжеМ ОгМПрОрПвать МекПрректМые загПлПвкО Content-*, переЎаваеЌые клОеМтПЌ вЌесте с сППбщеМОеЌ. ЕслО какПй-тП Оз этОх загПлПвкПв Ме ЌПжет быть распПзМаМ ОлО МеЎПпустОЌ прО текущОх услПвОях, тП МеПбхПЎОЌП верМуть кПЎ ПшОбкО 501 (Not Implemented). ЀуМЎаЌеМтальМПе разлОчОе ЌетПЎПв POST О PUT заключается в пПМОЌаМОО преЎМазМачеМОй URI ресурсПв. МетПЎ POST преЎпПлагает, чтП пП указаММПЌу URI буЎет прПОзвПЎОться ПбрабПтка переЎаваеЌПгП клОеМтПЌ сПЎержОЌПгП. ИспПльзуя PUT, клОеМт преЎпПлагает, чтП загружаеЌПе сПЎержОЌПе сППтветствует МахПЎящеЌуся пП ЎаММПЌу URI ресурсу. СППбщеМОя ПтветПв сервера Ма ЌетПЎ PUT Ме кэшОруются;
  • PATCH: АМалПгОчМП PUT, МП прОЌеМяется тПлькП к фрагЌеМту ресурса;
  • DELETE: УЎаляет указаММый ресурс;
  • TRACE: ВПзвращает пПлучеММый запрПс так, чтП клОеМт ЌПжет увОЎеть, какую ОМфПрЌацОю прПЌежутПчМые серверы ЎПбавляют ОлО ОзЌеМяют в запрПсе;
  • CONNECT: ПреПбразует сПеЎОМеМОе запрПса в прПзрачМый TCP/IP-туММель, ПбычМП чтПбы сПЎействПвать устаМПвлеМОю защОщеММПгП SSL-сПеЎОМеМОя через МешОфрПваММый прПксО.
РазлОчОя ЌетПЎПв GET О POST
ОсМПвМПе сПстПОт в спПсПбе переЎачО ЎаММых веб-фПрЌы ПбрабатывающеЌу скрОпту, а ОЌеММП:
  • МетПЎ GET Птправляет скрОпту всю сПбраММую ОМфПрЌацОю фПрЌы как часть URL: http://www.komtet.ru/script.php?login=admin&name=komtet
  • МетПЎ POST переЎает ЎаММые такОЌ ПбразПЌ, чтП пПльзПватель сайта уже Ме вОЎОт переЎаваеЌые скрОпту ЎаММые: http://www.komtet.ru/script.php
КрПЌе тПгП:
  • КПлОчествП ОМфПрЌацОО, переЎаваеЌПй ЌетПЎПЌ GET через URL стрПку ПграМОчеМП 2048 сОЌвПлаЌО (ЌОМус служебМая ОМфПрЌацОя браузера);
  • СтраМОцу, сгеМерОрПваММую ЌетПЎПЌ GET, ЌПжМП ЎПбавОть в заклаЎкО О пПЎелОться ссылкПй;
  • Sensitive data в такПЌ ПткрытПЌ вОЎе ПчевОЎМП плПхП влОяют Ма безПпасМПсть;
  • МетПЎ POST в ПтлОчОе Пт ЌетПЎа GET пПзвПляет переЎавать запрПсу файлы;
  • ПрО ОспПльзПваМОО ЌетПЎа GET существует рОск тПгП, чтП пПОскПвый рПбПт ЌПжет выпПлМОть тПт ОлО ОМПй Пткрытый запрПс.
КПЎы сПстПяМОя
КПЎ сПстПяМОя является частью первПй стрПкО Птвета сервера. ОМ преЎставляет сПбПй целПе чОслП Оз трёх цОфр. Первая цОфра указывает Ма класс сПстПяМОя. За кПЎПЌ Птвета ПбычМП слеЎует ПтЎелеММая прПбелПЌ пПясМяющая фраза Ма аМглОйскПЌ языке, кПтПрая разъясМяет челПвеку прОчОМу ОЌеММП такПгП Птвета. ПрОЌеры:
  • 201 Webpage Created;
  • 403 Access allowed only for registered users;
  • 507 Insufficient Storage.
КлОеМт узМаёт пП кПЎу Птвета П результатах егП запрПса О ПпреЎеляет, какОе ЎействОя еЌу преЎпрОМОЌать Ўальше. НабПр кПЎПв сПстПяМОя является стаМЎартПЌ, О ПМО ПпОсаМы в сППтветствующОх ЎПкуЌеМтах RFC. ВвеЎеМОе МПвых кПЎПв ЎПлжМП прПОзвПЎОться тПлькП пПсле сПгласПваМОя с IETF. КлОеМт ЌПжет Ме зМать все кПЎы сПстПяМОя, МП ПМ ПбязаМ ПтреагОрПвать в сППтветствОО с классПЌ кПЎа.
В МастПящее вреЌя выЎелеМП пять классПв кПЎПв сПстПяМОя.
КПЎ
Класс
НазМачеМОе
100-е (1ХХ)
ИМфПрЌацОПММый
(аМгл. informational)
ИМфПрЌОрПваМОе П прПцессе переЎачО.
В HTTP/1.0 - сППбщеМОя с такОЌО кПЎаЌО ЎПлжМы ОгМПрОрПваться.
В HTTP/1.1 - клОеМт ЎПлжеМ быть гПтПв прОМять этПт класс сППбщеМОй как ПбычМый Птвет, МП МОчегП Птправлять серверу Ме МужМП.
СаЌО сППбщеМОя Пт сервера сПЎержат тПлькП стартПвую стрПку Птвета О, еслО требуется, МескПлькП спецОфОчМых Ўля Птвета пПлей загПлПвка. ПрПксО-серверы пПЎПбМые сППбщеМОя ЎПлжМы Птправлять Ўальше Пт сервера к клОеМту.
200-е (2ХХ)
Успех
(аМгл. Success)
ИМфПрЌОрПваМОе П случаях успешМПгП прОМятОя О ПбрабПткО запрПса клОеМта. В завОсОЌПстО Пт статуса, сервер ЌПжет ещё переЎать загПлПвкО О телП сППбщеМОя.
300-е (3ХХ)
ПереМаправлеМОе
(аМгл. Redirection)
СППбщает клОеМту, чтП Ўля успешМПгП выпПлМеМОя ПперацОО МеПбхПЎОЌП сЎелать ЎругПй запрПс (как правОлП пП ЎругПЌу URI). Из ЎаММПгП класса пять кПЎПв 301, 302, 303, 305 О 307 ПтМПсятся МепПсреЎствеММП к переМаправлеМОяЌ (реЎОрект). АЎрес, пП кПтПрПЌу клОеМту слеЎует прПОзвестО запрПс, сервер указывает в загПлПвке Location. ПрО этПЌ ЎПпускается ОспПльзПваМОе фрагЌеМтПв в целевПЌ URI.
400-е (4ХХ)
ОшОбка клОеМта
(аМгл. Client Error)
УказаМОе ПшОбПк сП стПрПМы клОеМта. ПрО ОспПльзПваМОО всех ЌетПЎПв, крПЌе HEAD, сервер ЎПлжеМ верМуть в теле сППбщеМОя гОпертекстПвПе пПясМеМОе Ўля пПльзПвателя.
500-е (5ХХ)
ОшОбка сервера
(аМгл. Server Error)
ИМфПрЌОрПваМОе П случаях МеуЎачМПгП выпПлМеМОя ПперацОО пП вОМе сервера. Для всех сОтуацОй, крПЌе ОспПльзПваМОя ЌетПЎа HEAD, сервер ЎПлжеМ включать в телП сППбщеМОя ПбъясМеМОе, кПтПрПе клОеМт ПтПбразОт пПльзПвателю.
ППлМый перечеМь ЌПжМП МайтО тут. ДаММые ЎОапазПМы ПпреЎелеМы в стаМЎартах, ПЎМакП МОчегП Ме Ќешает в пПвсеЎМевМПй жОзМО увОЎеть О МеПфОцОальМые, еще О еще.
ППчеЌу ПшОбка 404 ПтМПсОтся к 4 - клОеМтскПй, еслО пП ОМтуОтОвМП ЎПлжМа быть серверМПй? ОбъясМяется этП теЌ, чтП сервер рабПтает О гПтПв верМуть страМОцу в Птвет Ма запрПс, ПЎМакП страМОцы пП запрашОваеЌПЌу аЎресу у МегП пПпрПсту Мет. ТакОЌ ПбразПЌ, вОМы сервера в этПЌ Мет О преЎпПлагается Ппечатка в URL, кПтПрая является вОМПй клОеМта. В этПЌ вПпрПсе сбОвает с тПлку тП, чтП ПшОбка 404 частП вПзвращается, кПгЎа страМОца была переЌещеМа ОлО уЎалеМа, ОлО Ме сПвпаЎает ОЌя файла в кПЎе О Ма сервере. ТПгЎа кПрректМее пПказывать ПшОбкО 301 Moved Permanently (переЌещеМП), чтП ЌПжМП МастрПОть в кПМфОгурацОО бПльшОМства серверПв, лОбП прПОзвПЎОть переМаправлеМОе Ма ЎругПй URL, О вПзвращать кПЎ 410 Gone (уЎалеМП). ОЎМакП, так как этО Ўва варОаМта требуют спецОальМПй МастрПйкО сервера, бПльшОМствП веб-сайтПв Ме ОспПльзуют Ох.
На какПй ЌетПЎ Ме ЌПжет верМуться ПшОбка 501? The HTTP 501 Not Implemented серверМый кПЎ Птвета Ма ПшОбку указывает, чтП ЌетПЎ запрПса Ме пПЎЎержОвается серверПЌ О Ме ЌПжет быть ПбрабПтаМ. ЕЎОМствеММыЌО ЌетПЎаЌО, кПтПрые МеПбхПЎОЌы сервераЌ Ўля пПЎЎержкО (О, слеЎПвательМП, Ме ЎПлжМы вПзвращать этПт кПЎ), являются GET О HEAD.
ОтлОчОя HTTP/1.1 Пт HTTP/2.0
11 февраля 2015 гПЎа ПпублОкПваМы фОМальМые версОО черМПвОка слеЎующей версОО прПтПкПла. В ПтлОчОе Пт преЎыЎущОх версОй, прПтПкПл HTTP/2 является бОМарМыЌ. СреЎО ключевых ПсПбеММПстей: ЌультОплексОрПваМОе запрПсПв, расстаМПвка прОПрОтетПв Ўля запрПсПв, сжатОе загПлПвкПв, загрузка МескПлькОх элеЌеМтПв параллельМП пПсреЎствПЌ ПЎМПгП TCP-сПеЎОМеМОя, пПЎЎержка прПактОвМых push-увеЎПЌлеМОй сП стПрПМы сервера. ППЎрПбМее тут.
HTTP3
ДесятОлетОяЌО весь ОМтерМет Ўержался Ма TCP, МП ПМ Мачал устаревать еще в кПМце 2000-х. ЕгП преЎпПлагаеЌая заЌеМа, МПвый траМспПртМый прПтПкПл пПЎ МазваМОеЌ QUIC, МастПлькП ПтлОчается Пт TCP пП ключевыЌ пуМктаЌ, чтП прПстП ОспПльзПвать пПверх МегП HTTP/2 былП бы ПчеМь слПжМП. ППэтПЌу саЌ пП себе HTTP/3 - этП ПтМПсОтельМП МезМачОтельМПе ОзЌеМеМОе HTTP/2 Ўля аЎаптацОО к МПвПЌу прПтПкПлу QUIC. ВПт ПМ-тП как раз О сПЎержОт те фОчО, кПтПрые всех прОвПЎят в вПстПрг.
https://hsto.org/r/w1560/webt/nb/71/n2/nb71n20vpyaiwsjwnafwhl1pxx4.png
TCP, кПтПрый Ќы ОспПльзПвалО с первых ЎМей ОМтерМета, ОзМачальМП был сПзЎаМ Ме Ма ЌаксОЌуЌе эффектОвМПстО, пПэтПЌу МаЌ О стал МужеМ QUIC. НапрОЌер, TCP требует рукПпПжатОе Ўля устаМПвкО МПвПгП сПеЎОМеМОя, чтПбы прПверОть, чтП клОеМт О сервер существуют О гПтПвы ПбЌеМОваться ЎаММыЌО. НужМП сЎелать пПлМый кругПвПй путь пП сетО, прежЎе чеЌ ЌПжМП буЎет Ўелать чтП-тП ещё. ЕслО клОеМт О сервер МахПЎятся ЎалекП, вреЌя кругПвПгП путО (round-trip time, RTT) ЌПжет сПставОть бПлее 100 Ќс, чтП прОвПЎОт к ПщутОЌыЌ заЎержкаЌ.
ВтПрПй прОЌер: TCP вОЎОт все ЎаММые, кПтПрые переЎает, как ПЎОМ «файл», ОлО пПтПк байтПв, Ўаже еслО Ќы переЎаеЌ МескПлькП файлПв ПЎМПвреЌеММП (МапрОЌер, загружаеЌ страМОцу с МескПлькОЌО ресурсаЌО). На практОке этП ПзМачает, чтП, еслО пакеты TCP с ЎаММыЌО ПЎМПгП файла теряются, все ПстальМые файлы буЎут жЎать вПсстаМПвлеМОя этОх пакетПв. ЭтП так МазываеЌая блПкОрПвка Мачала ПчереЎО - head-of-line (HoL) blocking. На практОке с этОЌО МеЎПстаткаЌО ЌПжМП бПрПться (ОМаче зачеЌ бы Ќы ЌучОлОсь с TCP целых 30 с лОшМОЌ лет), МП ПМО серьезМП влОяют Ма прПтПкПлы верхМегП урПвМя, МапрОЌер, HTTP.
На саЌПЌ Ўеле МаЌ МужеМ был Ме HTTP/3, а TCP/2. ПрПстП в прПцессе у Мас саЌ сПбПй пПлучОлся HTTP/3. Всё тП, чегП Ќы с такОЌ МетерпеМОеЌ жЎеЌ Пт HTTP/3 (быстрая устаМПвка сПеЎОМеМОя, ЌеМьше блПкОрПвПк HoL, ЌОграцОя сПеЎОМеМОя О т. ÐŽ.), - Ма саЌПЌ Ўеле уже реалОзПваМП в QUIC.
QUIC
QUIC - этП уМОверсальМый траМспПртМый прПтПкПл. Как О TCP, ПМ ЌПжет О буЎет ОспПльзПваться в разМых сцеМарОях, Ме тПлькП Ўля HTTP О загрузкО сайтПв. НапрОЌер, пПверх QUIC ЌПжМП прОстрПОть DNS, SSH, SMB, RTP О так Ўалее. Давайте узМаеЌ П QUIC чуть бПльше, веЎь ОЌеММП с МОЌ связаМы ЌМПгОе заблужЎеМОя пП пПвПЎу HTTP/3.
Вы, МаверМПе, слышалО, чтП QUIC рабПтает пПверх еще ПЎМПгП прПтПкПла - UDP. ЭтП правЎа, МП прПОзвПЎОтельМПсть тут МО прО чёЌ. В ОЎеале QUIC ЌПг бы быть пПлМПстью МезавОсОЌыЌ траМспПртМыЌ прПтПкПлПЌ сразу МаЎ IP в стеке, как Ма картОМке выше.
НП тПгЎа вПзМОклО бы те же слПжМПстО, чтП О прО пПпытке развОвать TCP: прОшлПсь бы сМачала ПбМПвОть все устрПйства в ОМтерМете, чтПбы ПМО распПзМавалО О разрешалО QUIC. К счастью, Ќы ЌПжеЌ разЌестОть QUIC пПверх еще ПЎМПгП распрПстраМеММПгП прПтПкПла траМспПртМПгП урПвМя: UDP.
ММПгОе гПвПрят, чтП HTTP/3 сПзЎаМ пПверх UDP в целях прПОзвПЎОтельМПстО. ЯкПбы HTTP/3 рабПтает быстрее, пПтПЌу чтП, как О UDP, Ме устаМавлОвает сПеЎОМеМОе О Ме жЎет пПвтПрМПй переЎачО пакетПв. Не верьте. Мы уже сказалО, чтП UDP ОспПльзуется прПтПкПлПЌ QUIC, а зМачОт О HTTP/3, в МаЎежЎе, чтП так Ох буЎет прПще разверМуть, веЎь UDP уже зМают О ОспПльзуют пПчтО все устрПйства в ОМтерМете.
РаспПлПжеММый пПверх UDP, QUIC, пП сутО, реалОзует пПчтО все фуМкцОО, кПтПрые Ўелают TCP такОЌ эффектОвМыЌ О пПпулярМыЌ (пусть О чуть бПлее ЌеЎлеММыЌ) прПтПкПлПЌ. QUIC абсПлютМП МаЎежеМ - ПМ ОспПльзует пПЎтвержЎеМОе пПлучеММых пакетПв О пПвтПрМые переЎачО, чтПбы ЎПбрать тП, чтП пПтерялПсь. QUIC пП-прежМеЌу устаМавлОвает сПеЎОМеМОе О ОспПльзует слПжМую сОстеЌу рукПпПжатОй.
НакПМец, QUIC ОспПльзует ЌехаМОзЌы flow-control О congestion-control, кПтПрые Ме Ўают ПтправОтелю перегрузОть сеть ОлО пПлучателя, МП заЌеЎляют TCP пП сравМеМОю «чОстыЌ» UDP. ПравЎа QUIC реалОзует этО фуМкцОО уЌМее О эффектОвМее. В МёЌ сПбраМы ЎесятОлетОя Ппыта О лучшОх практОк TCP О МПвые фуМкцОО.
HTTPS
У HTTP есть ПЎОМ МеЎПстатПк: ЎаММые переЎаются в ПткрытПЌ вОЎе О МОкак Ме защОщеМы. На путО Оз тПчкО А в тПчку Б ОМфПрЌацОя в ОМтерМете прПхПЎОт через ЎесяткО прПЌежутПчМых узлПв, О, еслО хПть ПЎОМ Оз МОх МахПЎОтся пПЎ кПМтрПлеЌ злПуЌышлеММОка, ЎаММые ЌПгут перехватОть. ТП же саЌПе ЌПжет прПОзПйтО, кПгЎа вы пПльзуетесь МезащОщеММПй сетью Wi-Fi, МапрОЌер, в кафе. Для устаМПвкО безПпасМПгП сПеЎОМеМОя ОспПльзуется прПтПкПл HTTPS с пПЎЎержкПй шОфрПваМОя.
HTTPS (аббр. Пт аМгл. HyperText Transfer Protocol Secure) - расшОреМОе прПтПкПла HTTP Ўля пПЎЎержкО шОфрПваМОя в целях пПвышеМОя безПпасМПстО. ДаММые в прПтПкПле HTTPS переЎаются пПверх крОптПграфОческОх прПтПкПлПв TLS ОлО устаревшегП в 2015 гПЎу SSL.
HTTPS Ме является ПтЎельМыЌ прПтПкПлПЌ. ЭтП ПбычМый HTTP, рабПтающОй через шОфрПваММые траМспПртМые ЌехаМОзЌы SSL О TLS. ОМ ПбеспечОвает защОту Пт атак, ПсМПваММых Ма прПслушОваМОО сетевПгП сПеЎОМеМОя - Пт сМОфферскОх атак О атак тОпа man-in-the-middle, прО услПвОО, чтП буЎут ОспПльзПваться шОфрующОе среЎства О сертОфОкат сервера прПвереМ О еЌу ЎПверяют.
ПП уЌПлчаМОю HTTPS URL ОспПльзует 443 TCP-пПрт (Ўля МезащОщеММПгП HTTP - 80). ЧтПбы пПЎгПтПвОть веб-сервер Ўля ПбрабПткО https-сПеЎОМеМОй, аЎЌОМОстратПр ЎПлжеМ пПлучОть О устаМПвОть в сОстеЌу сертОфОкат ПткрытПгП О закрытПгП ключа Ўля этПгП веб-сервера. В TLS ОспПльзуется как асОЌЌетрОчМая схеЌа шОфрПваМОя (Ўля вырабПткО ПбщегП секретМПгП ключа), так О сОЌЌетрОчМая (Ўля ПбЌеМа ЎаММыЌО, зашОфрПваММыЌО ПбщОЌ ключПЌ). СертОфОкат ПткрытПгП ключа пПЎтвержЎает прОМаЎлежМПсть ЎаММПгП ПткрытПгП ключа влаЎельцу сайта. СертОфОкат ПткрытПгП ключа О саЌ Пткрытый ключ пПсылаются клОеМту прО устаМПвлеМОО сПеЎОМеМОя; закрытый ключ ОспПльзуется Ўля расшОфрПвкО сППбщеМОй Пт клОеМта.
Существует вПзЌПжМПсть сПзЎать такПй сертОфОкат, Ме Пбращаясь в цеМтр сертОфОкацОО. ППЎпОсываются такОе сертОфОкаты этОЌ же сертОфОкатПЌ О Мазываются саЌПпПЎпОсаММыЌО (self-signed). Без прПверкО сертОфОката какОЌ-тП ЎругОЌ спПсПбПЌ (МапрОЌер, звПМПк влаЎельцу О прПверка кПМтрПльМПй суЌЌы сертОфОката) такПе ОспПльзПваМОе HTTPS пПЎвержеМП атаке пПсреЎМОка.
Эта сОстеЌа также ЌПжет ОспПльзПваться Ўля аутеМтОфОкацОО клОеМта, чтПбы ПбеспечОть ЎПступ к серверу тПлькП автПрОзПваММыЌ пПльзПвателяЌ. Для этПгП аЎЌОМОстратПр ПбычМП сПзЎает сертОфОкаты Ўля кажЎПгП пПльзПвателя О загружает Ох в браузер кажЎПгП пПльзПвателя. Также буЎут прОМОЌаться все сертОфОкаты, пПЎпОсаММые ПргаМОзацОяЌО, кПтПрыЌ ЎПверяет сервер. ТакПй сертОфОкат ПбычМП сПЎержОт ОЌя О аЎрес электрПММПй пПчты автПрОзПваММПгП пПльзПвателя, кПтПрые прПверяются прО кажЎПЌ сПеЎОМеМОО, чтПбы прПверОть лОчМПсть пПльзПвателя без ввПЎа парПля.
В HTTPS Ўля шОфрПваМОя ОспПльзуется ЎлОМа ключа 40, 56, 128 ОлО 256 бОт. НекПтПрые старые версОО браузерПв ОспПльзуют ЎлОМу ключа 40 бОт (прОЌер тПЌу - IE версОй ЎП 4.0), чтП связаМП с экспПртМыЌО ПграМОчеМОяЌО в СКА. ДлОМа ключа 40 бОт Ме является МаЎежМПй. ММПгОе сПвреЌеММые сайты требуют ОспПльзПваМОя МПвых версОй браузерПв, пПЎЎержОвающОх шОфрПваМОе с ЎлОМПй ключа 128 бОт, с целью ПбеспечОть ЎПстатПчМый урПвеМь безПпасМПстО. КОфрПваМОе с ЎлОМПй ключа 128 бОт зМачОтельМП затруЎМяет пПЎбПр парПлей О ЎПступ к лОчМПй ОМфПрЌацОО.
ТраЎОцОПММП Ма ПЎМПЌ IP-аЎресе ЌПжет рабПтать тПлькП ПЎОМ HTTPS-сайт. Для рабПты МескПлькОх HTTPS-сайтПв с разлОчМыЌО сертОфОкатаЌО прОЌеМяется расшОреМОе TLS пПЎ МазваМОеЌ Server Name Indication (SNI).
ИЎеМтОфОкацОя в HTTPS:
  • ИЎеМтОфОкацОя сервера: HTTP/TLS запрПсы геМерОруются путёЌ разыЌеМПваМОя URI, вслеЎствОе чегП ОЌя хПста стаМПвОтся ОзвестМП клОеМту. В Мачале ПбщеМОя, сервер пПсылает клОеМту свПй сертОфОкат, чтПбы клОеМт ОЎеМтОфОцОрПвал егП. ЭтП пПзвПляет преЎПтвратОть атаку пПсреЎМОка. В сертОфОкате указывается URI сервера. СПгласПваМОе ОЌеМО хПста О ЎаММых, указаММых в сертОфОкате, прПОсхПЎОт в сППтветствОО с прПтПкПлПЌ RFC2459. ЕслО ОЌя сервера Ме сПвпаЎает с указаММыЌ в сертОфОкате, тП пПльзПвательскОе прПграЌЌы, МапрОЌер браузеры, сППбщают Пб этПЌ пПльзПвателю. В ПсМПвМПЌ, браузеры преЎПставляют пПльзПвателю выбПр: прПЎПлжОть МезащОщёММПе сПеЎОМеМОе ОлО прервать егП.
  • ИЎеМтОфОкацОя клОеМта: ОбычМП сервер Ме распПлагает ОМфПрЌацОей П клОеМте, ЎПстатПчМПй Ўля егП ОЎеМтОфОкацОО. ОЎМакП Ўля ПбеспечеМОя пПвышеММПй защОщеММПстО сПеЎОМеМОя ОспПльзуется так МазываеЌая two-way authentication. ПрО этПЌ сервер пПсле пПЎтвержЎеМОя егП сертОфОката клОеМтПЌ также запрашОвает сертОфОкат. ТакОЌ ПбразПЌ, схеЌа пПЎтвержЎеМОя клОеМта аМалПгОчМа ОЎеМтОфОкацОО сервера.
ИстПчМОкО:
ДПп. ЌатерОал: