Uploaded image for project: 'Ambari'
  1. Ambari
  2. AMBARI-9016

Ambari API uses HTTP Header Content-Type:text/plain when the content is JSON.

    XMLWordPrintableJSON

Details

    Description

      Ambari responds with a Content-Type:text/plain when the content is actually JSON.

      And the API only accepts (PUT/POST) of JSON data with "Content-Type:text/plain", but fails with the correct "Content-Type:application/json".

      This breaks most HTTP/Restful clients, including the Knox UI proxy.

      Here is a GET showing JSON content with the wrong "Content-Type" (with some headers redacted):

      $ curl -i http://localhost:8080/api/v1/clusters
      HTTP/1.1 200 OK
      Content-Type: text/plain
      
      {
        "href" : "http://localhost:8080/api/v1/clusters",
        "items" : [
          {
            "href" : "http://localhost:8080/api/v1/clusters/clustername",
            "Clusters" : {
              "cluster_name" : "clustername",
              "version" : "HDP-2.4"
            }
          }
        ]
      }
      

      Attempt to send JSON with Content-Type:application/json fails and it although it responds with JSON data, it says its "text/plain".

      $ curl -v -u admin\
        -H "Content-Type: application/json" -H x-requested-by:useless \
        http://localhost:8080/api/v1/stacks/HDP/versions/2.4/recommendations -d @temp.json
      
      < HTTP/1.1 500 Server Error
      < Content-Type: text/plain; charset=ISO-8859-1
      {
        "status": 500,
        "message": "Server Error"
      }
      

      It accepts JSON with Content-Type:text/plain:

      $ curl -v -u admin\
        -H "Content-Type: test/plain" -H x-requested-by:useless \
        http://localhost:8080/api/v1/stacks/HDP/versions/2.4/recommendations -d @temp.json
      
      > POST /api/v1/stacks/HDP/versions/2.4/recommendations HTTP/1.1
      > Content-Type: test/plain
      < HTTP/1.1 200 OK
      < Content-Type: text/plain
      {
        "resources" : [
          {
            "href" : "http://localhost:8080/api/v1/stacks/HDP/versions/2.4/recommendations/8",
      ... snipped the rest of the JSON since it's not needed ...
      

      This is the file that was sent:

      $ cat temp.json
          {
            "recommend" : "configurations",
            "services" : [ "AMBARI_METRICS","HDFS","HIVE","MAPREDUCE2","PIG","TEZ","YARN","ZOOKEEPER" ],
            "hosts" : [ "ip-10-0-1-159.ec2.internal","ip-10-0-1-31.ec2.internal","ip-10-0-1-32.ec2.internal","ip-10-0-1-33.ec2.internal" ]
          }
      

      Attachments

        Activity

          People

            payert Tamas Payer
            seano Sean Roberts
            Votes:
            5 Vote for this issue
            Watchers:
            10 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Time Tracking

                Estimated:
                Original Estimate - Not Specified
                Not Specified
                Remaining:
                Remaining Estimate - 0h
                0h
                Logged:
                Time Spent - 1h
                1h