### How are different response types generated?
[\Magento\Framework\Controller\ResultInterface](https://github.com/magento/magento2/blob/2.2-develop/lib/internal/Magento/Framework/Controller/ResultInterface.php):
- renderResult
- setHttpResponseCode
- setHeader
[Controller\AbstractResult](https://github.com/magento/magento2/blob/2.2-develop/lib/internal/Magento/Framework/Controller/AbstractResult.php):
- *renderResult* - required by interface - applies headers and calls *render*. children must implement this
- setHttpResponseCode
- setHeader
- setStatusHeader
[Controller\Result\Raw](https://github.com/magento/magento2/blob/2.2-develop/lib/internal/Magento/Framework/Controller/Result/Raw.php):
- setContents
- *render* - set response body
[Controller\Result\Json](https://github.com/magento/magento2/blob/2.2-develop/lib/internal/Magento/Framework/Controller/Result/Json.php):
- setData - array
- setJsonData - string
- *render* - processes inline translations, sets application/json header and response body json string
[Controller\Result\Forward](https://github.com/magento/magento2/blob/2.2-develop/lib/internal/Magento/Framework/Controller/Result/Forward.php):
- setModule, setController, setParams
- *forward* - does the trick, modifies request object, marks request not dispatched
- *render* - does nothing, forward must be called manually
[Controller\Result\Redirect](https://github.com/magento/magento2/blob/2.2-develop/lib/internal/Magento/Framework/Controller/Result/Redirect.php):
- setUrl, setPath - custom address
- setRefererUrl, setRefererOrBaseUrl - go back function
[View\Result\Layout](https://github.com/magento/magento2/blob/2.2-develop/lib/internal/Magento/Framework/View/Result/Layout.php): - renders layout without `default` handle and page layout (1-column etc.)
- *renderResult*
* event `layout_render_before`
* event `layout_render_before_$fullActionName`, e.g. `..._checkout_cart_index`
* render
- *render* - layout->getOutput, translate inline, set response body
- addDefaultHandle = $fullActionName, e.g. `checkout_cart_index`
- addHandle, addUpdate
[View\Result\Page](https://github.com/magento/magento2/blob/2.2-develop/lib/internal/Magento/Framework/View/Result/Page.php): - wraps layout into page layout
- same events as above
- *render* - renders layout, assigns vars and renders outer page template
- assign - values into viewVars property. default
Default: requireJs, headContent, headAdditional, htmlAttributes, headAttributes, bodyAttributes, loaderIcon, layoutContent
- addDefaultHandle = $fullActionName + `default`