هوک اتصال سیاست نشست است، نه فیلتر بسته
هوک اتصال کلاینت یک بار در هر نشست اجرا میشود و هرگز بار داده را نمیبیند. پذیرش را جایی بگذارید که نشستها وجود دارند و تغییر محتوا را جایی که درخواستها وجود دارند.
کسی میخواهد ببیند کلاینتها چه چیزی از تونل میفرستند، هوک اتصال را در مستندات پیدا میکند و شروع میکند به نوشتن اسکریپتی که هرگز حتی یک بسته دریافت نخواهد کرد. هوک واقعی و مفید است، اما واحد کارش یک نشست است، نه یک بایت. انتخاب مؤلفه درست مقایسهای میان سه جایی است که کار میتواند رخ دهد، و پرسش تعیینکننده این است که هر یک واقعاً کدام واحد را میبیند.
هوک چه چیزی دریافت میکند و چه چیزی را هرگز دریافت نمیکند
هوک اتصال کلاینت یک بار اجرا میشود وقتی کلاینت احراز هویتشده نشستی برقرار میکند، در بافت فرایند سرور، با آرگومانهای مستند و مقادیر محیطی مانند نام مشترک و نشانی تخصیصیافته. میتواند پیکربندی هر کلاینت را بنویسد، تصمیم پذیرش بگیرد، منبعی بیرونی تخصیص دهد یا ثبت کند که اتصال رخ داده است. آنچه نمیتواند انجام دهد مشاهده ترافیک است، زیرا تا زمانی که نخستین بسته از تونل بگذرد هوک بازگشته است.
این محدودیتی نیست که باید دور زد. یک فراخوان نشست که بخواهد جریانی را پردازش کند باید به اندازه عمر اتصال اجرا شود، و قرارداد اسکریپتنویسی دیمن برای این شکل ساخته نشده است. پیش از تصمیم به اینکه هوک سد راه است، بپرسید هوک برای چه کاری است.
اتصالهای دوباره هم مهماند. کلاینتی که قطع و دوباره وصل میشود نشست تازهای است، پس هر چیزی که هوک تخصیص میدهد باید خودتوان یا همراه رویداد قطع اتصالی باشد که پاکسازی میکند. حالتی که با هر اتصال دوباره نشت میکند نخستین باگ معمول در طراحی مبتنی بر هوک است.
سیاست نشست جای درستش هوک است
پذیرش کار طبیعی هوک است. میدانید چه کسی وصل شده، از کجا و با چه گواهینامهای، و میتوانید تصمیم بگیرید این نشست ادامه یابد یا رد شود. آن تصمیم ارزان است، یک بار گرفته میشود و به نگاه کردن حتی یک بایت بار داده نیاز ندارد.
تخصیص پیکربندی به همان قالب میخورد. هوک میتواند نشانی کلاینت را انتخاب کند، گزینههای مناسب آن هویت را فشار دهد یا قطعهای بنویسد که سرور برای این کلاینت میخواند. چون تصمیم به ازای نشست است، وقتی چیزی اشتباه میشود و کسی باید توضیح دهد چرا کلاینت مشخصی نشانی مشخصی گرفت، فهمپذیر میماند.
ثبت کردن سومین جایگاه است. یک ورودی حسابرسی که میگوید نشستی پذیرفته شد، با هویت و زمانش، دقیقاً همینجاست. این گزارش ترافیک نیست و نباید خود را چنین جا بزند. اگر بعدها کسی بپرسد کلاینت درون تونل چه کرد، پاسخ باید از جای دیگری بیاید.
کار بسته جا دارد در مسیر بسته
اگر نیاز دیدن یا تغییر بایتهای در پرواز است، مؤلفه باید در مسیر ارسال باشد: قاعده دیوار آتش با صف، هوک کنترل ترافیک، یا ارسالکننده در فضای کاربر. این سازوکارها بستهها را میبینند و حالت، حالتهای خرابی و مشخصات کارکردی خود را دارند.
ویرایش بار داده در آن لایه سختتر از خواندن آن است. تغییر یک بایت میتواند فیلد طول، جمع کنترلی یا ماشین وضعیت پروتکل را باطل کند، و تونل لایه سوم شما را از هیچیک از اینها محافظت نمیکند. فقط یعنی سرآیندهای بیرونی آنهایی نیستند که ویرایش میکنید. پیش از وعده بازنویسی محتوا به کسی، برای این کار تعمیر بودجه بگذارید.
ضبط رابط ارزانترین ابزار این دسته است و یک مشاهده است، نه ویرایشگر. مردم این دو را اشتباه میگیرند چون هر دو دیدن ترافیک توصیف میشوند، اما ضبط یک فایل تولید میکند و مسیر بسته یک تصمیم.
تغییرهای برنامه جا دارد در خود برنامه
وقتی هدف تغییر این است که یک درخواست چه چیزی دارد یا یک پاسخ چگونه شکل میگیرد، جای درست خود سرویس است یا پروکسیای که پروتکل را عمداً پایان میدهد. این مؤلفهها از پیش درخواستها، پاسخها و احراز هویتی را که برنامه انتظار دارد میفهمند، و این دقیقاً همان بافتی است که فیلتر بسته ندارد.
ترجمه نشانی به دلیلی در پایین این فهرست است. نشانیها و درگاهها را بازنویسی میکند و بار داده را رها میکند، پس ابزار محتوا نیست، هر چند وقت که در دستوری ظاهر شود که محتوا را هم نام میبرد.
جدا نگه داشتن این مرزهاست که طراحی را توضیحپذیر میکند. سیاست نشست در هوک، پردازش بسته در مسیر بسته، و تغییر برنامه جایی که پروتکل عمداً پایان مییابد: سه جمله که همزمان فهرست بازبینی هم هستند.
جایی که TLS هنوز گفتگو را پایان میدهد
یک چیز از همه بالا جان سالم به در میبرد: ترافیک درون تونل که HTTPS حمل میکند رمزنگاری انتقال خودش را حفظ میکند. داشتن کلیدهای VPN بسته IP درونی را به شما میدهد و کلیدهای نشست وبسایت آن سوی دیگر را نمیدهد.
به همین دلیل هوک حتی در اصل نمیتواند محتوا را بازرسی کند، و به همین دلیل مسیر بسته متن رمزشده میبیند مگر اینکه استقرار عمداً TLS درونی را پایان دهد. قرارداد اسکریپتنویسی توصیف میکند که به هوک چه داده میشود؛ درباره بار داده چیزی نمیگوید چون باری برای دادن وجود ندارد.