You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@openwhisk.apache.org by gi...@git.apache.org on 2017/08/17 08:07:44 UTC

[GitHub] akrabat opened a new issue #2630: JSON encoding is inconsistent for web actions

akrabat opened a new issue #2630: JSON encoding is inconsistent for web actions
URL: https://github.com/apache/incubator-openwhisk/issues/2630
 
 
   There's something very odd about JSON encoding and content types with web actions.
   
   ```php
   <?php
   function main(array $args) : array
   {
       return [
           "body" => ["greeting" => "Hello world"],
           "headers" => ["Content-Type" => "application/json"],
       ];
   }
   ```
   gives:
   ```
   $ curl -ki https://192.168.33.13/api/v1/web/guest/default/hello
   HTTP/1.1 200 OK
   Content-Type: application/json
   
   {"greeting":"Hello world"}
   ```
   
   All good.
   
   However, for:
   
   ```php
   <?php
   function main(array $args) : array
   {
       return [
           "body" => ["greeting" => "Hello world"],
           "headers" => ["Content-Type" => "application/json-patch+json"],
       ];
   }
   ```
   I get:
   ```
   $ curl -ki https://192.168.33.13/api/v1/web/guest/default/hello
   HTTP/1.1 400 Bad Request
   Content-Type: application/json
   
   {"error":"Response type in header did not match generated content type.","code":48}
   ```
   Complete failure. Maybe it's because the new "no-need-to-base64-a-json-string" code is hard coded to only support the `application/json` content type?
   
   However, if I base64 encode & stringify the JSON:
   
   ```php
   <?php
   function main(array $args) : array
   {
       return [
           "body" => base64_encode(json_encode(["greeting" => "Hello world"])),
           "headers" => ["Content-Type" => "application/json-patch+json"],
       ];
   }
   ```
   then this happens:
   ```
   $ curl -ki https://192.168.33.13/api/v1/web/guest/default/hello
   HTTP/1.1 200 OK
   Content-Type: application/json-patch+json
   
   eyJncmVldGluZyI6IkhlbGxvIHdvcmxkIn0=
   ```
   Content type is right, but the body isn't decoded!
   
   My final test was using `application/problem+json` and this does something different again:
   
   ```php
   <?php
   function main(array $args) : array
   {
       return [
           "body" => base64_encode(json_encode(["greeting" => "Hello world"])),
           "headers" => ["Content-Type" => "application/problem+json"],
       ];
   }
   ```
   results in:
   ```
   $ curl -ki https://192.168.33.13/api/v1/web/guest/default/hello
   HTTP/1.1 400 Bad Request
   Content-Type: application/json
   
   {"error":"Response did not specify a known content-type.","code":54}
   ```
   
   It hasn't worked at all! Obviously `application/problem+json` is a valid content type as it's defined in [RFC7807](https://tools.ietf.org/html/rfc7807), so my guess is that it's not the right list?  Clearly, we can't have a whitelist for content types.
   
   
   As I say, something's odd here.
 
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services