ส่งท้ายปีเก่า – เล่าเรื่องจอประสาทตาบวมน้ำจากการพักผ่อนน้อย และใช้ยาสเตียรอยด์มากเกิน

เมื่อประมาณวันที่ 23 มกราคม 2562 เกิดอาการตาซ้ายมองภาพแล้วไม่ชัด และบางส่วนของภาพที่ผ่านตาซ้ายมีสภาพสีเพี้ยนเป็นสีเหลืองนิด ๆ จึงไปหาหมอที่โรงพยาบาล แล้วทำการสแกนวิเคราะห์จอประสาทตา และขั้วประสาทตา (OTC หรือ Optical coherence tomography) เพื่อดูสภาพ ตอนทำก็วัดค่าความดันตา โดยรวมทุกอย่างปรกติ แล้วก็ไปหยอดขยายม่านตาให้ขยายให้มาก ๆ เพื่อจะได้ถ่ายรูปภายในจอประสาทตาและฉีดสีเพื่อดูเส้นเลือดในตาทั้งสองข้างบริเวณจอประสาทตา ว่ามีจุดรั่วตรงไหนบ้าง เมื่อคุณหมอตรวจสอบ แล้วพบบอาการรบมน้ำบริเวณจอประสาทตา (อาการ CSC หรือ Central Serous Chorioretinopathy) ซึ่งคุณหมอแนะนำว่า อาการนี้ทำได้แต่รอให้มันยุบไปเอง ไม่สามารถกินยา หรือฉีดยาให้ยุบได้ นอกจากจะยิงเลเซอร์ปิดจุดรั่วของสารน้ำ แต่วิธีนี้ไม่อยากแนะนำ เพราะจุดบวมน้ำสามารถหายเองได้ และไม่ใช่จุดที่ที่เป็นอันตรายมากนัก อาศัยความอดทนเป็นหลัก

อาการนี้ช่วงแรกจะแค่สีเพี้ยน ๆ ในข้างที่มีปัญหา แต่สักพักจะเริ่มมองภาพแล้วบวมตรงกลางภาพ (สังเกตจากตาราง Excel) การมองเห็นแย่ลงในตาข้างใดข้างหนึ่ง แรก ๆ จะปวดตา มึนหัว และเป็นไมเกรน เพราะสมองสับสนกับการมองเห็นที่เปลี่ยนไป แล้วจะปวดกระบอกตามาก ต้องใช้ยาลดอาการแสบ-ปวดที่ตาอยู่หลายวัน ถึงจะเริ่มชินกับการมองนี้ที่มีปัญหา

ผมเข้า-ออกโรงพยาบาลช่วงต้นปี 2562 อยู่หลายเดือน เพื่อตรจสอบสภาพของจอประสาทตาประมาณ 2 เดือน ซึ่งส่วนตัวไม่เคยเจออาการแบบนี้ จึงค่อนข้างกังวล และกลัวจะมีปัญหาในการทำงานไปมากกว่านี้ (ทำงานด้านไอที สายตาเป็นสิ่งสำคัญ) จึงปรึกษาคุณหมออีกครั้ง คุณหมอแนะนำให้ฉีดสี และขยายม่านตาเพื่อดูจุดที่แน่นอน และหากว่ามันยังรั่วอยู่ ก็แนะนำให้การยิงเลเซอร์แบบเย็นปิดจุดตรงนั้น อาการจะหายเร็วกว่า แต่ค่าใช้จ่ายจะสูงกว่ามาก และมีความเสี่ยงเล็กน้อย

ด้วยความที่เป็นโรงพยาบาลรัฐ จึงต้องนัดอีกครั้ง และมาในช่วงเช้า เพราะการฉีดสีต้องทำในช่วงเช้า และเข้าตรวจดูผลช่วงบ่าย หากผลตรวจต้องเลเซอร์ปิดจุดรูรั่วจริง ๆ ก็ทำภายในช่วงเวลาราชการได้เลย ซึ่งจะมีค่าใช้จ่ายที่ถูกกว่า โดยจากการฉีดสี และเข้าไปฟังผลตรวจ คุณหมอแจ้งว่าเส้นเลือดที่เป็นต้นเหตุมของอาการรั่วได้รักษาตัวเองแล้ว และไม่มีการรั่วของสารน้ำออกมาอีก อาการบวมที่เพิ่มมากขึ้นในช่วงก่อนหน้านี้ก็ยุบลงมาพอสมควรแล้ว คุณหมอจึงไม่ยิงเลเซอร์อุดจุดที่รั่วให้ และให้กลับบ้าน ทำใจให้สบาย เพราะอาการดีขึ้น และเป็นสัญญาณดีว่ากำลังจะหาย นัดตรวจใหม่อีกครั้งใน 3 อาทิตย์

