Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HTTP2 scenario coverage #7161

Closed
Tratcher opened this issue Jun 19, 2018 · 17 comments
Closed

HTTP2 scenario coverage #7161

Tratcher opened this issue Jun 19, 2018 · 17 comments
Assignees
Labels

Comments

@Tratcher
Copy link
Member

Tratcher commented Jun 19, 2018

This is for tracking notes about HTTP/2 related features in 2.2. Most of the work will be related to Kestrel, but HttpSys and IIS In-Proc will also get a few notes.

HTTP/2 support is limited by TLS ALPN availability on various platforms.

Kestrel

Not ASP.NET Core version specific, only constrained by the OS:

HttpSysServer

  • Win10+
  • Not framework specific

IIS In proc

  • Win10+
  • .NET Core (in proc restriction)

IIS Out of proc

  • Win10+
  • The front end can use HTTP/2, but the reverse proxy to Kestrel will continue to use HTTP/1.1.
  • Not framework specific
@scottaddie scottaddie added the 2.2 label Jun 20, 2018
@Rick-Anderson Rick-Anderson added this to the 2018 Q3 September 30 milestone Jun 20, 2018
@guardrex guardrex changed the title 2.2 Http/2 doc notes HTTP2 scenario coverage Jul 21, 2018
@guardrex guardrex mentioned this issue Sep 4, 2018
32 tasks
@guardrex guardrex modified the milestones: 2.2 Pre-RTM( Dec 3rd, 2018), Sprint 141 (9/3 to 9/21) Sep 4, 2018
@guardrex
Copy link
Collaborator

@Tratcher

A Tale of Two Options

  1. Split HTTP/2 coverage across the server topics, where the content is maintained within the existing topics.
  2. Provide a dedicated HTTP/2 topic that would appear in the Servers node of the TOC. The topic would break down along the lines of the outline you provided in the OP ☝️.

TOC and topic proposal (for Option 2):

  • Fundamentals
    • Servers
      • Kestrel
      • ASP.NET Core Module
      • HTTP.sys
      • HTTP/2

Title: HTTP/2 support in ASP.NET Core
Description: Discover how HTTP/2, the latest HTTP network protocol, is supported in ASP.NET Core.
Location: fundamentals\servers\http2.md
UID: fundamentals/servers/http2

👉 Which way would u like to go?

@Tratcher
Copy link
Member Author

Why not both? 😁

There won't be a lot of common HTTP/2 content so the first option should be adequate. Having the second page too that gives you an overview of all your options would be a bonus.

@guardrex
Copy link
Collaborator

Let's go ahead with Option 1. I'm just concerned about the size of the Kestrel and IIS topics (and to some extent versioning hell 😈 in the Kestrel topic). This would have been an opportunity to (mostly) cleanly break out a subject into its own topic. However, it probably is less work and a cost savings to roll it into the existing topics.

Side-note on the Kestrel topic: I'm not happy with the heading/section structure of the topic, especially for the config/options subject matter, given how much content was placed into the topic for 2.0 and 2.1. Without good section support, the topic has become a kind of word wall/code wall and the topic's internal TOC is just about useless. ☹️ I might do some work on this for the PR, but I've opened #8496 to make sure it gets addressed later.

RE: Both

Wouldn't that be duplicate coverage? I'm looking at the backlog, too. 🏃 😅 Might be best to put the call for a standalone topic on a new issue.

@Tratcher
Copy link
Member Author

The part you don't get with option 1 is the high level side-by-side comparison. E.g. which server should I use? Option 2 wouldn't need to include the extra details like #7161 (comment).

When we get around to server push then we'll want a shared HTTP/2 doc because that would be a common API across multiple servers. dotnet/aspnetcore#2727. That likely won't happen until 3.0 though.

@guardrex
Copy link
Collaborator

the high level side-by-side comparison

We could (for the time being until 3.0) place that content into the Servers landing page: https://docs.microsoft.com/aspnet/core/fundamentals/servers/

... and then link back out to it from the individual topics. Later, that content could move to the dedicated HTTP/2 topic.

@guardrex
Copy link
Collaborator

guardrex commented Sep 11, 2018

... or bite the bullet and go ahead and create the dedicated HTTP/2 topic now with it. That wouldn't take long if a basic set of guiding principles for server selection is provided there. (No duplication of what's going into the individual topics.)

@Tratcher
Copy link
Member Author

The server landing page would be a good start.

@guardrex
Copy link
Collaborator

ok

@guardrex
Copy link
Collaborator

@Tratcher When you say "high level side-by-side comparison," do you mean that you want the content rolled into each server section of the Servers landing page, or you you want one HTTP/2 support section laid out similar to the way you have them outlined in the OP ☝️?

https://docs.microsoft.com/aspnet/core/fundamentals/servers/

@Tratcher
Copy link
Member Author

One HTTP/2 section like the OP. There are enough caveats around versions that it's nice to see side by side.

@guardrex
Copy link
Collaborator

guardrex commented Sep 13, 2018

@Tratcher Your OP suggests that the IIS in-process deployment scenario relies on the Kestrel limits+options ... is that correct?

... similar question on HTTP.sys. I don't see new props in the HttpSysOptions, so is it configured entirely thru registry settings? I don't see a topic anywhere that explains HTTP/2 config for HTTP.sys; so if it is configured via HTTP.sys, I don't know what to link to or examine for more information.

@Tratcher
Copy link
Member Author

@Tratcher Your OP suggests that the IIS in-process deployment scenario relies on the Kestrel limits+options ... is that correct?

No, IIS in-process is completely independent of Kestrel. Its HTTP/2 configuration/limitations stem from Http.Sys.

For IIS/HttpSysServer/Http.Sys HTTP/2 was not initially configurable, it was automatically on if the base requirements were met (TLS, ALPN, Win10). The Http.Sys team is only now retroactively adding APIs and config flags to disable it. One is netsh http add sslcert [disablehttp2=enable|disable]. @shirhatti do you have any doc links for this feature in IIS?

@Tratcher
Copy link
Member Author

For now there are no new APIs for HttpSysServer or IIS, only HttpRequest.Protocol will indicate if HTTP/2 was negotiated.

@guardrex
Copy link
Collaborator

IIS in-process is completely independent of Kestrel

Independent of Kestrel but not independent of the TFM/app framework [i.e., ".NET Core (in proc restriction)"] ... that's why I thought they might be connected.

One approach we could take: I can go ahead with what I have (it's not very much text to review), and you can correct it and indicate what it's missing on review.

RE: HTTP.sys

disablehttp2 hasn't reached the command doc yet ( https://docs.microsoft.com/windows/desktop/http/add-sslcert ).

@guardrex
Copy link
Collaborator

guardrex commented Sep 13, 2018

Another slightly confusing point: This issue and your OP say for 2.2, but your outline states 2.1. Not sure how to version it. However, we can fix that stuff on review easily enough.

[EDIT] ... and I'm noting on the server-side: WS2016 or better (Win10 equivalent) ... and for IIS, IIS 10 or better.

@Tratcher
Copy link
Member Author

Edited to clarify 2.2 for Kestrel and no version for the others.

The HttpSysServer/IIS/Http.Sys stuff isn't dependent on the version of ASP.NET Core since the functionality is all provided by the OS. The only change to these for 2.2 is making HttpRequest.Protocol correctly report HTTP/2.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants