X-Git-Url: https://git.brokenzipper.com/gitweb?p=chaz%2Ftalk-introduction-to-psgi;a=blobdiff_plain;f=slides.html;fp=slides.html;h=c5390b0e0c588ac1ba7fa22cfad90b07d4f023a6;hp=fef0bc2a56e47c841dfd48358d97a74927100f8d;hb=4124b372b520d632cc0acf2996912019084bb76b;hpb=8f7a885d8b9a7ec620348ee62f83c1872a763877 diff --git a/slides.html b/slides.html index fef0bc2..c5390b0 100644 --- a/slides.html +++ b/slides.html @@ -216,7 +216,7 @@ layout: true --- -### Hypertext Transfer Protocol +### **H**yper**t**ext **T**ransfer **P**rotocol -- - Invented by Tim Berners-Lee in 1989, first specified as [HTTP 0.9](https://www.w3.org/Protocols/HTTP/AsImplemented.html) in 1991. @@ -542,7 +542,7 @@ layout: true --- -### Common Gateway Interface +### **C**ommon **G**ateway **I**nterface -- - Created by the NCSA in 1993. @@ -581,25 +581,25 @@ print "Your IP address is ${client_ip}."; .condensed[ .col[ -- AUTH_TYPE -- CONTENT_LENGTH -- CONTENT_TYPE -- GATEWAY_INTERFACE -- PATH_INFO -- PATH_TRANSLATED -- QUERY_STRING -- REMOTE_ADDR -- REMOTE_HOST +- `AUTH_TYPE` +- `CONTENT_LENGTH` +- `CONTENT_TYPE` +- `GATEWAY_INTERFACE` +- `PATH_INFO` +- `PATH_TRANSLATED` +- `QUERY_STRING` +- `REMOTE_ADDR` +- `REMOTE_HOST` ] .col[ -- REMOTE_IDENT -- REMOTE_USER -- REQUEST_METHOD -- SCRIPT_NAME -- SERVER_NAME -- SERVER_PORT -- SERVER_PROTOCOL -- SERVER_SOFTWARE +- `REMOTE_IDENT` +- `REMOTE_USER` +- `REQUEST_METHOD` +- `SCRIPT_NAME` +- `SERVER_NAME` +- `SERVER_PORT` +- `SERVER_PROTOCOL` +- `SERVER_SOFTWARE` - other "protocol-specific" variables ] ] @@ -621,9 +621,9 @@ print "Your IP address is ${client_ip}."; .condensed[ .col[ -- Content-Type -- Location -- Status +- `Content-Type` +- `Location` +- `Status` - other "protocol-specific" header fields ] ] @@ -1198,38 +1198,38 @@ layout: true .condensed[ .col[ -- HTTP_ACCEPT -- HTTP_ACCEPT_ENCODING -- HTTP_ACCEPT_LANGUAGE -- HTTP_CACHE_CONTROL -- HTTP_CONNECTION -- HTTP_DNT -- HTTP_HOST -- HTTP_USER_AGENT -- PATH_INFO -- QUERY_STRING -- REMOTE_ADDR -- REMOTE_PORT -- REQUEST_METHOD -- REQUEST_URI -- SCRIPT_NAME +- `HTTP_ACCEPT` +- `HTTP_ACCEPT_ENCODING` +- `HTTP_ACCEPT_LANGUAGE` +- `HTTP_CACHE_CONTROL` +- `HTTP_CONNECTION` +- `HTTP_DNT` +- `HTTP_HOST` +- `HTTP_USER_AGENT` +- `PATH_INFO` +- `QUERY_STRING ` +- `REMOTE_ADDR` +- `REMOTE_PORT` +- `REQUEST_METHOD` +- `REQUEST_URI` +- `SCRIPT_NAME` ] .col[ -- SERVER_NAME -- SERVER_PORT -- SERVER_PROTOCOL -- psgi.errors -- psgi.input -- psgi.multiprocess -- psgi.multithread -- psgi.nonblocking -- psgi.run_once -- psgi.streaming -- psgi.url_scheme -- psgi.version -- psgix.harakiri -- psgix.input.buffered -- psgix.io +- `SERVER_NAME` +- `SERVER_PORT` +- `SERVER_PROTOCOL` +- `psgi.errors` +- `psgi.input` +- `psgi.multiprocess` +- `psgi.multithread` +- `psgi.nonblocking` +- `psgi.run_once` +- `psgi.streaming` +- `psgi.url_scheme` +- `psgi.version` +- `psgix.harakiri` +- `psgix.input.buffered` +- `psgix.io` ] ] @@ -1237,38 +1237,38 @@ layout: true .condensed[ .col[ -- .highlight[HTTP_ACCEPT] -- .highlight[HTTP_ACCEPT_ENCODING] -- .highlight[HTTP_ACCEPT_LANGUAGE] -- .highlight[HTTP_CACHE_CONTROL] -- .highlight[HTTP_CONNECTION] -- .highlight[HTTP_DNT] -- .highlight[HTTP_HOST] -- .highlight[HTTP_USER_AGENT] -- .highlight[PATH_INFO] -- .highlight[QUERY_STRING ] -- .highlight[REMOTE_ADDR] -- .highlight[REMOTE_PORT] -- .highlight[REQUEST_METHOD] -- .highlight[REQUEST_URI] -- .highlight[SCRIPT_NAME] +- .highlight[`HTTP_ACCEPT`] +- .highlight[`HTTP_ACCEPT_ENCODING`] +- .highlight[`HTTP_ACCEPT_LANGUAGE`] +- .highlight[`HTTP_CACHE_CONTROL`] +- .highlight[`HTTP_CONNECTION`] +- .highlight[`HTTP_DNT`] +- .highlight[`HTTP_HOST`] +- .highlight[`HTTP_USER_AGENT`] +- .highlight[`PATH_INFO`] +- .highlight[`QUERY_STRING `] +- .highlight[`REMOTE_ADDR`] +- .highlight[`REMOTE_PORT`] +- .highlight[`REQUEST_METHOD`] +- .highlight[`REQUEST_URI`] +- .highlight[`SCRIPT_NAME`] ] .col[ -- .highlight[SERVER_NAME] -- .highlight[SERVER_PORT] -- .highlight[SERVER_PROTOCOL] -- psgi.errors -- psgi.input -- psgi.multiprocess -- psgi.multithread -- psgi.nonblocking -- psgi.run_once -- psgi.streaming -- psgi.url_scheme -- psgi.version -- psgix.harakiri -- psgix.input.buffered -- psgix.io +- .highlight[`SERVER_NAME`] +- .highlight[`SERVER_PORT`] +- .highlight[`SERVER_PROTOCOL`] +- `psgi.errors` +- `psgi.input` +- `psgi.multiprocess` +- `psgi.multithread` +- `psgi.nonblocking` +- `psgi.run_once` +- `psgi.streaming` +- `psgi.url_scheme` +- `psgi.version` +- `psgix.harakiri` +- `psgix.input.buffered` +- `psgix.io` ] ] @@ -1276,38 +1276,38 @@ layout: true .condensed[ .col[ -- HTTP_ACCEPT -- HTTP_ACCEPT_ENCODING -- HTTP_ACCEPT_LANGUAGE -- HTTP_CACHE_CONTROL -- HTTP_CONNECTION -- HTTP_DNT -- HTTP_HOST -- HTTP_USER_AGENT -- PATH_INFO -- QUERY_STRING -- REMOTE_ADDR -- REMOTE_PORT -- REQUEST_METHOD -- REQUEST_URI -- SCRIPT_NAME +- `HTTP_ACCEPT` +- `HTTP_ACCEPT_ENCODING` +- `HTTP_ACCEPT_LANGUAGE` +- `HTTP_CACHE_CONTROL` +- `HTTP_CONNECTION` +- `HTTP_DNT` +- `HTTP_HOST` +- `HTTP_USER_AGENT` +- `PATH_INFO` +- `QUERY_STRING ` +- `REMOTE_ADDR` +- `REMOTE_PORT` +- `REQUEST_METHOD` +- `REQUEST_URI` +- `SCRIPT_NAME` ] .col[ -- SERVER_NAME -- SERVER_PORT -- SERVER_PROTOCOL -- .highlight[psgi.errors] -- .highlight[psgi.input] -- .highlight[psgi.multiprocess ] -- .highlight[psgi.multithread ] -- .highlight[psgi.nonblocking ] -- .highlight[psgi.run_once ] -- .highlight[psgi.streaming] -- .highlight[psgi.url_scheme] -- .highlight[psgi.version] -- .highlight[psgix.harakiri] -- .highlight[psgix.input.buffered] -- .highlight[psgix.io] +- `SERVER_NAME` +- `SERVER_PORT` +- `SERVER_PROTOCOL` +- .highlight[`psgi.errors`] +- .highlight[`psgi.input`] +- .highlight[`psgi.multiprocess`] +- .highlight[`psgi.multithread`] +- .highlight[`psgi.nonblocking`] +- .highlight[`psgi.run_once`] +- .highlight[`psgi.streaming`] +- .highlight[`psgi.url_scheme`] +- .highlight[`psgi.version`] +- .highlight[`psgix.harakiri`] +- .highlight[`psgix.input.buffered`] +- .highlight[`psgix.io`] ] ] @@ -1381,7 +1381,7 @@ enable 'LogDispatch', logger => $logger; ### [`XSRFBlock`](https://metacpan.org/pod/Plack::Middleware::XSRFBlock) ```perl -enable 'XSRFBlock'; +enable 'XSRFBlock', cookie_options => { httponly => 1 }; ``` - Blocking cross-site request forgery couldn't be easier. @@ -1405,7 +1405,7 @@ layout: false ![CPAN](img/cpan.png) ] -## Plack modules on the CPAN in July 2016 +## Plack modules in July 2016 **10** `Plack-Handler-*` distributions @@ -1417,7 +1417,17 @@ layout: false ## Parting Thoughts -- You should write middleware! +- PSGI also specifies a way to delay or stream responses to the server. + +??? +- It's kind of complicated, but you can read the spec to learn more. +- Read the source code of various apps and middlewares to see how it works in practice. + +-- +- There are tons of great apps and middleware on the CPAN. + +-- +- Consider writing some of your app as a middleware. ??? - The concept and implementation of middleware is cool. @@ -1430,13 +1440,6 @@ layout: false - Sessions - Rate limiters --- -- PSGI also specifies a way to delay or stream responses to the server. - -??? -- It's kind of complicated, but you can read the spec to learn more. -- Read the source code of various apps and middlewares to see how it works in practice. - --- class: center, middle