ระหว่างนี้คุณหมอแจ้งว่าให้งดสัมผัสกับสเตียรอยด์ทุกทาง (กิน, ทา หรือหยอด) และให้นอนวันละ 7-8 ชั่วโมงให้ได้ทุกวัน แบบนอนรวดเดียว ไม่ใช่นอนหลายรอบสะสม น่าจะทำให้อาการหายได้เองภายใน 1-2 เดือนโดยไม่ทำอะไรเพิ่มเติม

ช่วง 3 อาทิตย์นั้น อาการดีขึ้นตามลำดับ การมองเห็นค่อย ๆ กลับมาปรกติ และการตรวจในรอบถัดมาก็ได้ผลออกมาดีเยี่ยมอาการบวมไม่มีแล้ว คุณหมอจึงนัดตรวจอีกครั้งใน 6 เดือนให้หลัง ซึ่งผลตรวจก็เป็นในแนวทางเดิม คือไม่มีอาการบวมใด ๆ ขึ้นมาอีก แต่คุณหมอก็ยังกำชับเช่นเดิม ให้ งดสัมผัสกับสเตียรอยด์ทุกทาง (กิน, ทา หรือหยอด) และให้นอนวันละ 7-8 ชั่วโมงให้ได้ทุกวันเช่นเดิม เพราะแม้ว่าอาการนี้จะหาย แต่โอกาสกลับมาเป็นอีกสำหรับคนที่เคยเป็นแล้วจะสูงกว่าคนที่ยังไม่เคยเป็นมาก

ทิ้งท้าย สำหรับคนที่นอนดึก ทำงานหนัก และเป็นผู้ชาย อาการแบบที่ผมเป็นนี้ มีโอกาสเกิดได้มากกว่าผู้หญิง 7-8 เท่า และมักเกิดกับคนที่นอนพักผ่อนไม่เพียงพอ (พวกนอน 4-6 ชั่วโมงเป็นประจำต้องระวัง) ทำงานมีความเครียดสูง เป็นโรคเบาหวาน หรือใช้สเตียรอยด์มาเป็นเวลานาน อย่างใดอย่างหนึ่ง หรือผสมกัน ใครกำลังอยู่ในความเสี่ยงแบบนี้แนะนำให้ปรับการนอน และการใช้ยาเพื่อไม่ให้เกิดโรคซ้ำซ้อนแบบนี้ ซึ่งมันทำให้ productivity ลดลงเยอะมากในช่วงนั้น

Desktop PC ตัวใหม่ เพื่อปรับการทำงานเป็น Desktop + Notebook แทน

ปีนี้ผมซื้อ Desktop PC เครื่องใหม่ ซึ่งมีค่าใช้จ่ายทั้งหมดประมาณ 38,000 บาท เป็น Desktop PC ในราคา 31,800 บาท และ UPS 6,200 บาท เหตุที่แพงกว่าที่คาดการณ์ไว้ 12,000 บาท เพราะการ์ดจอ และ UPS เป็นหลัก

โดยรวมค่อนข้างประทับใจ จะปวดหัวหน่อยตรง TPM ที่ต้องซื้อเพิ่มเติม กับ M/B ที่สายไฟมันไปบังช่อง 5.25″ เลยใส่ optical drive ของเก่าไม่ได้ และสายไฟที่เดินเข้า M/B มันไปดันช่องใส่ HDD ตัวล่าง เลยใส่ HDD ตั้งนั้นได้ 1 ตัวแทนที่จะได้ 2 ตัว (เพื่ออนาคตมีเพิ่ม) แม้มันจะมีช่องให้แขวน HDD ได้อีกตัว แต่ตอนขันน็อตมันลำบากมาก

