2017 © Pedro PelΓ‘ez
 

library net-hypertext

hypertext (HTT)

image

ceive/net-hypertext

hypertext (HTT)

  • Wednesday, August 23, 2017
  • by Ceive
  • Repository
  • 1 Watchers
  • 0 Stars
  • 6 Installations
  • PHP
  • 3 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 1 Versions
  • 0 % Grown

The README.md

Hyper Text

БпСцификация HTT

Π‘Π²ΠΎΠ΄ΠΊΠ°

  • Π”Π²ΡƒΡ… направлСнная рСакция Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ-ΠšΠΎΠ½Ρ‚Π΅Π½Ρ‚
    • Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°
    • ΠšΠΎΠ½Ρ‚Π΅Π½Ρ‚ влияСт Π½Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π° Content-Length) > Если ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ являСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌContentInterface Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° любой спСктр Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ
  • ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅/Π”Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° ΠΏΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌ > Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π² строковом прСдставлСнии, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ Π² соотвСтствии с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ.
  • Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… источников (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ строка) > ΠŸΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² поддСрТиваСтся Transfer-Encoding: chunked
  • Π—Π°ΠΏΠΈΡΡŒ Π² Ρ€Π°Π·Π½Ρ‹Π΅ источники (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ строка)
  • ΠžΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌ слСдуСт ΠΏΠΎ Camelize ΡΡ‚ΠΈΠ»ΡŽ.
  • Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ, (*1)

    • Нормализация ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² (Camelize ΡΡ‚ΠΈΠ»ΡŒ)
    • Π Π°Π·Π±ΠΎΡ€ значСния, (*2)

      ['value' => null, 'params' => [], 'elements' => []]

Π Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ структуры Π² строку

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π°: Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π² зависимости ΠΎΡ‚ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² кодируСтся. Если ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ являСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ ΠΎΡ‚ ContentInterface Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ происходит ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π΄ΠΎ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π°., (*3)

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π°

ΠšΠΎΠ½Ρ‚Π΅Π½Ρ‚ Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌ, ΠΊΠ°ΠΊ ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Π² зависимости ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ трСбованиям Ρ‚ΠΈΠΏΠ° ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° ΠΏΠΎ стандартам(Ссли ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° являСтся ContentInterface)., (*4)

ΠŸΠ°Ρ€ΡΠΈΠ½Π³(БинтаксичСский Анализ ΠΈ Π Π°Π·Π±ΠΎΡ€)

ΠŸΡ€ΠΈ парсингС: Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈΠ· строки, Ρ‚Π°ΠΊ-ΠΆΠ΅ Π² зависимости ΠΎΡ‚ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ², происходит Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ содСрТания. ПослС парсинга: Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡƒΠΆΠ΅ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ΠΉ, Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΌΡƒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ, (*5)

ВозмоТности Ρ€Π°Π·Π½Ρ‹Ρ… источников

Π‘Ρ‚ΠΎΠΈΡ‚ ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ здСсь Ρ‡Ρ‚ΠΎ Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π‘Ρ‡ΠΈΡ‚Π°Π½/Записан с Ρ€Π°Π·Π½Ρ‹Ρ… источников. НапримСр [ΠΈΠ· строки ΠΈ Π² строку] ΠΈΠ»ΠΈ [ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ° / Π² ΠΏΠΎΡ‚ΠΎΠΊ]. ΠŸΡ€ΠΈ ΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌ считывании поддСрТиваСтся приходящий Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Transfer-Encoding (Π½Π΅ ΠΏΡƒΡ‚Π°Ρ‚ΡŒ с Content-Transfer-Encoding) Если ΠΎΠ½ Ρ€Π°Π²Π΅Π½ chunked, Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Ρ€Π°Π·Π±ΠΎΡ€ частСй(Ρ‡Π°Π½ΠΊΠΎΠ²/chunks) прямо ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ°, ВСкст ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π½ ΠΈΠ· Ρ‡Π°Π½ΠΊΠΎΠ² ΠΈ сформирован ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ ΡƒΠΆΠ΅ для дальнСйшСго Ρ€Π°Π·Π±ΠΎΡ€Π° ΠΏΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌ., (*6)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

<?php
namespace Jungle\Util\Specifications\Htt;

include '../../loader.php';

/** ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ  cp1253, koi8-r, iso-8859-5,  etc...*/
$DOCUMENT_CHARSET = 'iso-8859-5';

$document = new Document();
$document->setHeaders([
    '' => 'POST / HTTP/1.1',
    'Accept' => 'text/html',
    //'Content-Transfer-Encoding' => 'quoted-printable',
    //'Content-Transfer-Encoding' => 'base64',
    'Content-Type' => 'text/html; charset=' . $DOCUMENT_CHARSET
]);
$multipart = new Content\Multipart();
$raw_document = <<<'TAG'
Content-Type: image/gif
Content-Disposition: attachment; filename=gif1.gif; name=part1

ВСкст всС-ΠΆΠ΅ Π² Π½ΡƒΠΆΠ½ΠΎΠΉ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅, я Π΄ΡƒΠΌΠ°ΡŽ)
TAG;
$multipart->addPart(new Document($raw_document));
$document->setContent($multipart);


/**
 * По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ сСрвСр PHP отправляСт ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ charset=utf-8,
 * поэтому Ссли ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ с Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ, Ρ‚ΠΎ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠ³ΠΎ тСкста ΠΌΡ‹ Π½Π΅ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ.
 * Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ отобраТСния ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠ±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Ρ… ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΎΡ‚ utf-8
 * ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°Ρ… ΠΎΡ‚Π²Π΅Ρ‚Π° charset=$DOCUMENT_CHARSET
 *
 * Π’Π°ΠΊ-ΠΆΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ„Π°ΠΉΠ» написан Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ utf-8, вСсь Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΉ Π² Ρ„Π°ΠΉΠ»Π΅ тСкст. Π² Ρ‚ΠΎΠΌ числС ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΉ,
 * Ссли ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°Ρ… ΠΎΡ‚Π²Π΅Ρ‚Π° charset=$DOCUMENT_CHARSET, Ρ‚ΠΎ вСсь Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΉ Π² Ρ„Π°ΠΉΠ»Π΅ тСкст станСт Π½Π΅Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅,
 * Π° ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΉ тСкст Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² станСт Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ.
 * Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ смСнив ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ страницы Π² настройках страницы Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅.
 *
 * @code: ini_set('default_charset',$DOCUMENT_CHARSET);
 * МоТно ΡΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эту ΠΎΠΏΠΈΡ€Π°Ρ†ΠΈΡŽ, Π² Ρ€ΡƒΡ‡Π½ΡƒΡŽ смСнив ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ страницы Π² настройках страницы Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅.
 *
 */
//ini_set('default_charset',$DOCUMENT_CHARSET);

echo '<h3>ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ со структурой Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°</h3>';
echo '<pre style="font-family: Lucida Console">';
echo ">> ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠŸΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡŽ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ°Ρ€Ρ‚ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°, с Content-Disposition: name='part1' ΠΈ Π²Ρ‹Π²Π΅Π΄Π΅ΠΌ содСрТаниС\r\n";
echo '<br/>';
echo $multipart->getPartByDispositionName('part1')->getContent();
echo '</pre>';


echo '<h3>Π Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ структуры Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π² строку</h3>';
echo '<pre style="font-family: Lucida Console">';
$inline_document = "$document";
echo $inline_document;
echo '</pre>';

$hash = md5($inline_document);

echo '<h3>ΠŸΠ°Ρ€ΡΠΈΠ½Π³ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈΠ· строки, ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° цСлостности дальнСйшСго Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π°</h3>';
$document = new Document($inline_document);
echo '<pre style="font-family: Lucida Console">';
echo $inline_re_document = $document;
echo '</pre>';

$hash_re = md5($inline_re_document);

echo '<h2>Π Π°Π·Π½ΠΈΡ†Π° <u>render(structure) > parse(rendered) > render(parsed_structure)</u>: '.strcmp($inline_document, $inline_re_document).'</h2>';
echo '<h2>Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ Ρ…Π΅ΡˆΠΈ</h2>';
echo '<div>Π Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ 1: '.$hash.'</div>';
echo '<div>Π Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ 2: '.$hash_re.'</div>';

The Versions

23/08 2017

dev-master

9999999-dev

hypertext (HTT)

  Sources   Download

Apache 2.0

The Requires