در این ستون نظر دریافتم که HTTP / 2 تقریباً وجود داشته است
یک چیز برای سالهای مختلف است و من می توانم با زمان پیش بروم.
با توجه به لحظه لحظه و تا حد زیادی بدون مشکل ، من مال خودم را گرفتم
وب سرور ( Apache ) به HTTP / 2 تبدیل شد.
HTTP / 2 چه کاری می تواند انجام دهد؟
HTTP / 2 باید از HTTP / 1.1 قدرتمندتر باشد ، در نتیجه تمرکز بر روی
تأخیر نهفته است: مقدار زیادی از داده ها سریعتر منتقل نمی شوند ،
اما یک وب سایت باید سریعتر راه اندازی شود.
- پروتکل به جای متن محور بودن ، باینری است ( telnet کافی است
- از چندین پرونده می توان به طور همزمان از طریق یک فایل استفاده کرد
اتصال TCP منتقل شده است. - سرور می تواند پرونده های بیشتری را از درخواست مرورگر ارسال کند
were ("فشار").
مرورگرهای اصلی از HTTP / 2 سالها پشتیبانی می کنند ، اما بسیاری از
فقط از طریق SSL.
(سپس HTTP / 3 یک قدم جلوتر می رود (به عنوان مثال UDP به جای TCP) ،
اما در حال حاضر بسیار کمی گسترده است و به عنوان مثال از آپاچی
هنوز پشتیبانی نشده است این در واقع هنوز برای من مناسب نیست.)
آماده سازی در Apache
دو کار آماده سازی کوچک لازم است:
- HTTP / 2 در Apache به طور پیش فرض با آن در دبیان کار نمی کند
مدل کارگر فعال mpm_prefork . بهتر است
به عنوان مثال، mpm_event . - mod_php برای این وبلاگ دوباره با mpm_event اجرا نمی شود ،
بهتر و سریعتر php-fpm است.
تغییر کار به آسانی انجام شد همانطور که در سایر موارد آسان بود
مکان ها را به عنوان دستورالعمل در وب پیدا کنید (نام بسته ها و ماژول ها هستند
برای دبیان باستر ):
- apt-get install php7.3-fpm
- a2dismod php7.3
- a2enconf php7.3-fpm
- a2enmod proxy_fcgi
- a2dismod mpm_prefork
- a2enmod mpm_event
- a2enmod ssl
- a2enmod http2
- systemctl راه اندازی مجدد apache2
با کمال تعجب من حتی هیچ مشکلی در مورد
مجوزهای کاربر با PHP ، همانطور که قبلاً استفاده می کردم
suexec هنوز می دانست. احتمالاً mod_php و php-fpm در آنجا کار می کنند
فقط همین. (یا من هنوز مشکلات را هنوز پیدا نکردم
چون من به عنوان مثال هنوز عکس جدیدی در وبلاگ بارگذاری نکرده ام.)
نکته شتاب Sven برای php-fpm من آن را نیز دارم
با استفاده از.
HTTP / 2 در Apache
فعال کردن HTTP / 2 حتی آسان تر است:
- a2enmod http2
- systemctl apache2 را مجدداً راه اندازی کنید
تاکنون بسیار هیجان انگیز است. من حداقل شتاب از
وبلاگهایی (احتمالاً حدود 50 میلی ثانیه برای بازیابی صفحه اصلی) پیدا شده اند
از تبدیل از PHP به php-fpm بیشتر از
HTTP / 2 اما هنوز هم این "فشار" وجود دارد!
HTTP / 2 Push در وبلاگ
HTTP / 2 Push برای ارسال پرونده ها در حال حرکت قبل از
مرورگر آن را درخواست کرده است. روند کار به اندازه یک مرحله کمی مشکل است
بنابراین بسیاری از چیزها می توانند بشکنند: شما باید به دقت در مورد کدام یک فکر کنید
پرونده هایی را که در کدام موقعیت فشار می دهید ، در غیر این صورت مرورگر دریافت می کند
مواردی که او نمی خواهد یا حتی قبلاً دارد: وب سرور
نمی تواند آنچه را که از قبل در حافظه پنهان مرورگر وجود دارد ، مشاهده کند
پرونده را در سفر خود ارسال می کند. بنابراین در اینجا شما می توانید در نهایت
شتاب به سرعت دوباره به عکس تبدیل می شود
Google Lighthouse همیشه چهار پرونده برای وبلاگ داشته است
اشکال دارد که ارائه صفحه در مرورگر را به تأخیر می اندازند
مرورگر پس از دریافت سند HTML بدون این چهار پرونده
نمی توان شروع کرد همچنین این شیوه نامه CSS بود
سه فایل جاوا اسکریپت. یک راه حل برای این می تواند درون خطی باشد
پرونده ها (یا حداقل قسمت های مورد نیاز برای نمایش اولیه)
از آن). اما این برای من خیلی پیچیده است و پس از آن او می تواند
دیگر موارد درون خطی را در چندین صفحه وبلاگ ذخیره نکنید
من دقیقاً برای این چهار پرونده فشار آوردم
با توجه به شعار "مرورگر عزیز ، به هر حال به آن نیاز دارید" ارسال کنید. آنجا
Serendipity (وبلاگ محلی) فایل شیوه نامه را با یک بارگذاری کرد
Timestamp فراهم می کند (احتمالاً برای بی اعتبار بودن حافظه پنهان در
تغییرات) ، باید url های فشار را پیکربندی کنم. این هست
اما دشوار نیست – شما سرصفحه های اضافی الگوی خود را بسته بندی می کنید
به پرونده template / MY-TEMPLATE / config.inc.php :
- # HTTP / 2 Server Push
- function http2_push ( ] $ type ، $ url ) {
- هدر ( "پیوند: < $ url > ؛ rel = preload؛ as = $ type "، false ) ؛
- }
- http2_push ( 'سبک' ، $ serendipity [ 'smarty_vars' ] [ 'head_link_styles' [] 19659041])
- http2_push ( 'اسکریپت' ، $ serendipity [ 'defaultBaseURL' ] . 'templates / jquery.js' ) ؛
- http2_push ( 'اسکریپت' ، سرپذیری $ [[19659045] "پیش فرض پایه eURL '] . ' plugin / ls-js ') ؛
- # احتمالاً هيچ کس نيازي به اين امر ندارد ، ]
- # فقط به دلیل https://github.com/s9y/Serendipity/issues/686
- http2_push ( "اسکریپت" ، به طور موقت شامل می شود [[19659040] $ serendipity [ 'defaultBaseURL' ] . 'templates / jquery-migrate.js' ) ؛
- ] # من به الگوی خود نیازی ندارم ، JavaScript خاصی ندارم:
- # http2_push ('اسکریپت ، $ serendipity [‘smarty_vars’][‘head_link_script])؛
مجموعه کد از طریق عملکرد جدید http2_push چهار هدر HTTP ،
که سرور وب Apache هنگام تحویل و سپس به آن نگاه می کند
پیوندهای موجود و گاهی اوقات با مرورگر را بازیابی می کند
می فرستد ، اگرچه او هنوز از شما سال نکرده است (
هدر HTTP قبلاً به مرورگر وارد شده است ، همچنان دارای HTTP GET است
برای یکی از پرونده ها به وب سرور می رسد.]
برای تماس های بیشتر "در همان اتصال" (امیدوارم
مرورگر آن را برای صفحات زیر باز می گذارد
Apache در حال حاضر پرونده ها را دوباره فشار نمی دهد – اگر همان باشد
اما مرورگر فردا باز می گردد و داده ها هنوز در حافظه پنهان هستند ، خفه می شوند
آنها دوباره به او سرور می دهند. این واقعا عالیه
هنوز متوقف نشده است ، اما من اکنون 99 امتیاز عملکرد دارم
فانوس دریایی ، هشدار ارائه مسدود شده از بین رفته است
و یک بازدید کننده برای اولین بار از وب سایت من اکنون دوباره صفحه را دریافت می کند
50 میلی متر سریعتر یا چیزی شبیه به آن.
من می خواهم همچنین می خواهم فونت ارسال کنم ، اما این کاملاً است
nonsensical:
- پرونده ها بزرگتر هستند. اگر مرورگر از قبل فونت در حافظه پنهان دارد
ترافیک غیرضروری بیشتری ایجاد کرده است. - من فونت ها را در پنج قالب مختلف ارائه می دهم – کدام یک
مرورگر این را می خواهد؟ اگر می توانید از او نپرسید
فقط آن را ارسال کنید. - ادغام قلم توسط انتخابگر
mediaکنترل می شود. اگه هم باشه
بسیار شبیه دستگاه تلفن همراه است ، من فونت ها را در CSS کنار می گذارم
(صرفه جویی در ترافیک از طریق شبکه های تلفن همراه). سپس آپاچی عالی خواهد بود
هل دادن موارد بی فایده.
نقطه باز: عناوین فقط برای صفحات وبلاگ HTML استفاده نمی شوند
تحویل داده شده ، بلکه برای سایر منابع ، به عنوان مثال
جریانهای RSS در این حالت ، مرورگر یک فایل XML سفارش می دهد و
یک صفحه سبک غیر مرتبط CSS و سه مورد نیز دریافت می کند
فایلهای جاوا اسکریپت نامناسب برای این منظور. اورک ها احتمالاً باید
در مورد سرآیند () اگر () با دیگری تماس بگیرد - من هنوز نمی دانم
که.
راه حل
اگر ( Isset ( $ سرنوشت [ ] [[19659045] 'GET' ] [ 'زیر صفحه' ] ) ) {
اطلاعات از onli به صورت سرندیپیتی بدست آمد.
محدود کردن هدر به HTTP / 2 نیز منطقی است:
- اگر ( strncmp ( $ _SERVER [ 'SERVER_PROTOCOL' ] ، 'HTTP / 2' ، 6 ) == 0 ]) {
- …
- }
HTTP / 2 بر روی وب سایت استاتیک من فشار می آورد
پس از بررسی دشوار "چه چیزی می خواهم فشار دهم؟"
پیاده سازی فنی در وبلاگ بسیار آسان است. روی استاتیک من
از طرف دیگر ، وب سایت دقیقاً برعکس است: من می دانم چه چیزی را تحت فشار قرار می دهم
بخواهید ، اما نمی تواند آن را به درستی انجام دهد.
اساساً ، تنظیم سرصفحه در Apache به شرح زیر است:
- <FileMatch "index .html $" >
- سرآیند مجموعه پیوند "؛ rel = preload؛ as = style"
- </ FilesMatch >
با این کار ، وقتی همه پرونده ها فراخوانی می شوند ، وب سرور می فرستد روشن
index.html ، نامگذاری شده /style.css به طور خودکار با.
متأسفانه این مورد در مورد index.html در زیرشاخه ها نیز صدق می کند.
من نمی خواهم من راهی برای انجام آن پیدا نکرده ام
بازگشت را غیرفعال کنید یا آن را به نوعی محدود کنید.
امکان دیگر استفاده از به جای است
استفاده کنید ، زیرا می توانید یک مسیر مطلق را تعیین کنید. متاسفانه می تواند
یکی اما نه در .htaccess و غیره
اگر "یک کاربر عادی" باشم ، مجبور می شوم. صفحه سبک
تغییر نام دهید ، با امتیازات ریشه دنبال کنید و در
پیکربندی Apache مخصوص سایت در
/etc/apache2/sites-available/XYZ.conf پیچ. اما این است
نفرت انگیز است.
چگونه این کار به درستی انجام می شود؟
راه حل
با تشکر از یک نکته در Usenet ، به برخوردم. یکنفر میتواند
به طور کلی و بنابراین می توانید مسیرهایی را نیز در پیدا کنید .htaccess
از آنجا که همه چیز به دو زبان در قسمت استاتیک وب سایت موجود است
است ، من با * مطابقت دارم. de.html و *. en.html به جای فقط
*. HTML . فقط صفحه شروع با فهرست index.html از خط خارج می شود.
^ / و [^/] + اطمینان حاصل می کنند که همه چیز در
زیرشاخه ها اعمال می شوند.
تقریباً محدودیت HTTP2 وجود دارد.
- # هدرهای فشار HTTP2 را فقط برای
- # - /index.html][19459022/*enhtmlمندرجات19459022عناوین19659015عناوین19459044Autovermietung] # - /*.en.html مندرجات 19459022 عناوین 19659015 مندرجات ) و نه برای هیچ زیر شاخه
- <اگر " ٪ {HTTP2} == 'on' ">
- <If "٪ {REQUEST_URI} = ~ m؛ ^ / ([^/] + . (de | en ) | فهرست) . html $؛ ">
- هدر افزودن لینک " ؛ rel = preload؛ as = style " ]