สำหรับ power supply เหตุผลใช้เลือกแค่ 650W 80+ bronze เพราะหากไปไกลกว่านี้ UPS จะราคาโดดไปไกลมาก (ต้องไปเล่น pure sine wave ไม่งั้นมันทำงานกับ Active PFC watt สูง ๆ แล้วจะมีปัญหา) โดยรวมโหลดไฟของเครื่องไม่เกิน 500W อยู่แล้ว แต่ด้วยความที่เป็น 80+ bronze ก็ต้องเผื่อไปอีกนิด เช่นเดียวกับ UPS ก็ต้องบวกโหลดสูงสุดจาก power supply ออกไปประมาณ 10-25%

ส่วน monitor, keyboard และ mouse ใช้ของเดิมที่มีอยู่แล้วก็ไม่ต้องจ่ายส่วนนี้

สำหรับ OS ก็ซื้อ Windows 10 Pro OEM มาใช้งาน ราคาก็เกือบๆ 4,700 บาท การจ่ายเงินซื้อ OS เมื่อก่อนจะคิดเยอะ แต่เดี่ยวนี้ เหมือนเดินไปซื้อการ์ดจอ หรือ CPU นั่นแหละ เหตุที่ใช้ Pro เพราะเรื่อง Hyper-V และ BitLocker เป็นหลัก เพราะต้องทำงานกับพวก container orchestration เลยจำเป็นต้องใช้พวกนี้

จากที่ว่ามาทั้งหมด จุดประสงค์ในการประกอบเครื่องเองครั้งนี้ คือปรับแนวการทำงานในปีหน้า เป็น Desktop + Notebook แทนการใช้ Notebook อย่างเดียว เพราะสเปคที่เท่ากัน Desktop ราคาถูกกว่าครึ่งหนึ่ง โดยตั้งต้นสเปคเน้น RAM 32GB และ SSD 512GB เป็นที่ตั้ง ส่วน CPU ก็หาตัวที่เข้ากันได้ ใส่ HDD ที่มีอยู่เดิมเข้ามา เพราะในปีหน้าคงต้องทำงานเป็นแบบ container orchestration มากขึ้น เวลาใช้ Notebook ที่มี RAM 16GB เปิด docker-desktop ทำงานก็โดนจองไป 4GB ขั้นต่ำ เวลา LAB อะไรซับซ้อนมันลำบากต้องไปวุ่นวายบน Cloud ที่แพงพอสมควร ซึ่งจากที่ว่ามา ต้องขอบคุณเทคโนโลยี Cloud Storage + Git repository ที่ทำให้การทำงานระหว่าง Desktop และ Notebook สบายขึ้นมาก

ท้ายสุดก็มีติดเรื่องเดียว LINE นิดนึง เพราะฝั่ง Desktop จะใช้ desktop app ปรกติไม่ได้ ต้องใช้ผ่าน Chrome extension แทน ก็พอถูไถไปได้บ้าง

ในด้าน Hardware โดยรวม และ Software จบไป ก็เป็นเรื่องของการจัดระเบียบสายเชื่อมต่อใหม่ เพื่อให้แชร์ จอภาพ, keyboard, mouse และลำโพง USB ระหว่าง Desktop และ Notebook ได้อย่างสะดวกมากขึ้น โดยหัวใจสำคัญ คือ Ugreen USB 3.0 Switcher 2 PC share 4 port USB (ต่อไปเรียก USB Switcher) ซึ่งทำงานร่วมกับจอ Dell ที่ตัวมันรับ input ได้ 4 input เป็น DP x 2 และ HDMI x 2 พร้อม USB 3.0 Hub 4 port ในตัว

เริ่มต้นที่จอ Dell ทำการต่ออุปกรณ์ที่ต้องการแชร์ไปมาระหว่าง Desktop และ Notebook คือ keyboard, mouse และลำโพง USB เข้ากับ USB 3.0 ของจอ แล้วเอาสาย USB 3.0 ของจอภาพต่อกับ USB Switcher

