Re: [core] draft-ietf-core-multipart-ct

Jim Schaad <> Sat, 02 March 2019 23:23 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id CCEEF128D52; Sat, 2 Mar 2019 15:23:55 -0800 (PST)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -1.899
X-Spam-Status: No, score=-1.899 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id YbcFN2z_mSxz; Sat, 2 Mar 2019 15:23:52 -0800 (PST)
Received: from ( []) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 88646127133; Sat, 2 Mar 2019 15:23:51 -0800 (PST)
Received: from Jude ( by ( with Microsoft SMTP Server (TLS) id 15.0.1395.4; Sat, 2 Mar 2019 15:23:43 -0800
From: Jim Schaad <>
To: 'Michael Koster' <>
CC: 'Thomas Fossati' <>,,, 'Klaus Hartke' <>, 'Jaime Jiménez' <>, 'Ari Keränen' <>
References: <000901d4c2f8$4b69a640$e23cf2c0$> <> <00f901d4c624$f313cb30$d93b6190$> <> <026901d4c8df$e2251410$a66f3c30$> <> <> <>
In-Reply-To: <>
Date: Sat, 02 Mar 2019 15:23:41 -0800
Message-ID: <004701d4d14e$fb3e10b0$f1ba3210$>
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary="----=_NextPart_000_0048_01D4D10B.ED1C7E60"
X-Mailer: Microsoft Outlook 16.0
Thread-Index: AQHZeLzgd60hRSXGqZKN3jc6SJcBfgFxWGrPAht6VX8BZPQLtgJmNS+rAxweFbkBoq42gwJObeyypXyClMA=
Content-Language: en-us
X-Originating-IP: []
Archived-At: <>
Subject: Re: [core] draft-ietf-core-multipart-ct
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: "Constrained RESTful Environments \(CoRE\) Working Group list" <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Sat, 02 Mar 2019 23:23:56 -0000

That would not work if one put in an ACCEPT XX which was not multipart.  Although in that case you could return a content request not available.





From: Michael Koster <> 
Sent: Saturday, March 2, 2019 3:13 PM
To: Jim Schaad <>
Cc: Thomas Fossati <>;; WG <>; Klaus Hartke <>; Jaime Jiménez <>; Ari Keränen <>
Subject: Re: [core] draft-ietf-core-multipart-ct


OK so if there's no data I send an empty multipart - (cbor x80)


Sorry, I'm just getting up to speed. Is the latest draft version -02? 




On Mar 2, 2019, at 2:14 PM, Michael Koster < <> > wrote:


To follow on a little, the pub/sub use case is for a variable format response (case C?) that is a better alternative than adding a new result code (2.xx) for "no data".


There is another use case (like case B) which is for a generalized hypermedia format that can return links, data, or both depending on the client workflow. This would eliminate the need for a new content format like HSML, and would allow arbitrary data formats to be associated with core-link-format in batch-access collections as per CoRE Interfaces.


Best regards,




On Mar 2, 2019, at 2:05 PM, Michael Koster < <> > wrote:




I am integrating multipart into pub/sub as a way to signal empty payloads that might result from a subscribe operation where their aren't any stored data (stale or non-retaining topic) or a retrieve in the same case.


We have decided initially not to support multiple content formats on a topic in pub/sub,where the proker would have to convert, but now it might be a little easier with multipart, if we build in a subtyping system as per Jim's email. 


IMO the subtype target attribute at least will be necessary for the kind of discovery we want to support in pub/sub. I guess subtype accept header option is going to be needed also, so a pub/sub client can indicate it accepts emty payload format and e.g. senml.


In general I think this can work for the pub/sub use case and will write it in if it makes sense.


Best regards,





On Feb 19, 2019, at 9:48 PM, Jim Schaad < <> > wrote:


I did think about some of this when I put up the proposal.


For case (A), unless it is going to have options while doing a rigidly structured response, there is no need to have a value different than Accept 62.  In fact if there is really only one structured response, then there is not a need to have any accept option in the request at all.


For case (B), I thought about the recursive case and that is why I put the SHOULD and talked about options between multiple things while building the response.  I don’t think that there are going to be enough cases of a tree structure being returned that anything needs to be said about it one way or the other.  If that type of detail is really needed then I would expect that a GET would be replaced by a POST with the details of the response needed in the content of the POST.


In the semantics, I wanted to provide a minimal amount of information.  Thus the language about using it to provide guidance for specific pairs of content types that can go into a specific location.  The other place that I was thinking it might be useful would be in the case of a PUB-SUB server returning multiple content types where the set of equivalents might be restricted to the requested values rather than returning all possibilities.





From: Thomas Fossati < <> > 
Sent: Tuesday, February 19, 2019 1:58 AM
To: Jim Schaad < <> >
Cc: Klaus Hartke < <> >; <> ; <> 
Subject: Re: [core] draft-ietf-core-multipart-ct


It has surfaced in the mailing list as well as in private exchanges that there are two ways of looking at multipart-ct:
(A) as a mechanism to wrap multiple related things in a rigidly structured way;
(B) as a mechanism to aggregate related thingsin flexible ways (e.g., the EST-coaps credentials).

One approach to content negotiation for multiparts of kind (A) is to assign the aggregate a separate type altogether (overriding C-F 62 with something allocated on purpose from the FCFS portion of the codepoint space).  This fits Accept’s semantics well.

Content negotiation with multiparts of kind (B) needs something like Jim’s proposal.  The slight complication that potentially breaks Jim’s approach is recursion.

To support this, I think the draft could say:
- multiparts of kind (A) SHOULD override the multipart C-F with their own; and
- multiparts of kind (B) MUST not include other multiparts of the same “kind”.

The above would make a recursive multipart (i.e., a 62 embedded in another 62) illegal and give Jim’s new content negotiation a well-defined semantics.


On Sat, Feb 16, 2019 at 6:25 PM Jim Schaad < <>> wrote:
> Looking at this, it does seem to be a strange way to deal with things.  Of course the problem is made even more of a pain if you think about the possibility of having nested multipart contents.
> While the following does may not be the greatest solution, I think that it might be a better answer:
> 1.  Define a new target attribute:  "mt-subtypes" which contains the list of any content type which can be returned in a multipart content.  This could be at the top level or anyplace in a tree.
> 2.  Define a new option: "mt-accept" which contains the list of sub-content types that the client can deal with.  This option would be defined as advisory on the part of the server, that is it can return content types which are not in the list, but where options exist in the possible returned content tree the requested types, in order, SHOULD be the ones chosen by the server.   I would propose the option be "Non-Critical, Safe, CacheKey, Repeatable".
> I am not sure if I believe that the new option is part of the cache key or not.  I can see arguments on both sides, but I think I come down to yes.
> Carsten,   I think that this issue (but maybe not this solution) needs to be put onto the agenda for the interim meeting next Wed.
> Jim
> > -----Original Message-----
> > From: Klaus Hartke < <>>
> > Sent: Tuesday, February 12, 2019 9:50 AM
> > To: Jim Schaad < <>>
> > Cc:  <>;  <> WG < <>>
> > Subject: Re: [core] draft-ietf-core-multipart-ct
> >
> > For context: [1] [2]
> >
> > Jim Schaad wrote:
> > > If you say ACCEPT 62, do you accept any combination of nested content
> > types?
> >
> > Yes. A CoAP request can include at most one Accept option and any response
> > must exactly that value as Content-Format or be an error response. CoAP
> > doesn't have a mechanism for negotiating the content formats of
> > representations embedded in other representations. I stumbled upon the
> > same problem with CoRAL.
> >
> > > Should something about this be placed into the draft?
> >
> > Yes. Proposed text: "CoAP doesn't have a mechanism for negotiating the
> > content formats of representations embedded in application/multipart-core
> > representations."
> >
> > > Also I note that this draft is currently expired and needs to be reposted.
> >
> > Yes. Soon™.
> >
> > Klaus
> >
> > [1]
> >  <>
> > I
> > [2]  <>
> _______________________________________________
> core mailing list
>  <>
>  <>


core mailing list <>