ቤት / የተለያዩ / እንዴት ማግኘት በ http ውስጥ ይሰራል። ጥያቄዎችን ይለጥፉ እና ያግኙ ፣ በመካከላቸው ያለው ልዩነት ምንድነው እና የትኛው የተሻለ ነው እና ለምን ዓላማዎች? HTTP ፕሮቶኮል. መግቢያ

እንዴት ማግኘት በ http ውስጥ ይሰራል። ጥያቄዎችን ይለጥፉ እና ያግኙ ፣ በመካከላቸው ያለው ልዩነት ምንድነው እና የትኛው የተሻለ ነው እና ለምን ዓላማዎች? HTTP ፕሮቶኮል. መግቢያ

ይህ እና የሚከተሉት ክፍሎች ፒኤችፒን በመጠቀም መሰረታዊ የድር መተግበሪያዎችን እንዴት መፍጠር እንደሚችሉ በአጭሩ ይሸፍናሉ። በክፍል ውስጥ የተብራራው ነገር ማመልከቻዎ ከተጠቃሚው ጋር ለመገናኘት እና ባከናወናቸው ተግባራት ወይም በገባባቸው መመዘኛዎች ላይ በመመስረት ለማዘጋጀት በቂ እንዳልሆነ ግልጽ ነው። ምን የጎደለው ነገር አለ? የተጠቃሚ ውሂብ ግብዓት እንዴት ማደራጀት እና ይህን ውሂብ ወደ አገልጋዩ ማስተላለፍ እንደሚቻል ላይ በቂ እውቀት የለም። ደህና፣ በአገልጋዩ ላይ የተቀበሉትን መረጃዎች በፕሮግራም እንዴት ማካሄድ እንዳለቦት አስቀድሞ መሰረታዊ እውቀት ሊኖርዎት ይገባል።

የኤችቲቲፒ ጥያቄ ዘዴዎች እና መመዘኛዎቻቸው

ማንኛውም ተለዋዋጭ የድር መተግበሪያ በእሱ ውስጥ በገቡት መለኪያዎች ወይም በደንበኛው በኩል በተደረጉት ድርጊቶች መሰረት ለተጠቃሚው ምላሽ ይሰጣል. ብዙውን ጊዜ አገልጋዩን ማግኘት ወደ ሁለት ዓይነት ጥያቄዎች ይወርዳል፡ የGET ዘዴን ወይም የPOST ዘዴን በመጠቀም። በእነዚህ ሁለት የጥያቄ ዓይነቶች መካከል ስላለው ልዩነት ጥቂት ቃላት።

የማግኘት ዘዴ፡-

    መለኪያዎቹ በኤችቲቲፒ ጥያቄ ራስጌ ውስጥ ተልከዋል፣ ስለዚህ በ ውስጥ ይታያሉ የትእዛዝ መስመር, እና እንደዚህ አይነት ጥያቄ በዕልባቶች ውስጥ ሊቀመጥ ይችላል. የራስጌው ጠቅላላ ርዝመት የተገደበ ስለሆነ GET ን በመጠቀም ያለፉ የመለኪያዎች ብዛት እና ርዝመትም የተገደበ ነው።

    በተከታታይ የተፈጸሙ በርካታ ተመሳሳይ የGET ጥያቄዎች ውጤቶች ተመሳሳይ መሆን አለባቸው ተብሎ ይታመናል።

የPOST ዘዴ፡-

    የጥያቄ መለኪያዎች በ HTTP ጥያቄ አካል ውስጥ ተላልፈዋል፣ ስለዚህ በትእዛዝ መስመር ላይ አይገኙም። የመለኪያዎች ብዛት እና መጠን ያልተገደበ ነው.

    የበርካታ ተመሳሳይ የPOST ጥያቄዎች ውጤቶች የተለያዩ እሴቶችን ሊመልሱ እንደሚችሉ ይታመናል ምክንያቱም የታለመውን ነገር ባህሪያት ሊለውጡ ይችላሉ.

በዒላማው የመረጃ አወቃቀሮች ላይ ለውጦችን ማድረግ በማይኖርበት ጊዜ በመለኪያዎች መሰረት የመረጃ ምንጭን ይዘቶች ለማውጣት የGET ዘዴ ጥቅም ላይ መዋል አለበት እና ጥያቄውን (ዩአርኤል) በዕልባቶች ውስጥ ማስቀመጥ ምክንያታዊ ነው። የGET ዘዴ የPOST ዘዴን በመጠቀም ከተመሳሳይ ጥያቄዎች በበለጠ ፍጥነት ማከናወን ይችላል።

ወደ አገልጋዩ የተላለፉ መለኪያዎችን ከዩአርኤል መደበቅ ሲፈልጉ የPOST ዘዴ ጥቅም ላይ መዋል አለበት። ይህ ዘዴ ደግሞ መለኪያዎች ውስጥ እነዚህን ለውጦች መግለጫ በማለፍ, ዒላማ ሀብት ይዘት ላይ ለውጥ ጥያቄዎች ላይ መዋል አለበት (ጥያቄው አካል ውስጥ).

ወደ ሀብት የሚወስደው መንገድ?parameter1=value1¶meter2=value2&…

ግቤቶችን ለመሙላት ልዩ የኤችቲኤምኤል ቅጽ ከሌልዎት ፣ ከዚያ በቀጥታ በአሳሹ የትእዛዝ መስመር ላይ የሙከራ መለኪያዎችን በማለፍ የ PHP መተግበሪያዎን ማረም ይችላሉ ።

Http://site/php-samples/sql.php?sql=ከd_staff ይምረጡ

በአገልጋዩ በኩል የጥያቄ መለኪያዎችን ለመድረስ ዓለም አቀፍ ድርድሮችን መጠቀም አለብዎት $_GETእና $_POSTበቅደም ተከተል. መተግበሪያዎ በየትኛው ዘዴ እንደሚደረስ ግድ ከሌለው፣ ድርድር መጠቀም አለብዎት $_ጥያቄየ$_GET እና $_POST ድርድሮችን ዳታ የሚያጣምር፣ ለምሳሌ እንደዚህ፡-

$sql = isset($_REQUEST["sql")]? $_REQUEST["sql"]:"";

በዚህ ምሳሌ, ፕሮግራሙ የ "sql" መለኪያ መተላለፉን ይወስናል: አዎ ከሆነ, እሴቱን ለተዛማጅ ተለዋዋጭ ይመድባል, እና ካልሆነ, ባዶ እሴት ይመድባል.

የኤችቲቲፒ ጥያቄ መለኪያዎችን በኤችቲኤምኤል ቅጽ መግለፅ

እርግጥ ነው, በአሳሽ ትዕዛዝ መስመር ውስጥ መለኪያዎችን በእጅ መግለጽ በጣም ምቹ አይደለም. ይህ ዘዴ የድር መተግበሪያዎች እርስ በርስ በሚገናኙበት ጊዜ የኤችቲቲፒ ጥያቄዎችን በፕሮግራም ለማስፈጸም ተስማሚ ነው። በደንበኛው በኩል የመነሻ ማረጋገጫን ለማስገባት እና ለማከናወን HTML ቅጾችን እና . ከታች አንድ ምሳሌ ነው በጣም ቀላሉ ቅጽ, የጽሑፍ ግቤት (ዋጋ) የገባበት, በኋላም እንደ የPOST ዘዴ መለኪያ ወደ አገልጋዩ ይተላለፋል.

ዘዴ = "ፖስት" ድርጊት ='sql.php'> SQL፡