เสร็จแล้วก็เอาสาย USB Switcher ฝั่ง input PC ไปต่อกับ Desktop และ Notebook เวลาสลับก็กดปุ่ม 1 – 2 สลับไปมา ก็ทำให้เราสลับตัว input ระหว่าง Desktop กับ Notebook ได้แล้ว

สำหรับการแสดงผล จอรองรับ 4 input เราให้ Notebook ต่อเข้า input HDMI ส่วน Desktop ก็ต่อเข้า input DP แทน เวลาสลับจอก็ทำผ่านคอนโซลของจอภาพเอา

สำหรับ Notebook มีการต่อ external HDD 2TB x2 ก็ต่อผ่าน USB 3.0 Hub แบบมีแหล่งจ่ายไฟแยกอีกช่องแยกออกไป เพราะเวลาสลับผ่าน USB Switcher จะได้ไม่สลับไปด้วย

จากทั้งหมดที่พยายามทำมา ก็ใช้เวลาอาทิตย์กว่า ๆ ในการทยอยปรับแก้จนออกมาได้อย่างที่เห็น ปีใหม่ในปีหน้า น่าจะทำให้การทำงานสะดวกราบรื่นขึ้นไปอีก

เบื้องหลัง music48voter.com

เว็บ music48voter.com เป็นเว็บลูกของ music48project.com สร้างเพิ่มเติมขึ้นมาเพื่อเป็นช่วยในการรวบรวมคะแนนเพื่อวัดผลในการดำเนินกิจกรรมของกลุ่มแฟนคลับ Music BNK48 ต่อไป

ตัวระบบก็ปั่น “backend กึ่ง front-end” ช่วงปีใหม่ 3-4 วัน แม้ว่าจะทำเก็บมาเรื่อย ๆ แต่ว่ามันแค่โครง ๆ เป็นไอเดียในระดับ user management แล้วลองของเรื่อง .NET Core อีกหนึ่งตัว (มีอีกหลายตัวที่กำลังคิดว่าจะย้ายมาใช้ เพราะมันมีอนาคตกว่า) โดยจากการทำโครงการเล็ก ๆ ตัวนี้ เจ้า .NET Core ตั้งแต่ 2.x มาเป็นต้นมา มันเขียนสะดวก และง่ายขึ้นมาก ความสามารถต่าง ๆ ตาม .NET Framework เกือบทันแล้ว (บางจุดก็ใช้แรงหน่อย แต่รวม ๆ ก็พอไหว) เลยใช้แทน PHP ที่หลัง ๆ ยุ่งกับมันน้อยลงเยอะ

ตัวเว็บนี้ใช้ .NET Core version 2.1 ใช้ร่วมกับฐานข้อมูล MySQL version 5.7 ซึ่งตัวเดิม ๆ ที่ new project มามันไม่รองรับหรอก แต่เราใช้ Class provider อย่าง Pomelo MySql ที่เป็น Class provider ที่ on top บน Entity Framework Core มาทำงานแทน ทำให้ไม่ต้องเขียนคำสั่ง SQL จริง ๆ แต่ทำผ่าน LINQ และ ORM แทนซึ่งจบในตัว

สำหรับ background woker ใช้ Hangfire ตัว Free ก็เพียงพอ สำหรับใช้พวกส่งอีเมล เพื่อจัดคิวในการส่ง และแก้ปัญหาเรื่อง blocking UI คือกดแล้วรู้เลยว่าสมัครแล้ว ส่วนส่งอีเมลยืนยันการสมัครที่เราไปต่อ 3rd party SMTP ภายนอกที่มักทำงานช้า ในระดับหลักเกือบวินาที มันทำให้ฝั่งเว็บค้างไปแป็บนึงมาช่วยให้มันไม่ต้องรอจุดนั้น แถมยังลดปัญหา waiting ที่ thread ช่วงส่งเมล ส่วนในหน้า Ranking ตัว report เนี่ย มันใช้พลังในการ summary เยอะ ก็ใช้ schedule woker ที่อยู่ในตัว Hangfire อยู่แล้วทำ ให้มันทำงานทุก ๆ 5 – 10 นาทีเพื่อสร้างข้อมูลใหม่ใน report table แทน แล้วเวลาแสดงผลก็ให้มาดึงที่ตัวนี้แทน การแสดงผลตารางดังกล่าวจะได้ไม่หนักฐานข้อมูล

