You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I find that I struggle with the current organisation of Semantics every time I open it. When you're looking for how a given mechanism (e.g., conneg, partial content) works, it's very confusing to have to bounce between parts of s 6, s 8, s 10 and sometimes s 9.
I think the document would read far more easily and logically (especially in the text-only rendering) if we added four new top-level sections, with the content from the listed sections inserted (likely with some rearrangement):
Partial Content
8.3 Range
6.3.4 Content-Range
6.3.5 Media Type multipart/bytesranges
10.4.1 Accept-Ranges
Content Negotiation
6.4 Content Negotation
8.4 Negotiation
6.2.1 Content-Type
6.2.2 Content-Encoding
6.2.3 Content-Language
Conditional Requests
8.2 Preconditions
10.2 Validators
Authentication
10.3 Authentication Challenges
8.5 Authentication Credentials
I haven't suggested moving the status codes, as that would be more disruptive, and I think there isn't much value in doing so.
It also helps with fields thare both request and response fields. Right now, Accept-Encoding is in Secion 8, although it also defines the response variant.
The current organization of Semantics is split by request/response, whereas Conditionals, Range, Auth, Conneg, and Caching are better explained in proximity. That is, of course, why we split them for 7231.
I have been thinking of going back to the reference style of 2616, where the major text sections describe what can be done by reference to the detailed sections per element sorted alphabetically.
I can try that after the Apache board meeting today. Did I mention that I am now chairman of the ASF, again?
Unfortunately, any depth-first approach to organizing the document doesn't work because each protocol element is important for two to four different actions one might want to take in HTTP. We keep getting lost in the details.
For example, placing Content-Type under Content Negotiation doesn't work because negotiation is only relevant to some 5% of resources, whereas everyone needs the self-descriptive aspect of a Content-Type. Range is easier to describe separately, but it has an impact on what any response message is saying (i.e., it fundamentally alters the message semantics such that all of the other cases where we describe "what is in a payload" become wrong if we don't mention 206 and Content-Range as the exception). Likewise, conditional requests depend on understanding methods, header fields, the selected representation, and validators, and Range. Auth is the only one that isn't looped into everything, for better or worse.
What I think we can do is extract the summaries into sections that overview the major protocol features and define them mostly by reference to the individual methods, codes, fields, etc. That would replace/transform the Architecture section to include resources, URIs, representations, and message-based interaction first, followed by the features of content negotiation, conditional requests, range requests, and authentication. We could then follow that with detailed requirements for each method, status code, and header field listed alphabetically.
Meanwhile, I am still trying to find the right balance between the Notation sections and the Conformance section. I am thinking of merging them into a section below the Intro.
Something like:
1. Introduction
1.1. Purpose
1.2. Evolution
1.3. Semantics
1.4. Obsoletes
2. Conformance
2.1. Syntax Notation
2.2. Requirements Notation
2.3. Role-based Requirements
2.4. Length Requirements
2.5. Error Handling
3. Interaction
3.1. Resources
3.1.1. URI
3.1.2. References
3.1.3. Target URI
3.2. Representations
3.3. Components
3.3.1. Client/Server
3.3.2. Intermediaries
3.3.3. Caches
3.3.4. Implementation Diversity
3.3. Messages
3.3.1. Framing
3.3.2. Fields
3.3.3. Payload
4. Identifier Schemes
4.1. http URI Scheme
4.2. https URI Scheme
4.3. http and https URI Normalization and Comparison
4.4. Deprecated userinfo
4.5. Fragment Identifiers on http(s) URI References
4.6. Schemes that alias http(s)
5. Routing Messages
5.1. Target URI
5.2. Origin
5.3. Authoritative Responses
6. Requests
6.1. Methods
6.1.1. Safe
6.1.2. Idempotent
6.1.3. Impact on Caching
6.2. Request Fields
6.3. Request Payload
7. Responses
7.1. Status Codes
7.2. Response Fields
7.3. Response Payload
8. Features
8.1. Authentication
8.2. Content Negotiation
8.3. Preconditions
8.4. Range Requests
9. Method Definitions
10. Status Code Definitions
11. Field Definitions
12. Security Considerations
13. IANA Considerations
14. References
That looks like a good start. Based upon the ToC above, a few comments/suggestions:
Where does "extending and versioning HTTP" (current 4) go?
Re: 3 - 'Interaction' isn't quite the right classifier; perhaps 'Concepts'? Back to 'Architecture'? Hm. I'm not sure why these things are bucketed together, and why other things aren't included.I'm tempted to say that they should be promoted to top-level sections (Resources, Representations, Components and Messages) -- that would also help avoid some very deep headers (e.g., in fields).
Overall, it would be good if the section titles were a bit more descriptive.
Features should be higher; e.g., before Requests. I'd also consider making each of its items a top-level section.
My reorg proposal is pretty much complete, since I can't do much else without adding new text. It might be possible (and make more sense) to place IANA Considerations before Security Considerations, but that might upset someone.
Activity
reschke commentedon May 20, 2020
I think I agree.
It also helps with fields thare both request and response fields. Right now, Accept-Encoding is in Secion 8, although it also defines the response variant.
royfielding commentedon May 20, 2020
The current organization of Semantics is split by request/response, whereas Conditionals, Range, Auth, Conneg, and Caching are better explained in proximity. That is, of course, why we split them for 7231.
I have been thinking of going back to the reference style of 2616, where the major text sections describe what can be done by reference to the detailed sections per element sorted alphabetically.
I can try that after the Apache board meeting today. Did I mention that I am now chairman of the ASF, again?
reschke commentedon May 22, 2020
FWIW, if we do a major re-org, we should avoid to have that mixed with other changes (in the same Internet Draft).
royfielding commentedon May 25, 2020
Yes, we are long overdue for a new draft set. I think we need to stop waiting for meetings to generate them.
reschke commentedon May 26, 2020
Will submit one today.
royfielding commentedon Sep 2, 2020
Unfortunately, any depth-first approach to organizing the document doesn't work because each protocol element is important for two to four different actions one might want to take in HTTP. We keep getting lost in the details.
For example, placing Content-Type under Content Negotiation doesn't work because negotiation is only relevant to some 5% of resources, whereas everyone needs the self-descriptive aspect of a Content-Type. Range is easier to describe separately, but it has an impact on what any response message is saying (i.e., it fundamentally alters the message semantics such that all of the other cases where we describe "what is in a payload" become wrong if we don't mention 206 and Content-Range as the exception). Likewise, conditional requests depend on understanding methods, header fields, the selected representation, and validators, and Range. Auth is the only one that isn't looped into everything, for better or worse.
What I think we can do is extract the summaries into sections that overview the major protocol features and define them mostly by reference to the individual methods, codes, fields, etc. That would replace/transform the Architecture section to include resources, URIs, representations, and message-based interaction first, followed by the features of content negotiation, conditional requests, range requests, and authentication. We could then follow that with detailed requirements for each method, status code, and header field listed alphabetically.
Meanwhile, I am still trying to find the right balance between the Notation sections and the Conformance section. I am thinking of merging them into a section below the Intro.
Something like:
mnot commentedon Sep 3, 2020
That looks like a good start. Based upon the ToC above, a few comments/suggestions:
Where does "extending and versioning HTTP" (current 4) go?
Re: 3 - 'Interaction' isn't quite the right classifier; perhaps 'Concepts'? Back to 'Architecture'? Hm. I'm not sure why these things are bucketed together, and why other things aren't included.I'm tempted to say that they should be promoted to top-level sections (Resources, Representations, Components and Messages) -- that would also help avoid some very deep headers (e.g., in fields).
Overall, it would be good if the section titles were a bit more descriptive.
Features should be higher; e.g., before Requests. I'd also consider making each of its items a top-level section.
reschke commentedon Sep 3, 2020
/me not sure about "Syntax Notation" below "Conformance".
royfielding commentedon Sep 3, 2020
So, promote subsections of Interaction up, move Features closer to front, consider discussing basic method features just before that.
royfielding commentedon Sep 3, 2020
and move Routing closer to URIs
royfielding commentedon Sep 29, 2020
My reorg proposal is pretty much complete, since I can't do much else without adding new text. It might be possible (and make more sense) to place IANA Considerations before Security Considerations, but that might upset someone.
The current outline of #446 looks like:
mnot commentedon Sep 30, 2020
I say ship it and we'll go from there.
reschke commentedon Sep 30, 2020
Thaniks, Roy.
I'm on the road today, but I'll do a sanity check and then submit drafts tomorrow!
royfielding commentedon Sep 30, 2020
Merging .... Wheeeeeeeeee!
change note for #368