Middleware adalah istilah umum untuk perangkat lunak yang berfungsi untuk "merekatkan" program yang terpisah, seringkali kompleks dan sudah ada. Beberapa komponen perangkat lunak yang sering terhubung dengan middleware termasuk aplikasi perusahaan dan layanan web.
Ref:
* 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
Apa itu middleware?
Middleware adalah kode yang ada antara permintaan dan respons, dan yang dapat mengambil permintaan yang masuk, melakukan tindakan berdasarkan itu, dan menyelesaikan respons atau meneruskan delegasi ke middleware berikutnya dalam antrian.
https://github.com/zendframework/zend-stratigility/blob/master/doc/book/middleware.md
HTTP Middleware menyediakan mekanisme yang nyaman untuk memfilter permintaan HTTP yang memasukkan aplikasi Anda. Misalnya, Laravel menyertakan middleware yang memverifikasi pengguna aplikasi Anda diautentikasi. Jika pengguna tidak diautentikasi, middleware akan mengarahkan kembali pengguna ke layar login. Namun, jika pengguna diautentikasi, middleware akan memungkinkan permintaan untuk melanjutkan lebih jauh ke dalam aplikasi.
http://laravel.com/docs/master/middleware
Silex memungkinkan Anda untuk menjalankan kode, yang mengubah perilaku Silex default, pada tahap yang berbeda selama penanganan permintaan melalui Perangkat Midge:
http://silex.sensiolabs.org/doc/middlewares.html
Tujuan middleware adalah untuk memeriksa, menganalisis, atau memodifikasi lingkungan aplikasi, permintaan, dan respons sebelum dan/atau setelah aplikasi ramping dipanggil.
http://docs.slimframework.com/middleware/overview/
Semua pesan HTTP terdiri dari versi protokol HTTP yang digunakan, header, dan badan pesan. Permintaan dibangun di atas pesan untuk memasukkan metode HTTP yang digunakan untuk membuat permintaan, dan URI yang diajukan permintaan. Respons termasuk kode status HTTP dan frasa alasan.
...
Apakah Anda seorang programmer atau tidak, Anda telah melihatnya di mana -mana di web. Pada saat ini bilah alamat browser Anda menunjukkan sesuatu yang dimulai dengan "http: //". Bahkan skrip Hello World pertama Anda mengirim header http tanpa Anda sadari. Dalam artikel ini kita akan belajar tentang dasar -dasar header HTTP dan bagaimana kita dapat menggunakannya dalam aplikasi web kita.
Respons HTTP yang dikirim server kembali ke klien berisi header yang mengidentifikasi jenis konten dalam tubuh respons, server yang mengirim respons, berapa banyak byte yang ada di dalam tubuh, ketika respons dikirim, dll. PHP dan Apache biasanya merawat header untuk Anda, mengidentifikasi dokumen sebagai HTML , menghitung panjang HTM, dan HTM. Sebagian besar aplikasi web tidak perlu mengatur header sendiri. Namun, jika Anda ingin mengirim kembali sesuatu yang bukan HTML, atur waktu kedaluwarsa untuk halaman, arahkan kembali browser klien, atau hasilkan kesalahan HTTP tertentu, Anda harus menggunakan fungsi header ().
*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 tidak memiliki dukungan bawaan untuk pesan HTTP.
...
Aliran PHP adalah cara yang paling nyaman dan ada di mana -mana untuk mengirim permintaan HTTP, tetapi menimbulkan sejumlah batasan sehubungan dengan mengonfigurasi dukungan SSL dengan benar, dan menyediakan antarmuka yang rumit di sekitar pengaturan hal -hal seperti header. Curl menyediakan set fitur yang lengkap dan diperluas, tetapi, karena ini bukan ekstensi default, sering tidak ada. Perpanjangan HTTP mengalami masalah yang sama dengan Curl, serta fakta bahwa ia secara tradisional memiliki lebih sedikit contoh penggunaan.
Sebagian besar perpustakaan klien HTTP modern cenderung mengabstraksi implementasi, untuk memastikan mereka dapat bekerja pada lingkungan apa pun yang mereka lakukan, dan di salah satu lapisan di atas.
Catatan:
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 menggunakan API Server (SAPI) untuk menginterpretasikan permintaan HTTP yang masuk, input marshal, dan memberikan penanganan ke skrip. Desain SAPI asli mencerminkan Antarmuka Gateway Umum, yang akan meminta data marshal dan mendorongnya ke variabel lingkungan sebelum meneruskan delegasi ke skrip; Skrip kemudian akan menarik dari variabel lingkungan untuk memproses permintaan dan mengembalikan respons.
Desain SAPI PHP Abstrak Sumber input umum seperti cookie, argumen string kueri, dan konten posting yang dikodekan URL melalui superglobal ($ _cookie, $ _get, dan $ _post, masing-masing), memberikan lapisan kenyamanan untuk pengembang web.
...
Penggunaan langsung superglobal memiliki sejumlah kekhawatiran. Pertama, ini dapat berubah, yang memungkinkan perpustakaan dan kode untuk mengubah nilai, dan dengan demikian mengubah status untuk aplikasi. Selain itu, superglobal membuat pengujian unit dan integrasi menjadi sulit dan rapuh, yang mengarah pada degradasi kualitas kode.
...
Akhirnya, ketika datang ke respons sisi server, PHP dengan caranya sendiri: konten apa pun yang dipancarkan sebelum panggilan ke header () akan menghasilkan panggilan itu menjadi no-op; Bergantung pada pengaturan pelaporan kesalahan, ini sering kali dapat berarti header dan/atau status respons tidak dikirim dengan benar. Salah satu cara untuk mengatasi hal ini adalah dengan menggunakan fitur buffering output PHP, tetapi bersarang buffer output dapat menjadi masalah dan sulit untuk debug. Kerangka kerja dan aplikasi dengan demikian cenderung membuat abstraksi respons untuk agregat header dan konten yang dapat dipancarkan sekaligus - dan abstraksi ini seringkali tidak kompatibel.
Ref: http://www.php-fig.org/psr/psr-7/meta/
Anda dapat menggunakan variabel superglobal (sebagai $ _get dan $ _post), tetapi mereka adalah keadaan yang dapat berubah secara global. Seiring dengan unit ini dan pengujian integrasi kode Anda menjadi sulit.
Untuk alasan ini, banyak kerangka kerja PHP memutuskan untuk menerapkan abstaksi untuk mewakili pesan HTTP (lihat misalnya Symfony httpfoundation atau Zend http).
Hal ini menyebabkan situasi di mana setiap aplikasi didasarkan pada implementasi spesifik dari pesan HTTP, sehingga hampir tidak dapat digunakan dalam proyek yang dibangun menggunakan kerangka kerja lainnya.
Inilah sebabnya mengapa serangkaian antarmuka umum membantu abstrak pesan HTTP dan bekerja dengannya dengan cara agnostik kerangka kerja.
Ref: http://stackoverflow.com/questions/32805681/php-why-http-message-implementations
HTTP digunakan untuk mengirimkan sumber daya, bukan hanya file. Sumber daya adalah beberapa informasi yang dapat diidentifikasi oleh URL (ini adalah R dalam URL). Jenis sumber daya yang paling umum adalah file, tetapi sumber daya mungkin juga merupakan hasil kueri yang dihasilkan secara dinamis, output dari skrip CGI, dokumen yang tersedia dalam beberapa bahasa, atau sesuatu yang lain.
Ref:
* http://www.w3schools.com/tags/ref_httpmessages.asp
* https://www.jmarshall.com/easy/http/