ในส่วนของ Front-end Lib ก็ใช้ Bootstrap 4 เอาง่าย ๆ โดยจะมึนหัวนิดนึงตอน upgrade มาใช้ เพราะตัว default ของ .NET Core 2.1 คือ Bootstrap 3 ก็เลยต้องใช้ bower มาช่วยในการจัดการตรงนี้ แก้ default style ที่มันค้างใน Framework อยู่เยอะพอสมควร แต่แลกกับการทำงานดีง่ายกว่ามาก สำหรับทีมออกแบบหน้าเว็บ ที่เป็นอีกทีมหนึ่ง ที่เค้าใช้ Bootstrap 4 เข้ามาช่วยกันแก้ไข และตบแต่งเพิ่มเติมให้ออกมาสวยงามขึ้นอีก ทั้ง layout และ stylesheet ถ้าใครติดตามตัวเว็บช่วงนั้นจะเห็นว่าเราปรับปรุงตลอดเวลา ยิ่งช่วงวันท้าย ๆ เรามีการปรับโทนสีของเว็บใหม่ทั้งหมด เพื่อให้เข้ากับแนวทางการทำกิจกรรมช่วงสุดท้าย

ตัว Binary ตอน deploy ขึ้นทำงานบน CentOS 7 ทั้งฝั่ง App และ Database โดยตัว App วิ่งผ่าน HAProxy ที่ทำหน้าที่ reverse proxy อีกที (เป็น best practice ที่ควรทำ เพื่อสำหรับ HA และทำ hot deploy ได้)

สำหรับขั้นตอนการตรวจสอบโค้ดโหวตในฝั่งแอปก็ไปแกะเอามาจาก javascript ของฝั่งเว็บโหวตเพื่อเอามาตรวจสอบอีกรอบก่อนเอาลงฐานข้อมูลเพื่อลดงานหลักบ้าน ส่วนงานตรวจสอบอีกชั้นว่าโหวต หรือไม่ก ็ทำระบบหลังบ้านให้ทีมงานมาตรวจสอบจาก screen recorder อีกที ซึ่งยุ่งยากหน่อย แต่มันเป็นทางเดียว เพราะจะให้แฟนคลับแต่ละคนมากรอก username และ password เพื่อให้เราไปดึง token ผ่าน OAuth2 แล้วเอาไปดึงข้อมูลจาก API ออกจากเว็บโหวตโดยตรงคงมีไม่กี่คนจะมาใช้

สำหรับตัวเนื้อหาจะมีทีมงานอีกทีมลงมาช่วยกันหลายสิบคน เพื่อคอยค้นหากิจกรรมของแฟนคลับมาลงในหน้า Activity เพื่อเป็นจุดรวมข้อมูล และรวมถึงหน้าข้อมูล-รายละเอียดที่เป็นภาษาญี่ปุ่นที่มีการเพิ่มเติมเข้ามาในช่วงหลัก เพื่อช่วยให้แฟนคลับที่เป็นคนญี่ปุ่นได้เข้าร่วมทำกิจกรรมได้

มีเรื่องฮา ๆ และตื่นเต้นคือ ตอนเปิดให้สมัครวันแรก คนเข้ามาเว็บค่อนข้างเยอะมาก หลักพันกว่าคน แล้วตอนนั้นหน้าลงทะเบียนดันมี bug เกิดขึ้น เลยต้อง hot deploy ใหม่ในช่วงนั้นไป ทำเอาคนสมัครตอนนั้นบ่นกัน timeline ไหม้เลย (ToT)/~~~