የቅጹ ኤለመንት ዘዴ ባህሪ መረጃን ወደ አገልጋዩ (ማግኘት ወይም መለጠፍ) የማስተላለፊያ ዘዴን የሚወስንበትን ዘዴ ይገልጻል። የድርጊት ባህሪው ይገልጻል php ፋይል , ይህም ጥያቄውን ያስኬዳል. ተቆጣጣሪው የአሁኑ ፋይል መሆን ካለበት የድርጊት ባህሪው መጨመር አያስፈልገውም። ዋጋቸው እንደ ኤችቲቲፒ ጥያቄ ልኬት መተላለፍ ላለባቸው ሁሉም ንጥረ ነገሮች ለስም ባህሪው ልዩ እሴት መግለጽ አለብዎት። የባህሪው ዋጋ ነው። ስምይሆናል። ኢንዴክስበ$_GET፣ $_POST ወይም $_REQUEST ድርድሮች (ከላይ ያለውን ምሳሌ ይመልከቱ)። አንድ አዝራር በመጫን ላይ አስረክብቅጹን ከሁሉም የገቡ እሴቶች ጋር ወደ አገልጋዩ ይልካል ።

የ PHP POST ጥያቄን ለማከናወን የመጀመሪያው ዘዴ file_get_contents ን መጠቀም ነው። ሁለተኛው ዘዴ ከሌሎች ሁለት ተግባራት ጋር በማጣመር ፍሬን ይጠቀማል. ሁለቱም አማራጮች የሚፈለጉትን የጥያቄ ርእስ መስኮች ለመሙላት የstream_context_create ተግባርን ይጠቀማሉ።

ኮድ ማብራሪያ

የ$sPD ተለዋዋጭ የሚተላለፈውን ውሂብ ይዟል። በ HTTP ጥያቄ ሕብረቁምፊ ቅርጸት መሆን አለበት፣ ስለዚህ አንዳንድ ልዩ ቁምፊዎች መመሳጠር አለባቸው።

በሁለቱም የፋይል_get_contents ተግባር እና የፍሬድ ተግባር ሁለት አዳዲስ መመዘኛዎች አሉን። የመጀመሪያው የአጠቃቀም_አካተት_መንገድ ነው። የኤችቲቲፒ ጥያቄ እየጠየቅን ስለሆነ በሁለቱም ምሳሌዎች ሐሰት ይሆናል። የአካባቢውን መርጃ ለማንበብ ወደ እውነት ሲዋቀር ተግባሩ ፋይሉን በ ማካተት_መንገድ ላይ ይፈልጋል።

ሁለተኛው ግቤት አውድ ነው፣ እሱም በstream_context_create መመለሻ ዋጋ የተሞላ፣ የ$aHTTP አደራደር ዋጋ የሚወስድ ነው።

የPOST ጥያቄዎችን ለማድረግ file_get_contents በመጠቀም

በPHP ውስጥ file_get_contents ን በመጠቀም የPOST ጥያቄን ለመላክ፣ የራስጌ መስኮቹን እራስዎ ለመሙላት stream_context_createን መጠቀም እና የትኛውን “መጠቅለያ” መጠቀም እንዳለቦት መግለጽ ያስፈልግዎታል። በዚህ ጉዳይ ላይ HTTP፡

$sURL = "http://brugbart.com/Examples/http-post.php"; // ዩአርኤል ይለጥፉ $sPD = "ስም=ያዕቆብ&bench=150"; // POST data $aHTTP = ድርድር ("http" => // የሚጠቀመው ድርድር ("ዘዴ"=ፖስት"፣// የመጠየቅ ዘዴ // የጥያቄ ራስጌዎች ከዚህ በታች ተቀምጠዋል "ራስጌ" => "ይዘት" - ዓይነት፡ መተግበሪያ/x-www-form-urlencoded፣ “ይዘት” => $sPD)); $ አውድ = ዥረት_context_create($aHTTP); $contents = file_get_contents($sURL፣ ሐሰት፣ $ አውድ); አስተጋባ $ ይዘቶች;

የPOST ጥያቄዎችን ለመፈጸም ፍሬን መጠቀም

የPOST ጥያቄዎችን ለማድረግ የፍሬድ ተግባሩን መጠቀም ይችላሉ። የሚከተለው ምሳሌ አስፈላጊውን የኤችቲቲፒ ጥያቄ ራስጌዎችን ለማዘጋጀት stream_context_createን ይጠቀማል፡-

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "ስም=ያዕቆብ&bench=150"; // POST data $aHTTP = ድርድር ("http" => // ጥቅም ላይ የሚውለው መጠቅለያ("ዘዴ"=ፖስት") - ዓይነት፡ መተግበሪያ/x-www-form-urlencoded፣ “ይዘት” => $sPD)); $ አውድ = ዥረት_context_create($aHTTP); $handle = ፎፔን($sURL፣ "r"፣ ሐሰት፣ $ አውድ); $content = ""; ሳለ (! feof($handle)) ($contents = fread($handle, 8192);) fclose($handle); አስተጋባ $ ይዘቶች;

በPHP የGET ጥያቄዎችን ማድረግ

አሁን ፍሬድ እና ፋይል_get_contents በመጠቀም ከበይነመረቡ በ HTTP እና HTTPS ይዘትን ለማውረድ እናተኩራለን። በዚህ ጽሑፍ ውስጥ የተገለጹትን ዘዴዎች ለመጠቀም የ fopen wrappers አማራጭን ማንቃት አለብዎት. ይህንን ለማድረግ በphp.ini ፋይል ውስጥ የ allow_url_fopen ግቤትን ወደ On ማቀናበር ያስፈልግዎታል።

በPHP ውስጥ የPOST እና GET ጥያቄዎችን ማከናወን ወደ ድረ-ገጾች ለመግባት፣ የድረ-ገጽ ይዘትን ለማውጣት ወይም አዲስ የመተግበሪያዎች ስሪቶችን ለማየት ይጠቅማል። ቀላል የኤችቲቲፒ ጥያቄዎችን እንዴት ማድረግ እንዳለብን እንገልፃለን።

ፋይሎችን በበይነመረብ ለማውረድ ወይም ለመቀበል ፍሬን በመጠቀም

ያስታውሱ የድረ-ገጽ ንባብ በጥቅሉ ተደራሽ ክፍል ላይ ብቻ የተገደበ ነው። ስለዚህ የ stream_get_contents ተግባርን መጠቀም ያስፈልግዎታል ( ከፋይል_ግኝ_ይዘት ጋር ተመሳሳይ) ወይም የፋይሉ መጨረሻ እስኪደርስ ድረስ ይዘቱን በትናንሽ ቁርጥራጮች ለማንበብ ለተወሰነ ጊዜ ሉፕ፡-

በዚህ የPHP POST ጥያቄን ለማስተናገድ፣የፍሬድ ተግባር የመጨረሻው ነጋሪ እሴት ከቁራጭ መጠን ጋር እኩል ነው። በአጠቃላይ ከ 8192 መብለጥ የለበትም ( 8*1024 ).

የሚያመሳስላቸው ነገር በተመሳሳይ መንገድ መስራታቸው ነው። በእነሱ መካከል በቴክኒካል ምንም ልዩነት የለም. ግን የርዕዮተ ዓለም ልዩነቶች አሉ።

በ PHP አውድ ውስጥ ስለ እነርሱ እናገራለሁ. እባክዎን ያስተውሉ የኤችቲቲፒ ፕሮቶኮል በተዘዋዋሪ ከPHP ጋር የተዛመደ ነው ምክንያቱም ኤችቲኤምኤል ገጾችን ለመለዋወጥ ስለተፈጠረ እና ፒኤችፒ በቀላሉ የሁለቱንም አቅም ያሰፋዋል ።

የGET ጥያቄ ውሂብ ለመቀበል ጥቅም ላይ ይውላል እና POST ለመላክ ይጠቅማል። (በቴክኒካል እነሱ ተመሳሳይ እንደሚሠሩ አስታውስ).

