มิดเดิลแวร์เป็นคำทั่วไปสำหรับซอฟต์แวร์ที่ทำหน้าที่ "กาวร่วมกัน" แยกกันมักจะซับซ้อนและมีอยู่แล้วโปรแกรมที่มีอยู่แล้ว ส่วนประกอบซอฟต์แวร์บางส่วนที่เชื่อมต่อกับมิดเดิลแวร์ ได้แก่ แอพพลิเคชั่นระดับองค์กรและบริการเว็บ
อ้างอิง:
* http://searchsoa.techtarget.com/definition/middleware
* http://www.webopedia.com/TERM/M/middleware.html
* http://www.softwareag.com/blog/reality_check/index.php/integration-insights/middleware-for-my-mom-or-kids-guide-to-what-i-do/
* http://www.networkcomputing.com/netdesign/cdmwdef.htm
* https://en.wikipedia.org/wiki/Middleware
มิดเดิลแวร์คืออะไร?
มิดเดิลแวร์เป็นรหัสที่มีอยู่ระหว่างคำขอและการตอบกลับและที่สามารถใช้คำขอที่เข้ามาดำเนินการตามและเสร็จสิ้นการตอบสนองหรือส่งมอบการมอบหมายไปยังมิดเดิลแวร์ถัดไปในคิว
https://github.com/zendframework/zend-stratigility/blob/master/doc/book/middleware.md
HTTP Middleware เป็นกลไกที่สะดวกสำหรับการกรองคำขอ HTTP ที่ป้อนแอปพลิเคชันของคุณ ตัวอย่างเช่น Laravel รวมถึงมิดเดิลแวร์ที่ตรวจสอบผู้ใช้แอปพลิเคชันของคุณได้รับการรับรองความถูกต้อง หากผู้ใช้ไม่ได้รับการรับรองความถูกต้องมิดเดิลแวร์จะเปลี่ยนเส้นทางผู้ใช้ไปยังหน้าจอเข้าสู่ระบบ อย่างไรก็ตามหากผู้ใช้ได้รับการรับรองความถูกต้องมิดเดิลแวร์จะอนุญาตให้คำขอดำเนินการต่อไปในแอปพลิเคชันต่อไป
http://laravel.com/docs/master/middleware
Silex ช่วยให้คุณเรียกใช้รหัสซึ่งเปลี่ยนพฤติกรรม Silex เริ่มต้นในขั้นตอนต่าง ๆ ในระหว่างการจัดการคำขอผ่าน Middlewares:
http://silex.sensiolabs.org/doc/middlewares.html
วัตถุประสงค์ของมิดเดิลแวร์คือการตรวจสอบวิเคราะห์หรือแก้ไขสภาพแวดล้อมแอปพลิเคชันการร้องขอและการตอบสนองก่อนและ/หรือหลังจากแอปพลิเคชัน Slim ถูกเรียกใช้
http://docs.slimframework.com/middleware/overview/
ข้อความ HTTP ทั้งหมดประกอบด้วยรุ่นโปรโตคอล HTTP ที่ใช้ส่วนหัวและเนื้อหาข้อความ คำขอสร้างบนข้อความเพื่อรวมวิธี HTTP ที่ใช้ในการร้องขอและ URI ที่มีการร้องขอ การตอบกลับรวมถึงรหัสสถานะ HTTP และวลีเหตุผล
-
ไม่ว่าคุณจะเป็นโปรแกรมเมอร์หรือไม่คุณได้เห็นมันทุกที่บนเว็บ ในขณะนี้แถบที่อยู่ของเบราว์เซอร์ของคุณจะแสดงสิ่งที่เริ่มต้นด้วย "http: //" แม้แต่สคริปต์ Hello World แรกของคุณก็ส่งส่วนหัว HTTP โดยที่คุณไม่ทราบ ในบทความนี้เราจะเรียนรู้เกี่ยวกับพื้นฐานของส่วนหัว HTTP และวิธีที่เราสามารถใช้งานได้ในเว็บแอปพลิเคชันของเรา
การตอบสนอง HTTP ที่เซิร์ฟเวอร์ส่งกลับไปยังไคลเอนต์มีส่วนหัวที่ระบุประเภทของเนื้อหาในเนื้อหาของการตอบสนองเซิร์ฟเวอร์ที่ส่งการตอบสนองจำนวนไบต์อยู่ในร่างกายเมื่อส่งการตอบกลับ ฯลฯ PHP และ Apache ดูแลส่วนหัวให้คุณ ระบุเอกสารเป็น HTML เว็บแอปพลิเคชันส่วนใหญ่ไม่จำเป็นต้องตั้งส่วนหัวด้วยตัวเอง อย่างไรก็ตามหากคุณต้องการส่งสิ่งที่ไม่ใช่ HTML กลับมาตั้งค่าเวลาหมดอายุสำหรับหน้าเว็บเปลี่ยนเส้นทางเบราว์เซอร์ของลูกค้าหรือสร้างข้อผิดพลาด HTTP ที่เฉพาะเจาะจงคุณจะต้องใช้ฟังก์ชันส่วนหัว ()
*How to See HTTP Headers*
* Firebug extensions to analyze HTTP headers.
1. Turn in Firebug
2. Click Net
3. Click Headers
Ref:
* http://docstore.mik.ua/orelly/webprog/php/ch07_05.htm
* http://code.tutsplus.com/tutorials/http-headers-for-dummies--net-8039
*Headers already sent: Why does it happen?*
To understand why headers must be sent before output it's necessary to look at a typical HTTP response. PHP scripts mainly generate HTML content, but also pass a set of HTTP/CGI headers to the webserver:
HTTP/1.1 200 OK
Powered-By: PHP/5.3.7
Vary: Accept-Encoding
Content-Type: text/html; charset=utf-8
<html><head><title>PHP page output page</title></head>
<body><h1>Content</h1> <p>Some more output follows...</p>
and <a href="/"> <img src=internal-icon-delayed> </a>
The page/output always follows the headers. PHP has to pass the headers to the webserver first. It can only do that once. After the double linebreak it can nevermore amend them.
When PHP receives the first output (print, echo, <html>) it will flush all collected headers. Afterwards it can send all the output it wants. But sending further HTTP headers is impossible then.
PHP ไม่มีการสนับสนุนในตัวสำหรับข้อความ HTTP
-
สตรีม PHP เป็นวิธีที่สะดวกและแพร่หลายที่สุดในการส่งคำขอ HTTP แต่มีข้อ จำกัด มากมายเกี่ยวกับการกำหนดค่าการสนับสนุน SSL อย่างถูกต้องและให้อินเทอร์เฟซที่ยุ่งยากรอบ ๆ การตั้งค่าสิ่งต่าง ๆ เช่นส่วนหัว Curl จัดเตรียมชุดคุณสมบัติที่สมบูรณ์และขยาย แต่เนื่องจากไม่ใช่ส่วนขยายเริ่มต้นจึงไม่ปรากฏ ส่วนขยาย HTTP ประสบปัญหาเช่นเดียวกับ Curl รวมถึงความจริงที่ว่ามันมีตัวอย่างของการใช้งานน้อยลง
ห้องสมุดไคลเอนต์ HTTP ที่ทันสมัยส่วนใหญ่มีแนวโน้มที่จะเป็นนามธรรมการใช้งานเพื่อให้แน่ใจว่าพวกเขาสามารถทำงานกับสภาพแวดล้อมที่พวกเขาดำเนินการและข้ามชั้นใด ๆ ข้างต้น
หมายเหตุ:
cURL allows you to connect and communicate to many different types of servers with many different types of protocols.
(http://php.net/manual/en/intro.curl.php)
PHP ใช้เซิร์ฟเวอร์ APIs (SAPI) เพื่อตีความคำขอ HTTP ที่เข้ามาการป้อนข้อมูลจอมพลและส่งผ่านการจัดการไปยังสคริปต์ การออกแบบ SAPI ดั้งเดิมสะท้อนให้เห็นถึงอินเทอร์เฟซเกตเวย์ทั่วไปซึ่งจะส่งข้อมูลจอมพลและผลักดันให้เข้าสู่ตัวแปรสภาพแวดล้อมก่อนที่จะส่งมอบการมอบหมายไปยังสคริปต์ สคริปต์จะดึงจากตัวแปรสภาพแวดล้อมเพื่อประมวลผลคำขอและส่งคืนการตอบกลับ
การออกแบบ SAPI ของ PHP บทคัดย่อแหล่งอินพุตทั่วไปเช่นคุกกี้อาร์กิวเมนต์สตริงแบบสอบถามและเนื้อหาโพสต์ที่เข้ารหัส URL ผ่าน superglobals ($ _cookie, $ _get และ $ _post ตามลำดับ)
-
การใช้งานโดยตรงของ superglobals มีข้อกังวลมากมาย ก่อนอื่นสิ่งเหล่านี้ไม่แน่นอนซึ่งทำให้เป็นไปได้สำหรับไลบรารีและรหัสในการเปลี่ยนแปลงค่าและเปลี่ยนสถานะสำหรับแอปพลิเคชัน นอกจากนี้ superglobals ยังทำให้การทดสอบหน่วยและการรวมการรวมเป็นเรื่องยากและเปราะซึ่งนำไปสู่การเสื่อมสภาพคุณภาพของรหัส
-
ในที่สุดเมื่อพูดถึงการตอบสนองฝั่งเซิร์ฟเวอร์ PHP เข้ามาในแบบของตัวเอง: เนื้อหาใด ๆ ที่ปล่อยออกมาก่อนที่จะเรียกส่วนหัว () จะส่งผลให้การโทรนั้นกลายเป็นแบบไม่มี ขึ้นอยู่กับการตั้งค่าการรายงานข้อผิดพลาดซึ่งมักจะหมายถึงส่วนหัวและ/หรือสถานะการตอบกลับไม่ถูกส่งอย่างถูกต้อง วิธีหนึ่งในการแก้ไขปัญหานี้คือการใช้คุณสมบัติบัฟเฟอร์เอาท์พุทของ PHP แต่การทำรังของบัฟเฟอร์เอาท์พุทอาจกลายเป็นปัญหาและยากต่อการดีบัก เฟรมเวิร์กและแอปพลิเคชันจึงมีแนวโน้มที่จะสร้างการตอบสนองที่เป็นนามธรรมสำหรับการรวมส่วนหัวและเนื้อหาที่สามารถปล่อยออกมาได้ในครั้งเดียว - และสิ่งที่เป็นนามธรรมเหล่านี้มักจะเข้ากันไม่ได้
Ref: http://www.php-fig.org/psr/psr-7/meta/
คุณสามารถใช้ตัวแปร Superglobals (เป็น $ _get และ $ _post) แต่เป็นสถานะที่ไม่แน่นอนทั่วโลก พร้อมกับหน่วยนี้และการทดสอบการรวมรหัสของคุณจะยาก
ด้วยเหตุผลเหล่านี้เฟรมเวิร์ก PHP จำนวนมากจึงตัดสินใจที่จะใช้การงดเพื่อเป็นตัวแทนข้อความ HTTP (ดูตัวอย่าง Symfony httpfoundation หรือ Zend HTTP)
สิ่งนี้นำไปสู่สถานการณ์ที่แอปพลิเคชันใด ๆ ขึ้นอยู่กับการใช้งานข้อความ HTTP เฉพาะดังนั้นจึงแทบจะไม่สามารถใช้งานได้ในโครงการที่สร้างขึ้นโดยใช้เฟรมเวิร์กอื่น ๆ
นี่คือเหตุผลที่ชุดอินเทอร์เฟซทั่วไปช่วยให้ข้อความนามธรรม HTTP และทำงานกับพวกเขาในวิธีการไม่เชื่อเรื่องพระเจ้า
Ref: http://stackoverflow.com/questions/32805681/php-why-http-message-implementations
HTTP ใช้ในการส่งทรัพยากรไม่ใช่แค่ไฟล์ ทรัพยากรคือข้อมูลบางส่วนที่สามารถระบุได้โดย URL (เป็น R ใน URL) ทรัพยากรชนิดที่พบมากที่สุดคือไฟล์ แต่ทรัพยากรอาจเป็นผลลัพธ์การสืบค้นที่สร้างขึ้นแบบไดนามิกผลลัพธ์ของสคริปต์ CGI ซึ่งเป็นเอกสารที่มีอยู่ในหลายภาษาหรืออย่างอื่น
อ้างอิง:
* http://www.w3schools.com/tags/ref_httpmessages.asp
* https://www.jmarshall.com/easy/http/