แล้วระหว่างการเปิดให้ใช้งานก็มีปัญหาอยู่เรื่อย ๆ เพราะระบบจัดการเว็บบางจุดก็มี bug อยู่ แต่ด้วยความที่งานส่วนตัวก็มี ทำให้บางจุดก็ไม่ได้แก้ หรือแก้ข้อมูลโดยตรงผ่านตัวจัดการฐานข้อมูลตรง ๆ ไปแทน ส่วนหลัก ๆ ที่เจอเยอะ คือลงทะเบียนแล้วไม่ได้ยืนยันการลงทะเบียนที่อยู่ในอีเมลที่ส่งไปยังอีเมลตอนสมัคร ทำให้เข้าใช้งานไม่ได้ ซึ่งเหตุผลที่ต้องยืนยันอีเมลด้วย เพราะต้องใช้เพื่อเป็นช่องทางติดต่อที่ต้องใช้งานได้จริง เพื่อรับของตอนกิจกรรมสิ้นสุดลง เลยจำเป็นต้องมีขั้นตอนนี้

อันนี้บันทึกเท่าที่คิดออก ณ ตอนนี้ ไม่รู้ตกหล่นอะไรไหมนะ ԅ(¯﹃¯ԅ)

ความสามารถอะไรบ้างใน Windows 10 May 2019 Update (version 1903) ที่ถูกตัดออก หยุดทำงาน หรือหยุดพัฒนา

เมื่อไม่กี่วันก่อน Microsoft ปล่อย Windows 10 May 2019 Update (version 1903) ออกมาให้อัพเดทกัน สำหรับความสามารถใหม่ ๆ คงไม่ต้องพูดถึงกันมากนัก แต่ก็มีหลาย ๆ ความสามารถที่ถูกตัดออก หยุดทำงาน หรือหยุดพัฒนาไปเช่นกัน เรามาดูกันว่ามีอะไรบ้าง

  • Windows 2000 Display Driver Model (XDDM) หรือ XDDM-based remote display driver บน Remote Desktop Services จะถูกนำออกไปในอนาคต และแนะนำให้ย้ายมาใช้งาน Windows Display Driver Model (WDDM) แทน
  • แอป messaging บน Windows จะไม่สามารถ sync ข้อความ SMS กับ Windows Mobile ได้อีกต่อไป
  • Taskbar settings roaming จะไม่มีการพัฒนาต่อ และในอนาคตจะปิดการทำงานส่วนนี้
  • การเชื่อมต่อกับ Wi-Fi ที่ใช้การเข้ารหัสแบบ WEP หรือ TKIP ซึ่งเป็นการเชื่อมต่อที่ไม่ปลอดภัย จะมีข้อความแจ้งเตือนเพื่อแนะนำให้ใช้ WPA2 หรือ WPA3 และในอนาคตการเชื่อตม่อด้วยเทคโนโลยีที่ไม่ปลอดภัยนี้ จะถูกปิดในอนาคต
  • Windows To Go จะไม่ได้รับการพัฒนาต่อ
  • แอป Print 3D จะไม่มีการพัฒนาต่อ และถูกแทนที่ด้วยแอป 3D Builder แทนโดยสามารถโหลดได้ผ่าน Microsoft Store

ข้อมูลทั้งหมดจาก Features removed or planned for replacement starting with Windows 10, version 1903

แนะนำการใช้ HTTP Strict Transport Security (HSTS) เพื่อให้เว็บเบราว์เซอร์ติดต่อผ่านช่องทางเข้ารหัสเท่านั้น

ไม่ได้เขียนเรื่องเทคโนโลยีมานาน รอบนี้เป็นบทความที่ดองมานานมาก รอบนี้เป็นบทความที่ต่อจากเรื่อง HTTP Public Key Pinning (HPKP) เพื่อป้องกัน Certification Authority ออก TLS Certificate ซ้ำซ้อน ที่เขียนไปก่อนหน้านี้

โดย HTTP Strict Transport Security (ต่อไปจะเรียกว่า HSTS) เป็นการเพิ่มประสิทธิภาพในรักษาความปลอดภัย เพื่อบอกให้เว็บเบราว์เซอร์ที่กำลังเข้ามาใช้บริการเว็บไซต์ ต้องทำงานผ่านช่องทางเข้ารหัส Hypertext Transfer Protocol Secure เท่านั้น (ต่อไปจะเรียกว่า HTTPS)

โดยจะเพิ่มชุดคำสั่งด้านล่างลงใน HTTP Header เพื่อส่งไปบอกเว็บเบราว์เซอร์

Strict-Transport-Security: max-age=expireTime [; includeSubDomains][; preload]