ስለዚ፡ በ PHP አውድ፡ በዚህ ርዕዮተ ዓለም መሰረት፡ የሚከተለውን አድርገናል።
1. PHP በጀመርክ ቁጥር ሱፐርግሎባል ድርድር ($_GET፣ $_POST) በነባሪነት ይፈጠራሉ።
2. በመጠይቁ ሕብረቁምፊ ውስጥ የጥያቄ ምልክት (?) ካለ። ሁሉም ነገር ግምት ውስጥ ከገባ በኋላ መለኪያዎችየGET ጥያቄ፣ በ"ቁልፍ" =" እሴት" ቅርጸት ቀርበዋል እና የ ampersand ቁምፊ (&) እንደ ገደብ ጥቅም ላይ ይውላል።
ለምሳሌ፥
GET /index.php?ስም=አንድሬ&የአያት ስም=ጋልኪን።
ይህ የመጠይቅ ሕብረቁምፊ ነው፣ 2 መለኪያዎች አሉ። እነዚህ መለኪያዎች ወደ $_GET ድርድር ውስጥ ይገባሉ።
3. $_POST በተለየ መንገድ ተሞልቷል። የዚህ ድርድር ይዘት ከ "ጥያቄ ራስጌዎች" ተሞልቷል. ከእይታ በግልጽ ከተደበቀ ቦታ ማለት ነው። አሳሹ እንደዚህ አይነት ራስጌዎችን ለመፍጠር ሁሉንም ስራዎች ይንከባከባል. ምንም እንኳን አንዳንድ ጊዜ አንድ ነገር በአርእስቶች ውስጥ በእጅ ተስተካክሏል.

ብዙውን ጊዜ የፖስታ ጥያቄ በቅጾች (ውሂብ ለመላክ) ጥቅም ላይ ይውላል።

ለምሳሌ, በ 2 መስኮች የመግቢያ ቅጽ አለን: መግቢያ እና የይለፍ ቃል.

የGET ዘዴን እየተጠቀምን እንደሆነ እናስብ። ከዚያም ቅጹን ስናስገባ ወደሚከተለው አድራሻ እንሄዳለን /login.php?login=Andrey&password=123 እንደዚህ አይነት መረጃ ማስተላለፍ ምንም ደህንነቱ የተጠበቀ እንዳልሆነ ይስማማሉ። ማንኛውም ሰው አሳሽዎን ከፍቶ የጣቢያውን አድራሻ ማስገባት ሲጀምር የይለፍ ቃላትዎን እና መግቢያዎችዎን ከታሪክ ማየት ይችላል።

ነገር ግን የPOST ዘዴን ከገለፅን የሚከተለውን ጥያቄ ይደርስልናል፡
POST /login.php (login=Andrey&password=123) በቅንፍ ውስጥ ያለው ነገር ይደበቃል እና በአሳሹ ውስጥ በምንም መልኩ አይቀመጥም።

ለማጠቃለል፡-
GET የተወሰነ ገጽ መግባት ነው። የተወሰነ ቅጽ(መደርደር፣ የአሁኑ ገጽብሎግ ፣ የፍለጋ አሞሌ ፣ ወዘተ.)
POST - የገጹን ማሳያ የማይነካ ውሂብን ለመላክ ፣ይህ ውሂብ የስክሪፕቱን ውጤት (መግቢያ ፣ የይለፍ ቃሎች ፣ የክሬዲት ካርድ ቁጥሮች ፣ መልዕክቶች ፣ ወዘተ) ላይ ብቻ ተጽዕኖ ያሳድራል ።

እና ሌላ መልካም ዜና ለምሳሌ ሊጣመሩ ይችላሉ
POST /index.php?page=login (login=Andrey&password=123) ከዚህ ምን እንደሚመጣ እና የትኞቹ መለኪያዎች ወደ የትኛው ድርድር እንደሚገቡ በበቂ ሁኔታ የገለጽኩኝ ይመስለኛል።

ውስጥ ሰሞኑንየPOST እና የGET ጥያቄዎችን በመፍጠር ርዕስ ላይ እንዲሁም በርዕሱ ላይ ያሉ ጥያቄዎችን በዋናው የPHPClub መድረክ ላይ ጥያቄዎችን እያየሁ ነው፡- “የራስጌ ተግባርን በመጠቀም የPOST ጥያቄን እንዴት ማመንጨት እችላለሁ።” በአጠቃቀም ውስጥ "i" ን ነጥብ ማድረግ አስፈላጊ እንደሆነ አምናለሁ ይህ ቴክኖሎጂጀማሪ ፕሮግራመሮች በቀላሉ የድሩን መርሆች ስለማይረዱ። ስለዚህ፣ በኤችቲቲፒ ፕሮቶኮል አለም ውስጥ ጉዟችንን እንጀምር።

1. HTTP ፕሮቶኮል. መግቢያ

አንድ ትንሽ ነገር ወዲያውኑ ግልጽ ማድረግ እፈልጋለሁ.

አስፈሪው የቃል ፕሮቶኮል ከብዙ ሰዎች ስምምነት ያለፈ አይደለም፣ ልክ በአንድ ጥሩ ጊዜ ሰዎች “በዚህ መንገድ እናድርገው፣ ከዚያ ሁሉም ነገር መልካም ይሆናል” ብለው ወሰኑ። ምንም የሚያስፈራ ነገር የለም, ሁሉም ነገር በቀላሉ አስጸያፊ ነው እና አሁን ይህን ውርደት እናሳያለን. ስለዚህ የኤችቲቲፒ ፕሮቶኮል ምንድን ነው እና ለምን ጥቅም ላይ ይውላል?

በአለም ውስጥ እና በተለይም በፕሮግራም እና በበይነመረብ ውስጥ ምንም ተአምራት የሉም!

ይህንን እንደ የማይናወጥ እውነት ተቀበሉ። እና, ፕሮግራሙ የማይሰራ ከሆነ ወይም እንደተፈለገው የማይሰራ ከሆነ, ምናልባት, ምናልባት, በስህተት የተጻፈ ወይም ስህተቶችን ይዟል. ስለዚህ አሳሹ አገልጋዩን ማንኛውንም ነገር እንዲልክ እንዴት ይጠይቃል?

አዎ ፣ በጣም ቀላል! ትንሽ ዘና ማለት እና በሂደቱ መደሰት መጀመር ብቻ ያስፈልግዎታል :-)

1.2. የመጀመሪያውን የኤችቲቲፒ ጥያቄያችንን በመጻፍ ላይ

  • ሁሉም ነገር በጣም የተወሳሰበ ነው ብለው ካሰቡ ተሳስተሃል። ሰው የተነደፈው እሱ በቀላሉ የተወሳሰበ ነገር ለመፍጠር በማይችል መንገድ ነው ፣ ካልሆነ ግን እሱ ራሱ በውስጡ ግራ ይጋባል :-) ስለዚህ ፣ አሳሽ አለ እና የድር አገልጋይ አለ።
  • አሳሹ ሁል ጊዜ የመረጃ ልውውጥ አስጀማሪ ነው። የድር አገልጋይ የሆነ ነገር ወደ አሳሹ እንዲልክ በቀላሉ ለማንም አይልክም - አሳሹ መጠየቅ አለበት።
  • ቀላሉ የኤችቲቲፒ ጥያቄ ይህን ሊመስል ይችላል።
  • http://www.php.net/ HTTP/1.0\r\n\r\n ያግኙ
GET (ከእንግሊዝኛ የተተረጎመ "ማግኘት" ማለት ነው) - የጥያቄ አይነት; የጥያቄው አይነት ሊለያይ ይችላል, ለምሳሌ POST, HEAD, PUT, DELETE (አንዳንዶቹን ከታች እንመለከታለን). http://www.php.net/ - ዩአርአይ (አድራሻ) ከእሱ ቢያንስ አንዳንድ መረጃዎችን መቀበል የምንፈልግበት (በተፈጥሮ, የኤችቲኤምኤል ገጹን ለመማር ተስፋ እናደርጋለን). HTTP/1.0 ከአገልጋዩ ጋር ስንገናኝ የምንጠቀመው የፕሮቶኮል አይነት እና ስሪት ነው።

\r\n የመስመሩ መጨረሻ ነው, እሱም ሁለት ጊዜ መደገም አለበት, ለምን ትንሽ ቆይቶ ግልጽ ይሆናል.

ይህን ጥያቄ በቀላሉ ማከናወን ይችላሉ። የ telnet.exe ፕሮግራሙን ያሂዱ፣ www.php.netን እንደ አስተናጋጅ ያስገቡ፣ ወደብ 80 ይግለጹ እና በቀላሉ አስገባን ሁለት ጊዜ \r\n\r\n በመጫን ይፃፉ። በምላሹ HTML ኮድ ይደርስዎታል

መነሻ ገጽ ጣቢያ www.php.net.

  • 1.3 የጥያቄ መዋቅርየኤችቲቲፒ ጥያቄ ምን እንደሚያካትት እንመልከት።
  • ሁሉም ነገር በጣም ቀላል ነው። የኤችቲቲፒ ጥያቄ ሙሉ በሙሉ ትርጉም ያለው ጽሑፍ በመሆኑ እንጀምር። በአጠቃላይ ሁኔታ ውስጥ ምን ያካትታል? የኤችቲቲፒ 1.0 ፕሮቶኮልን እንመለከታለን። ስለዚህ፡-

  • ጥያቄ-መስመር[አጠቃላይ-ራስጌ | ጥያቄ-ራስጌ | አካል-ራስጌ ]\r\n[ አካል-አካል ]
  • ጥያቄ-መስመር- የመለኪያዎች ስብስብ ካለው ገጽ ጋር ዘመድ ወይም ፍፁም አገናኝ፣ ለምሳሌ /index.html ወይም http://www.myhost.ru/index.html ወይም /index.html?a=1&b=qq።
  • በኋለኛው ጉዳይ ላይ አገልጋዩ ከተለዋዋጮች a እና b ጋር ከተዛማጅ እሴቶች ጋር ጥያቄ ይላካል ፣ እና “&” ምልክት - አምፐርሳንድ - በመለኪያዎች መካከል እንደ መለያየት ያገለግላል። HTTP-ስሪት

- የኤችቲቲፒ ፕሮቶኮል ስሪት ፣ በእኛ ሁኔታ "HTTP/1.0"።

በGET እና POST ሂደት ዘዴዎች ላይ በጣም ፍላጎት አለን። በGET ዘዴ በቀላሉ መለኪያዎችን ወደ ስክሪፕቱ ማስተላለፍ ይችላሉ፣ እና በPOST ዘዴ የቅጽ ማስረከቢያን መኮረጅ ይችላሉ። ለGET ዘዴ፣ Request-URI ይህን ሊመስል ይችላል፡-

  • "/index.html?param1=1¶m2=2"አጠቃላይ-ራስጌ
    - የርዕሱ ዋና ክፍል.
    ቅርጸት፡-
  • ሁለት መለኪያዎች ብቻ ሊኖሩት ይችላሉ፡ ቀን ወይም ፕራግማ። ቀን - የግሪንዊች ቀን በ "የሳምንት ቀን, የቀን ወር አመት HH:MM:SS GMT" ቅርጸት, ለምሳሌ "ማክሰኞ ህዳር 15 ቀን 1994 08:12:31 ጂኤምቲ" - ጥያቄው የተፈጠረበት ቀን.ፕራግማ አንድ ነጠላ መሸጎጫ የሌለው እሴት ሊኖረው ይችላል፣ ይህም የገጽ መሸጎጫን ያሰናክላል።

    ጥያቄ-ራስጌ - ጥያቄውን የሚገልጽ የራስጌ ክፍል።.
    ጥያቄ-ራስጌ የሚከተሉት መለኪያዎች ሊኖሩት ይችላል፡

  • ፍቀድ፣ ፈቃድ፣ ከ፣ ከተቀየረ- ጀምሮ፣ አጣቃሽ፣ የተጠቃሚ-ወኪል።በዚህ ምእራፍ ውስጥ የፈቀዳ ልኬትን አንመለከትም ፣ ምክንያቱም እሱ ብዙ ጊዜ የማይፈለግ የግል ሀብቶችን ለማግኘት ጥቅም ላይ ይውላል።
    በwww.w3c.org ላይ የተፈቀደ የመዳረሻ ራስጌ እንዴት ማመንጨት እንደሚችሉ ማወቅ ይችላሉ።
    ፍቀድ
  • - ተቀባይነት ያላቸውን የማቀነባበሪያ ዘዴዎችን ያዘጋጃል. - ቅርጸት፡ "ፍቀድ፡ አግኝ | HEAD\n"።በጥያቄ-መስመር ውስጥ የPOST ሂደት ዘዴን ሲገልጹ መለኪያው ችላ ይባላል። ተቀባይነት ያላቸውን የጥያቄ ማቀነባበሪያ ዘዴዎችን ይገልጻል።
    ተኪ አገልጋዮች የፍቀድ መለኪያውን አያሻሽሉም እና ሳይለወጥ ወደ አገልጋዩ ይደርሳል።
    የኢሜል አድራሻጥያቄውን የላከው.
  • ቅርጸት፡ "ከ፡ adderss\r\n"ለምሳሌ "ከ:
    [ኢሜል የተጠበቀ]
    \r\n።
  • ከተቀየረ - ጀምሮ- ጥያቄው ከእንደዚህ አይነት እና ከእንደዚህ አይነት ጊዜ ጀምሮ እንዳልተሻሻለ ያመለክታል.
    ፎርማት፡ "If-Modified-Sance: date\r\n"
    ለ GET ማቀነባበሪያ ዘዴ ብቻ ጥቅም ላይ ይውላል. ቀኑ በጂኤምቲ ውስጥ በጠቅላላ-ርዕስ ውስጥ ካለው የቀን መለኪያ ጋር በተመሳሳይ መልኩ ተገልጿል.
  • አጣቃሽ- ጥያቄው ከተጀመረበት ገጽ ጋር ፍጹም አገናኝ ፣ ማለትም ተጠቃሚው ወደ እኛ የመጣበት ገጽ አገናኝ።
    ቅርጸት፡ "ማጣቀሻ፡ url\n"።
  • ምሳሌ፡ "ማጣቀሻ፡ www.host.ru/index.html\n"።ተጠቃሚ-ወኪል
    ይህ የጥያቄው ክፍል የገጹን አካል የሚገልጹ መለኪያዎችን ይገልጻል። አካል-ራስጌ የሚከተሉትን መለኪያዎች ሊይዝ ይችላል፡- ፍቀድ፣ የይዘት ኢንኮዲንግ፣ የይዘት-ርዝመት፣ የይዘት አይነት፣ ጊዜው ያበቃል፣ ለመጨረሻ ጊዜ የተሻሻለው፣ ቅጥያ-ራስጌ.
  • ፍቀድ፣ ፈቃድ፣ ከ፣ ከተቀየረ- ጀምሮ፣ አጣቃሽ፣ የተጠቃሚ-ወኪል።- ከጠቅላይ-ራስጌ ፍቀድ ጋር ተመሳሳይ የሆነ ግቤት።
  • ይዘት-ኢንኮዲንግ- የውሂብ ኢንኮዲንግ አይነት አካል-አካል.
    ቅርጸት፡ "ይዘት-መቀየሪያ፡ x-gzip | x-compress | ሌላ ዓይነት\n"።
    ምሳሌ፡ "ይዘት-ኢኮዲንግ፡ x-gzip\n" የ "|" ባህሪ "ወይም" የሚለው ቃል ማለትም ይህ ወይም ያ ወይም ያ, ወዘተ.
    ሌላ ዓይነት ውሂቡ እንዴት እንደተቀመጠ ሊያመለክት ይችላል፣ ለምሳሌ ለPOST ዘዴ፡- "Content-Encoding: application/x-www-form-urlencoded\n"።
  • የይዘት-ርዝመት- ወደ ህጋዊ አካል የተላከው ባይት ብዛት። የይዘት-ርዝመት እሴቱ በ MIME ቅርጸት ለሚላከው መረጃ ሙሉ ለሙሉ የተለየ ትርጉም አለው፣ይህም የመረጃውን ክፍል - “ውጫዊ/አካል-አካል”ን ለመግለጽ እንደ መለኪያ ሆኖ ያገለግላል።
    ትክክለኛ ቁጥሮች ከዜሮ እና ከዚያ በላይ የሆኑ ኢንቲጀሮች ናቸው።
  • ምሳሌ፡ "የይዘት-ርዝመት፡ 26457\n"የይዘት አይነት
    - የሚተላለፉ የውሂብ አይነት.
  • ለምሳሌ፡ "የይዘት አይነት፡ ጽሑፍ/html\n"።ጊዜው ያበቃል
    - ገጹ ከአሳሹ መሸጎጫ መወገድ ያለበት ጊዜ።
  • ቅርጸት፡ " ጊዜው ያበቃል፡ ቀን\n" የቀን ቅርጸቱ ከአጠቃላይ-ራስጌ የቀን መለኪያ የቀን ቅርጸት ጋር ተመሳሳይ ነው።ለመጨረሻ ጊዜ የተሻሻለው
    - የተላለፈው ውሂብ የመጨረሻ ለውጥ ጊዜ።
  • ቅርጸት፡ "መጨረሻ የተሻሻለው፡ ቀን\n"። የቀን ቅርጸቱ ከአጠቃላይ-ራስጌ የቀን መለኪያ የቀን ቅርጸት ጋር ተመሳሳይ ነው።ቅጥያ-ራስጌ
    - የራስጌው አካል ፣ ለምሳሌ ፣ በአሳሽ ወይም ሰነዱ በሚቀበለው ሌላ ፕሮግራም እንዲሰራ የታሰበ ሊሆን ይችላል። በዚህ ክፍል ውስጥ የእርስዎን መለኪያዎች በ "ParameterName: parametervalue\n" ቅርጸት መግለጽ ይችላሉ. የደንበኛው ፕሮግራም እነሱን እንዴት እንደሚሠራ ካላወቀ እነዚህ መለኪያዎች ችላ ይባላሉ።

