<!DOCTYPE html>
<html lang="en">
    <!--
      Licensed to the Apache Software Foundation (ASF) under one or more
      contributor license agreements.  See the NOTICE file distributed with
      this work for additional information regarding copyright ownership.
      The ASF licenses this file to You under the Apache License, Version 2.0
      (the "License"); you may not use this file except in compliance with
      the License.  You may obtain a copy of the License at
          http://www.apache.org/licenses/LICENSE-2.0
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      See the License for the specific language governing permissions and
      limitations under the License.
    -->
    <head>
        <meta charset="utf-8" />
        <title>HandleHttpResponse</title>
        <link rel="stylesheet" href="../../../../../css/component-usage.css" type="text/css" />
    </head>

    <body>
        <!-- Processor Documentation ================================================== -->
        <h2>Usage Description:</h2>
        <p>
            The pairing of this Processor with a <a href="../org.apache.nifi.processors.standard.HandleHttpRequest/index.html">HandleHttpRequest</a> Processor
            provides the ability to use NiFi to visually construct a web server that can carry out any functionality that is available
            through the existing Processors. For example, one could construct a Web-based front end to an SFTP Server by constructing a
            flow such as:
        </p>

        <p>
            <a href="../org.apache.nifi.processors.standard.HandleHttpRequest/index.html">HandleHttpRequest</a> -> 
            <a href="../org.apache.nifi.processors.standard.PutSFTP/index.html">PutSFTP</a> ->
            <a href="index.html">HandleHttpResponse</a>
        </p>

        <p>
            This Processor must be configured with the same &lt;HTTP Context Map&gt; service as the corresponding HandleHttpRequest Processor.
            Otherwise, all FlowFiles will be routed to the 'failure' relationship.
        </p>
    </body>
</html>