อธิบายโค้ดแต่ละส่วน

  • max-age required
    ระยะเวลาที่บอก client ว่าจะให้จำว่าควรเข้าเว็บผ่านช่องทางเข้ารหัส HTTPS นานเท่าใด โดยหน่วยเป็นวินาที
  • includeSubDomains Optional
    ระบุว่าการใช้งาน HSTS ดังกล่าวรวมถึง subdomain ด้วย
  • preload Optional
    หากในตัว domain ข้างต้น มีการเรียกใช้ข้อมูลใด ๆ ที่โหลดมาจาก domain ที่อยู่ในรายการ HSTS preload service บน browser ให้ใช้การเชื่อมต่อผ่านช่องทางเข้ารหัส HTTPS เช่นกัน โดย HSTS preload service นี้ Google เป็นคนดูแลรายชื่อ domain ดังกล่าวผ่าน https://hstspreload.org ซึ่งตอนนี้มี Browser อย่าง Chrome, Firefox, Opera, Safari, IE 11 และ Edge ที่ใช้รายการ domain ดังกล่าวใส่ลงใน browser ตัวเอง ซึ่งมักถูกแนะนำให้ใช้เสมอหากเราใช้ 3rd party อย่าง Javascript หรือ CSS ที่โหลดผ่าน CDN ต่าง ๆ

การใช้งาน HSTS ในเว็บเซิร์ฟเวอร์

พอได้ข้อมูลครบตามนี้ ก็เอาไปใส่ในเว็บเซิร์ฟเวอร์ โดยบทความจะยกตัวอย่าง 4 ตัว คือ Apache, Nginx, IIS และ .NET Core

Apache – (ต้องเปิด mod_headers ด้วย) เพิ่มในส่วนของ Web Server config อาจจะใส่ในส่วนของ vhost ก็ได้

Header always set Strict-Transport-Security: max-age=31536000

หรือหากมีเพิ่มพารามิเตอร์

Header always set Strict-Transport-Security: max-age=31536000; includeSubDomains

Nginx – (ต้องเปิด ngx_http_headers_module ด้วย) เพิ่มในส่วนของ Web Server config อาจจะใส่ในส่วนของ vhost ก็ได้

add_header Strict-Transport-Security: max-age=31536000

หรือหากมีเพิ่มพารามิเตอร์

add_header Strict-Transport-Security: max-age=31536000; includeSubDomains

IIS – แก้ไขที่ Web.config

<httpProtocol>
 <customHeaders>
 <add name="Strict-Transport-Security" value="max-age=31536000" />
 </customHeaders>
</httpProtocol>

หรือหากมีเพิ่มพารามิเตอร์

<httpProtocol>
 <customHeaders>
 <add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains" />
 </customHeaders>
</httpProtocol>

ASP.NET Core 2.1 หรือมากกว่า เพิ่มเติมดังนี้

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    ...
    app.UseHsts();
    ...
}

การแก้ไขพารามิเตอร์ทำผ่าน method ชื่อ ConfigureServices ได้ตามด้านล่าง

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddHsts(options =>
    {
        options.Preload = true;
        options.IncludeSubDomains = true;
        options.MaxAge = TimeSpan.FromDays(365);
    });
    ...
}

จากข้อมูลการใช้งาน และตัวอย่างทั้งหมด การเพิ่มเติมดังกล่าวมีประโยชน์ในการช่วยให้ผู้ใช้งาน เข้าเว็บผ่าน HTTPS ได้ปลอดภัยขึ้น หากในครั้งแรกที่เข้าเว็บได้รับ HTTP Header ข้างต้นอย่างถูกต้อง ในครั้งต่อไปตัวเว็บเบราว์เซอร์จะเข้าผ่าน URL protocal “https://” ทันที โดยไม่ต้องผ่าน “http://” อีก ทำให้ลดการถูก man-in-the-middle attacker เพื่อดังฟังข้อมูลอื่น ๆ ระหว่างการเปลี่ยนผ่านจาก URL protocal “http://” ไปยัง “https://” ได้ รวมไปถึงการโดน intercept traffic เพื่อให้เรารับ Certificate ที่ไม่ถูกต้องระหว่างการเข้าถึงหน้า HTTPS ได้