ለምሳሌ: "ኩኪ: r=1\r\n" - ለገጹ የታወቁ ኩኪዎችን ያዘጋጃል.

እና አሁን, ከእንደዚህ አይነት አስፈሪ ቃላት በኋላ, ትንሽ ለማረጋጋት እና የሚያስፈልገንን ለመረዳት እንሞክር? በተፈጥሮ, በምሳሌዎች እንረዳለን.

ኩኪዎችን በማለፍ ከጣቢያው ላይ አንድ ገጽ ማግኘት እንዳለብን እናስብ ፣ ካልሆነ ግን እንደ ያልተጋበዙ እንግዶች እንልካለን ፣ እና በተጨማሪ ፣ ይህንን ገጽ እንዲጎበኙ የተፈቀደልዎ የዋናውን ገጽ ከጎበኙ በኋላ ብቻ እንደሆነ ይታወቃል ። ጣቢያ.

2 GET ዘዴ

ጥያቄያችንን እንፃፍ።
http://www.site.ru/news.html HTTP/1.0\r\n ያግኙ

አስተናጋጅ: www.site.ru\r\n
ኩኪ፡ ገቢ=1\r\n

ይህ ጥያቄ የገጹን ይዘቶች በ http://www.site.ru/news.html የGET ዘዴን በመጠቀም ማግኘት እንደምንፈልግ ይነግረናል። የአስተናጋጁ መስክ ይህ ገጽ በ www.site.ru አገልጋይ ላይ እንደሚገኝ ይጠቁማል ፣ የማጣቀሻ መስኩ ከጣቢያው ዋና ገጽ ለዜና እንደመጣን ያሳያል ፣ እና የኩኪ መስክ እንደዚህ እና እንደዚህ ያለ ኩኪ እንደተመደብን ያሳያል። ለምንድነው አስተናጋጅ፣ ዋቢ እና የኩኪ መስኮች በጣም አስፈላጊ የሆኑት? ምክንያቱም መደበኛ ፕሮግራመሮች ተለዋዋጭ ጣቢያዎችን ሲፈጥሩ በስክሪፕት (PHP ን ጨምሮ) በተለዋዋጭ መልክ የሚታዩትን የመረጃ መስኮችን ያረጋግጡ። ይህ ለምንድነው? እንደ ቅደም ተከተል, ለምሳሌ, ጣቢያው እንዳይሰረቅ ለመከላከል, ማለትም.

በእሱ ላይ በራስ-ሰር ለማውረድ ፕሮግራም አላዘጋጁም ፣ ወይም ጣቢያውን የሚጎበኝ ሰው ሁል ጊዜ ከዋናው ገጽ ብቻ እንዲያገኝ ፣ ወዘተ.

አሁን በገጹ ላይ ያሉትን የቅጽ መስኮች መሙላት እና ከቅጹ ላይ ጥያቄ መላክ እንዳለብን እናስብ, በዚህ ቅጽ ውስጥ ሁለት መስኮች ይኑር: መግቢያ እና የይለፍ ቃል (መግቢያ እና የይለፍ ቃል) - እና በእርግጥ, መግቢያውን እናውቃለን. እና የይለፍ ቃል.
http://www.site.ru/news.html HTTP/1.0\r\n ያግኙ
አግኝ http://www.site.ru/news.html?login=Petya%20Vasechkin&password=qq HTTP/1.0\r\n
አስተናጋጅ: www.site.ru\r\n
ኩኪ፡ ገቢ=1\r\n

ማጣቀሻ፡ http://www.site.ru/index.html\r\n የእኛ መግቢያ "ፔትያ ቫሴችኪን" ነው ለምን Petya%20Vasechkin እንጽፋለን? ምክንያቱም ልዩ ቁምፊዎች በአገልጋዩ ሊታወቁ ስለሚችሉ እንደ አዲስ መለኪያ ወይም የጥያቄው መጨረሻ ወዘተ ምልክቶች ናቸው. ስለዚህ በጥያቄው ውስጥ የስህተት ሁኔታዎችን ለማስወገድ የመለኪያ ስሞችን እና እሴቶቻቸውን ለመቅዳት ስልተ ቀመር አለ።ሙሉ መግለጫ

የዚህ ስልተ ቀመር ሊገኝ ይችላል፣ እና በPHP ውስጥ እንደቅደም ተከተላቸው የመቀየሪያ እና የመግለጫ ተግባራት rawurlencode እና rawurldecode አሉ። ኢንኮድ የተደረገባቸው መለኪያዎች በጥያቄው ውስጥ ከተላለፉ ፒኤችፒ ዲኮዲንግ በራሱ እንደሚሰራ ማስተዋል እፈልጋለሁ። ይህ ከኤችቲቲፒ ፕሮቶኮል ጋር የማውቀውን የመጀመሪያ ምዕራፍ ያጠናቅቃል። በሚቀጥለው ምዕራፍ እንደ POST ያሉ የግንባታ ጥያቄዎችን እንመለከታለን (ከእንግሊዝኛ የተተረጎመው "መላክ" ተብሎ የተተረጎመ) ሲሆን ይህም የበለጠ አስደሳች ይሆናል, ምክንያቱም ከኤችቲኤምኤል ቅጾች መረጃን በሚልኩበት ጊዜ ጥቅም ላይ የሚውለው የጥያቄ አይነት ነው።

3. የPOST ዘዴ.

3.1 የይዘት አይነት፡ መተግበሪያ/x-www-ፎርም-urlencoded።

ባለፈው ምዕራፍ ላይ የተብራራውን የመግቢያ እና የይለፍ ቃል ለማስተላለፍ ከ GET ጥያቄያችን ጋር ተመሳሳይ የሆነ ጥያቄ እንጽፋለን፡


http://www.site.ru/news.html HTTP/1.0\r\n ያግኙ
አግኝ http://www.site.ru/news.html?login=Petya%20Vasechkin&password=qq HTTP/1.0\r\n
አስተናጋጅ: www.site.ru\r\n
የይዘት አይነት፡ መተግበሪያ/x-www-ፎርም-urlencoded\r\n
የይዘት ርዝመት፡ 35\r\n
ኩኪ፡ ገቢ=1\r\n

እዚህ የይዘት አይነት እና የይዘት-ርዝመት የራስጌ መስኮችን የመጠቀም ምሳሌ እንመለከታለን። የይዘት-ርዝመት የውሂብ ቦታው ስንት ባይት እንደሚይዝ ይነግራል፣ይህም ከራስጌው በተለየ የመስመር መግቻ \r\n። ነገር ግን ከዚህ ቀደም ለGET ጥያቄ በጥያቄ-URI ውስጥ የተቀመጡት መለኪያዎች አሁን በህጋዊ አካል ውስጥ ናቸው። እነሱ በተመሳሳይ መንገድ እንደተፈጠሩ ማየት ይቻላል, ከርዕሱ በኋላ ብቻ መጻፍ ያስፈልግዎታል. አንድ ተጨማሪ ነገር መጠቆም እፈልጋለሁአስፈላጊ ነጥብ

, ምንም ነገር አይከለክልም, በአንድ ጊዜ በህጋዊ አካል ውስጥ ካሉት የመለኪያዎች ስብስብ ጋር, መለኪያዎችን ከሌሎች ስሞች ጋር በጥያቄ-ዩአርአይ ውስጥ ማስቀመጥ, ለምሳሌ:
.....
ኩኪ፡ ገቢ=1\r\n
ይለጥፉ http://www.site.ru/news.html?type=user HTTP/1.0\r\n

መግቢያ=ፔትያ%20Vasechkin&password=qq

3.2 የይዘት ዓይነት፡ ባለብዙ ክፍል/ቅጽ-ውሂብ

የበይነመረብ አለም ፋይሎችን በቅጽ መላክ ጥሩ እንደሆነ እንደተረዳ፣ የW3C ጥምረት የPOST ጥያቄ ፎርማትን ለማጣራት ተዘጋጀ። በዚያን ጊዜ የ MIME ቅርጸት (ሁለገብ የበይነመረብ መልእክት ቅጥያዎች - የመልእክት መልእክቶችን ለማመንጨት ሁለገብ ፕሮቶኮል ማራዘሚያዎች) ቀድሞውኑ በሰፊው ጥቅም ላይ ውሏል ፣ ስለሆነም መንኮራኩሩን እንደገና ላለመፍጠር ፣ የዚህን መልእክት ማመንጨት ቅርጸት በከፊል ለመጠቀም ወስነናል ። የPOST ጥያቄዎች በ HTTP ፕሮቶኮል ውስጥ።

በዚህ ቅርጸት እና በመተግበሪያው/x-www-ፎርም-urlencoded አይነት መካከል ያሉት ዋና ዋና ልዩነቶች ምንድን ናቸው?

ዋናው ልዩነት አካል-አካል አሁን በክፍሎች ሊከፋፈል ይችላል, እነሱም በክፍሎች (በድንበር) ይለያያሉ. በጣም የሚያስደንቀው ግን እያንዳንዱ ክፍል በውስጡ የተከማቸ መረጃን ለመግለጽ የራሱ ራስጌ ሊኖረው ይችላል, ማለትም.

በአንድ ጥያቄ ውስጥ የተለያዩ አይነት መረጃዎችን ማስተላለፍ ይችላሉ (በደብዳቤ ደብዳቤ ላይ እንደ ጽሁፍ በተመሳሳይ ጊዜ ፋይሎችን ማስተላለፍ ይችላሉ).
http://www.site.ru/news.html HTTP/1.0\r\n ያግኙ
አግኝ http://www.site.ru/news.html?login=Petya%20Vasechkin&password=qq HTTP/1.0\r\n
አስተናጋጅ: www.site.ru\r\n

ስለዚህ እንጀምር። በመግቢያ እና በይለፍ ቃል ማስተላለፍ ጋር ተመሳሳይ ምሳሌን እንደገና እናስብ ፣ አሁን ግን በአዲስ ቅርጸት።
ኩኪ፡ ገቢ=1\r\n
http://www.site.ru/news.html HTTP/1.0\r\n ይለጥፉ የይዘት ርዝመት፡ 209\r\n
--1BEF0A57BE110FD467A የይዘት ርዝመት፡ 209\r\n
የይዘት ርዝመት፡ 209\r\n
\r\n የይዘት ርዝመት፡ 209\r\n
http://www.site.ru/news.html HTTP/1.0\r\n ይለጥፉ የይዘት ርዝመት፡ 209\r\n
የይዘት-አቀራረብ: ቅጽ-ውሂብ; ስም = "መግባት" የይዘት ርዝመት፡ 209\r\n
የይዘት ርዝመት፡ 209\r\n
ፔትያ ቫሴችኪን የይዘት ርዝመት፡ 209\r\n
የይዘት-አቀራረብ: ቅጽ-ውሂብ; ስም = "የይለፍ ቃል" የይዘት ርዝመት፡ 209\r\n

አሁን የተጻፈውን እንረዳ። :-) አንዳንድ \r\n ቁምፊዎችን ከመረጃው ጋር እንዳይዋሃዱ በተለይ በደማቅ አጉልቻለሁ። በቅርበት ከተመለከቱ፣ ከይዘት-አይነት በኋላ የድንበሩን መስክ ያስተውላሉ። ይህ መስክ የክፍል መለያየትን - ድንበር ይገልጻል። የላቲን ፊደላትን እና ቁጥሮችን ያካተተ ሕብረቁምፊ, እንዲሁም አንዳንድ ሌሎች ምልክቶች (እንደ እድል ሆኖ, የትኞቹን ሌሎች አላስታውስም) እንደ ድንበር ሊያገለግል ይችላል. በጥያቄው አካል ውስጥ "--" ወደ ድንበሩ መጀመሪያ ላይ ተጨምሯል, እና ጥያቄው ከወሰን ጋር ያበቃል, እሱም "-" ቁምፊዎች ወደ መጨረሻው ይጨምራሉ. የእኛ ጥያቄ ሁለት ክፍሎች ያሉት ሲሆን የመጀመሪያው የመግቢያ መስኩን ይገልፃል, ሁለተኛው ደግሞ የይለፍ ቃል መስኩን ይገልጻል.

የይዘት-አቀራረብ (በክፍሉ ውስጥ ያለው የውሂብ አይነት) ይህ ከቅጹ ላይ ያለው ውሂብ ይሆናል ይላል, እና የስም መስክ የመስክ ስም ይገልጻል. ይህ የሴክሽን ራስጌ የሚያልቅበት እና የሚከተለው የመስክ እሴቱ የተቀመጠበት ክፍል የውሂብ አካባቢ ነው (እሴቱን መመስጠር አያስፈልግም!)

በክፍል ራስጌዎች ውስጥ የይዘት-ርዝመትን መጠቀም አያስፈልግዎትም ፣ ግን በጥያቄው ርዕስ ውስጥ እርስዎ እና እሴቱ ከሁለተኛው በኋላ የሚታየው የመላው አካል - አካል መጠን ነው የሚለውን እውነታ ትኩረት እንዲሰጡዎት እፈልጋለሁ። r\n የሚከተለው የይዘት-ርዝመት፡ 209\r\n እነዚያ። አካል-አካል ከራስጌው ተለያይቷል ተጨማሪ የመስመር መግቻ (ይህም በክፍሎች ውስጥ ሊታይ ይችላል).

