protected override void ScanStartLine(HeaderBuffer headerBuffer) { // argument checks Debug.Assert(headerBuffer != null); // read items string method = headerBuffer.ReadSpaceSeparatedItem(skipItem: false, decapitalize: false, lastItem: false); int targetStart = headerBuffer.CurrentOffset; string target = headerBuffer.ReadSpaceSeparatedItem(skipItem: false, decapitalize: false, lastItem: false); this.RequestTargetSpan = new Span(targetStart, headerBuffer.CurrentOffset - 1); string httpVersion = headerBuffer.ReadSpaceSeparatedItem(skipItem: false, decapitalize: false, lastItem: true); // set message properties this.Method = method; this.Version = HeaderBuffer.ParseVersion(httpVersion); if (string.IsNullOrEmpty(target) == false) { char firstChar = target[0]; if (firstChar != '/' && firstChar != '*') { // absolute-form or authority-form Uri uri = null; DnsEndPoint hostEndPoint = null; if (target.Contains("://")) { // maybe absolute-form try { uri = new Uri(target); hostEndPoint = new DnsEndPoint(uri.Host, uri.Port); } catch { // continue } } else { // maybe authority-form try { // assume https scheme uri = new Uri($"https://{target}"); hostEndPoint = new DnsEndPoint(uri.Host, uri.Port); uri = null; // this.Uri is not set in case of authority-form } catch { // continue } } this.HostEndPoint = hostEndPoint; this.TargetUri = uri; } } return; }
protected override void ScanStartLine(HeaderBuffer headerBuffer) { // argument checks Debug.Assert(headerBuffer != null); // read items string version = headerBuffer.ReadSpaceSeparatedItem(skipItem: false, decapitalize: false, lastItem: false); string statusCode = headerBuffer.ReadSpaceSeparatedItem(skipItem: false, decapitalize: false, lastItem: false); headerBuffer.ReadSpaceSeparatedItem(skipItem: true, decapitalize: false, lastItem: true); // set message properties Version httpVersion = HeaderBuffer.ParseVersion(version); this.Version = httpVersion; this.StatusCode = HeaderBuffer.ParseStatusCode(statusCode); if (httpVersion.Major == 1 && httpVersion.Minor == 0) { // in HTTP/1.0, keep-alive is disabled by default this.KeepAliveEnabled = false; } return; }