አሁን ፋይል ለማስተላለፍ ጥያቄ እንፃፍ።
http://www.site.ru/news.html HTTP/1.0\r\n ያግኙ
http://www.site.ru/postnews.html HTTP/1.0\r\n ይለጥፉ
አስተናጋጅ: www.site.ru\r\n
ማጣቀሻ፡ http://www.site.ru/news.html\r\n
የይዘት ዓይነት: ባለብዙ ክፍል / ቅጽ-ውሂብ; boundary=1BEF0A57BE110FD467A\r\n
ኩኪ፡ ገቢ=1\r\n
http://www.site.ru/news.html HTTP/1.0\r\n ይለጥፉ የይዘት ርዝመት፡ 209\r\n
የይዘት ርዝመት፡ 491\r\n የይዘት ርዝመት፡ 209\r\n
የይዘት ርዝመት፡ 209\r\n
የይዘት-አቀራረብ: ቅጽ-ውሂብ; ስም = "ዜና_ራስጌ" የይዘት ርዝመት፡ 209\r\n
http://www.site.ru/news.html HTTP/1.0\r\n ይለጥፉ የይዘት ርዝመት፡ 209\r\n
ምሳሌ ዜና የይዘት ርዝመት፡ 209\r\n
የይዘት-አቀራረብ: ቅጽ-ውሂብ; ስም = "news_file"; የይዘት ርዝመት፡ 209\r\n
ፋይል ስም = "news.txt" የይዘት ርዝመት፡ 209\r\n
የይዘት ርዝመት፡ 209\r\n
የይዘት አይነት፡ አፕሊኬሽን/ኦክቶት-ዥረት የይዘት ርዝመት፡ 209\r\n
የይዘት-አቀራረብ: ቅጽ-ውሂብ; ስም = "የይለፍ ቃል" የይዘት ርዝመት፡ 209\r\n

የይዘት-ማስተላለፍ-ኢንኮዲንግ፡ ሁለትዮሽ

በጣም አስፈላጊ ነጥብ. አብዛኛዎቹ የCGI ስክሪፕቶች የተፃፉት በስማርት ሰዎች ነው፣ ስለዚህ በይዘት አይነት ውስጥ ያለውን የገቢ ፋይል አይነት መፈተሽ ይወዳሉ። ለምንድነው፧ አብዛኛውን ጊዜ ፋይሎችን በድረ-ገጾች ላይ መስቀል ከጎብኚው ምስሎችን ለመቀበል ይጠቅማል። ስለዚህ, አሳሹ ራሱ ጎብኚው ምን ዓይነት ፋይል መላክ እንደሚፈልግ ለመወሰን ይሞክራል እና ተገቢውን የይዘት አይነት በጥያቄው ውስጥ ያስገባል. ስክሪፕቱ ሲደርሰው ይፈትሻል፣ እና ለምሳሌ፣ gif ወይም jpeg ካልሆነ፣ ይህን ፋይል ችላ ይለዋል። ስለዚህ, ጥያቄን "በእጅ" በሚፈጥሩበት ጊዜ, የይዘት አይነት ዋጋውን ከተላለፈው ፋይል ቅርጸት ጋር ቅርበት እንዲኖረው ይንከባከቡ.

በእኛ ምሳሌ, በየትኛው ውስጥ ጥያቄ ተፈጥሯል የጽሑፍ ፋይል. የሁለትዮሽ ፋይልን የማስተላለፍ ጥያቄ በተመሳሳይ መንገድ ይፈጠራል።

4. ፖስትስክሪፕት.

ወደ አገልጋዩ ጥያቄዎችን ስለመላክ በዝርዝር ማውራት ጠቃሚ አይደለም ብዬ አስባለሁ። ይህ የንፁህ የ RHP ቴክኖሎጂ ጉዳይ ነው :-). ከሶኬቶች ጋር ለመስራት ወይም የ CURL ሞጁሉን ተግባራት በይፋ የ PHP ሰነዶች ላይ ያለውን ክፍል በጥንቃቄ ማንበብ በቂ ነው.

ከላይ ካለው፣ ጥያቄው ለምን እንደሆነ ግልፅ እንደሆነ ተስፋ አደርጋለሁ፡- “የራስጌ ተግባሩን በመጠቀም የPOST ጥያቄን እንዴት ማመንጨት እችላለሁ?” - ትርጉም የለሽ.

የራስጌ(ሕብረቁምፊ) ተግባር ለጥያቄው ራስጌ ብቻ ግቤትን ይጨምራል፣ ነገር ግን ለጠያቂው አካል አይደለም።

ሌላ አይነት ጥያቄ አለ - የይዘት አይነት: ብዙ ክፍል / ድብልቅ, ይህን ጽሑፍ ካነበቡ በኋላ እራስዎ ይህን አይነት በቀላሉ እንደሚረዱት ተስፋ አደርጋለሁ. በዝርዝር ማጥናት ይችላሉ

ይህ ልጥፍ በአንዱ ጽሑፎቼ ውስጥ ለተጠየቀው ጥያቄ መልስ ነው።

በዚህ ጽሑፍ ውስጥ የኤችቲቲፒ ዘዴዎች GET/POST/PUT/DELETE እና ሌሎች ምን እንደሆኑ፣ለምን እንደተፈለሰፉ እና በ REST መሰረት እንዴት እንደሚጠቀሙባቸው ልነግርዎ እፈልጋለሁ።

HTTP

ስለዚህ, የበይነመረብ ዋና ፕሮቶኮሎች አንዱ ምንድን ነው? መንጠቆቹን ወደ RFC2616 እልካለሁ፣ እና የተቀረውን በሰው እናገራለሁ :)

ይህ ፕሮቶኮል ጥያቄ (ጥያቄ) እና ምላሽ (ምላሽ) በሚባሉት መልእክቶች ላይ የተመሠረተ በሁለት ኮምፒተሮች (ደንበኛ እና አገልጋይ) መካከል ያለውን መስተጋብር ይገልጻል። እያንዳንዱ መልእክት ሶስት ክፍሎችን ያቀፈ ነው-የመጀመሪያ መስመር ፣ ራስጌዎች እና አካል። በዚህ ሁኔታ የመነሻ መስመር ብቻ ያስፈልጋል.

የጥያቄው እና ምላሹ የመነሻ መስመሮች የተለያዩ ቅርፀቶች አሏቸው - እኛ የምንፈልገው የጥያቄውን መነሻ መስመር ብቻ ነው ፣ይህም ይመስላል።ዘዴ ዩአርአይ HTTP/ ,

VERSION METHOD የኤችቲቲፒ ጥያቄ ዘዴ ከሆነ፣ ዩአርአይ የንብረት መለያ ነው፣ VERSION የፕሮቶኮል ስሪት ነው (ለበአሁኑ ጊዜ

ራስጌዎች በኮሎን የተለዩ የስም-እሴት ጥንዶች ስብስብ ናቸው። ራስጌዎቹ የተለያዩ የአገልግሎት መረጃዎችን ያስተላልፋሉ፡ የመልእክት ኢንኮዲንግ፣ የአሳሽ ስም እና ስሪት፣ ደንበኛው የመጣበትን አድራሻ (ማጣቀሻ) እና የመሳሰሉት።

የመልእክቱ አካል ትክክለኛው መረጃ እየተላለፈ ነው። በምላሹ, የተላለፈው ውሂብ, እንደ አንድ ደንብ, አሳሹ የጠየቀው የኤችቲኤምኤል ገጽ ነው, እና በጥያቄው ውስጥ, ለምሳሌ በመልዕክቱ አካል ውስጥ, በአገልጋዩ ላይ የተጫኑ ፋይሎች ይዘቶች ይተላለፋሉ. ነገር ግን እንደ አንድ ደንብ, በጥያቄው ውስጥ ምንም የመልዕክት አካል የለም.

የኤችቲቲፒ መስተጋብር ምሳሌ

አንድ ምሳሌ እንመልከት።

ጥያቄ፡-
GET /index.php HTTP/1.1 አስተናጋጅ፡ example.com የተጠቃሚ ወኪል፡ Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5 ተቀበል፡ ጽሑፍ/html ግንኙነት፡ ዝጋ
የመጀመሪያው መስመር የመጠይቁ መስመር ነው, የተቀሩት ራስጌዎች ናቸው; የመልእክት አካል ጠፍቷል

መልስ፡-
HTTP/1.0 200 እሺ አገልጋይ፡ nginx/0.6.31 ይዘት-ቋንቋ፡ ru ይዘት-አይነት፡ ጽሑፍ/html; charset=utf-8 የይዘት ርዝመት፡ 1234 ግንኙነት፡ ዝጋ ... የኤችቲኤምኤል ገጹ ራሱ...

መርጃዎች እና ዘዴዎች

ወደ ጥያቄው መነሻ መስመር እንመለስ እና እንደ URI ያለ ግቤት እንደያዘ እናስታውስ። ይህ የሚያመለክተው ዩኒፎርም ሪሶርስ ለዪን - ወጥ መገልገያ መለያ ነው። ሀብት እንደ አንድ ደንብ በአገልጋዩ ላይ ያለ ፋይል ነው (በዚህ ጉዳይ ላይ URI ምሳሌ “/styles.css” ነው) ፣ ግን በአጠቃላይ ሀብቱ እንዲሁ የተወሰነ ረቂቅ ነገር ሊሆን ይችላል (“/blogs/webdev/” - ነጥቦች ከአንድ የተወሰነ ፋይል ይልቅ ወደ “ድር” ብሎክ ልማት።

የኤችቲቲፒ ጥያቄ አይነት (የኤችቲቲፒ ዘዴ ተብሎም ይጠራል) ለአገልጋዩ በንብረቱ ላይ ምን አይነት እርምጃ ልንሰራ እንደምንፈልግ ይነግረዋል። መጀመሪያ ላይ (በ90ዎቹ መጀመሪያ ላይ) ደንበኛው ከንብረት ማግኘት የሚችለው አንድ ነገር ብቻ እንደሆነ ይታሰብ ነበር - ለመቀበል አሁን ግን የኤችቲቲፒ ፕሮቶኮልን በመጠቀም ልጥፎችን መፍጠር፣ ፕሮፋይል ማርትዕ፣ መልዕክቶችን መሰረዝ እና ሌሎችንም ማድረግ ይችላሉ። እና እነዚህ ድርጊቶች "ደረሰኝ" ከሚለው ቃል ጋር ለማጣመር አስቸጋሪ ናቸው.

እርምጃዎችን በኤችቲቲፒ ዘዴዎች ደረጃ ከሀብቶች ለመለየት የሚከተሉት አማራጮች ተፈለሰፉ።

  • GET - ሀብት ማግኘት
  • POST - ሀብት መፍጠር
  • PUT - የንብረት ማሻሻያ
  • ሰርዝ - የንብረት መሰረዝ
እባክዎን ያስተውሉ የኤችቲቲፒ ዝርዝር መግለጫ አገልጋዩ ሁሉንም ዘዴዎች እንዲረዳ (ከእነዚህም ብዙዎቹ ከ 4 በላይ ናቸው) - GET ብቻ ነው የሚፈለገው ፣ እና ከአንድ የተወሰነ ጋር ጥያቄ ሲደርሰው ምን ማድረግ እንዳለበት ለአገልጋዩ አይናገርም። ዘዴ. ይህ ማለት አገልጋዩ ለ DELETE /index.php HTTP/1.1 ጥያቄ ምላሽ ይሰጣል ግዴታ አይደለምከ GET/index.php HTTP/1.1 ጥያቄ ጋር ተመሳሳይ በሆነው በአገልጋዩ ላይ ያለውን ማውጫ.php ይሰርዙ ግዴታ አይደለምየ index.php ገጽን ወደ እርስዎ ይመልሱ ፣ ለምሳሌ ሊሰርዘው ይችላል :)

REST ወደ ጨዋታ ይመጣል

REST (የመወከል ግዛት ማስተላለፍ) በ 2000 በሮይ ፊልዲንግ ከኤችቲቲፒ ፕሮቶኮል አዘጋጆች አንዱ የሆነው የድረ-ገጽ አፕሊኬሽኖችን ለመገንባት የመርሆች ቡድን ስም ሆኖ የተዋወቀ ቃል ነው። በአጠቃላይ፣ REST ከኤችቲቲፒ ሰፋ ያለ ቦታን ይሸፍናል - እንዲሁም ከሌሎች ፕሮቶኮሎች ጋር በሌሎች አውታረ መረቦች ውስጥ ጥቅም ላይ ሊውል ይችላል። REST በ “ሀብት” እና “ግስ” ጽንሰ-ሀሳቦች ላይ በመመርኮዝ በደንበኛው እና በአገልጋይ መካከል ያለውን የግንኙነት መርሆዎችን ይገልፃል (እንደ ርዕሰ-ጉዳይ እና ተሳቢ ሊረዳ ይችላል)። በኤችቲቲፒ ጉዳይ ሀብቱ በዩአርአይ የሚታወቅ ሲሆን ግሱ ደግሞ የኤችቲቲፒ ዘዴ ነው።

REST ተመሳሳዩን ዩአርአይ ለተለያዩ ግብዓቶች መጠቀምን መተው ይጠቁማል (ይህም የሁለት የተለያዩ መጣጥፎች አድራሻ እንደ /index.php?article_id=10 እና /index.php?article_id=20 - ይህ REST-መንገድ አይደለም) እና ለተለያዩ ድርጊቶች የተለያዩ የኤችቲቲፒ ዘዴዎችን በመጠቀም። ማለትም የ REST አቀራረብን በመጠቀም የተጻፈ የድር መተግበሪያ በ HTTP DELETE ዘዴ ሲደርሱበት ይሰርዛል (በእርግጥ ይህ ማለት ሁሉንም እና ሁሉንም ሰው ለማጥፋት እድሉን መስጠት አስፈላጊ ነው ማለት አይደለም ነገር ግን ማንኛውምየመተግበሪያው የመሰረዝ ጥያቄ HTTP DELETE ዘዴን መጠቀም አለበት።

REST ለፕሮግራም አድራጊዎች ደረጃቸውን የጠበቁ እና ከበፊቱ የበለጠ ቆንጆ የሆኑ የድር መተግበሪያዎችን እንዲጽፉ ያስችላቸዋል። REST ን በመጠቀም አዲስ ተጠቃሚን ለመጨመር ዩአርአይ /user.php?action=create (GET/POST method) አይሆንም፣ ግን በቀላሉ /user.php (በጥብቅ የPOST ዘዴ)።

በውጤቱም, ያለውን የኤችቲቲፒ ዝርዝር መግለጫ እና የ REST አቀራረብን በማጣመር, የተለያዩ የኤችቲቲፒ ዘዴዎች በመጨረሻ ትርጉም ይሰጣሉ. GET - ሀብትን ይመልሳል ፣ POST - አዲስ ይፈጥራል ፣ PUT - ያለውን ያዘምናል ፣ ሰርዝ - ይሰርዘዋል።

ችግሮች?

አዎ፣ RESTን በተግባር መጠቀም ላይ ትንሽ ችግር አለ። ይህ ችግር HTML ይባላል።

PUT/DELETE ጥያቄዎችን በ XMLHttpRequest በመጠቀም መላክ ይቻላል፣ አገልጋዩን በእጅ በመገናኘት (በ curl curl ወይም በቴሌኔት)፣ ነገር ግን ሙሉ የPUT/ሰርዝ ጥያቄ የሚልክ HTML ፎርም ማድረግ አይችሉም።

ነገሩ የኤችቲኤምኤል ስፔስፊኬሽን ከGET ወይም POST ውጪ ሌላ መረጃ የሚያቀርቡ ቅጾችን እንዲፈጥሩ አይፈቅድልዎም። ስለዚህ, ከሌሎች ዘዴዎች ጋር በተለምዶ ለመስራት, ሰው ሰራሽ በሆነ መንገድ መኮረጅ አለብዎት. ለምሳሌ ፣ በ Rack (ሩቢ ከድር አገልጋይ ጋር የሚገናኝበት ዘዴ ፣ Rails ፣ Merb እና ሌሎች የሩቢ ማዕቀፎች Rack በመጠቀም የተሰሩ ናቸው) ፣ በቅጹ ላይ “_ዘዴ” በሚለው ስም የተደበቀ መስክ ማከል ይችላሉ ፣ እና የስልቱን ስም እንደ እሴቱ ይግለጹ (ለምሳሌ "PUT") - በዚህ ሁኔታ, የPOST ጥያቄ ይላካል, ነገር ግን ሬክ ከPOST ይልቅ PUT እንደተቀበለ ለማስመሰል ይችላል.