Skip to content

Commit

Permalink
support HTTP/2 and HTTP/3 (#774)
Browse files Browse the repository at this point in the history
  • Loading branch information
if-nil committed Mar 25, 2023
1 parent 357f0cb commit 4f02bc5
Show file tree
Hide file tree
Showing 7 changed files with 68 additions and 4 deletions.
4 changes: 2 additions & 2 deletions lexers/http.go
Expand Up @@ -22,8 +22,8 @@ var HTTP = Register(httpBodyContentTypeLexer(MustNewLexer(
func httpRules() Rules {
return Rules{
"root": {
{`(GET|POST|PUT|DELETE|HEAD|OPTIONS|TRACE|PATCH|CONNECT)( +)([^ ]+)( +)(HTTP)(/)([12]\.[01])(\r?\n|\Z)`, ByGroups(NameFunction, Text, NameNamespace, Text, KeywordReserved, Operator, LiteralNumber, Text), Push("headers")},
{`(HTTP)(/)([12]\.[01])( +)(\d{3})( +)([^\r\n]+)(\r?\n|\Z)`, ByGroups(KeywordReserved, Operator, LiteralNumber, Text, LiteralNumber, Text, NameException, Text), Push("headers")},
{`(GET|POST|PUT|DELETE|HEAD|OPTIONS|TRACE|PATCH|CONNECT)( +)([^ ]+)( +)(HTTP)(/)([123](?:\.[01])?)(\r?\n|\Z)`, ByGroups(NameFunction, Text, NameNamespace, Text, KeywordReserved, Operator, LiteralNumber, Text), Push("headers")},
{`(HTTP)(/)([123](?:\.[01])?)( +)(\d{3})( +)([^\r\n]+)(\r?\n|\Z)`, ByGroups(KeywordReserved, Operator, LiteralNumber, Text, LiteralNumber, Text, NameException, Text), Push("headers")},
},
"headers": {
{`([^\s:]+)( *)(:)( *)([^\r\n]+)(\r?\n|\Z)`, EmitterFunc(httpHeaderBlock), nil},
Expand Down
5 changes: 5 additions & 0 deletions lexers/testdata/http.2.0.actual
@@ -0,0 +1,5 @@
GET /foo HTTP/2.0
Content-Type: application/json
User-Agent: foo

{"hello": "world"}
27 changes: 27 additions & 0 deletions lexers/testdata/http.2.0.expected
@@ -0,0 +1,27 @@
[
{"type":"NameFunction","value":"GET"},
{"type":"Text","value":" "},
{"type":"NameNamespace","value":"/foo"},
{"type":"Text","value":" "},
{"type":"KeywordReserved","value":"HTTP"},
{"type":"Operator","value":"/"},
{"type":"LiteralNumber","value":"2.0"},
{"type":"Text","value":"\n"},
{"type":"Name","value":"Content-Type"},
{"type":"Operator","value":":"},
{"type":"Text","value":" "},
{"type":"Literal","value":"application/json"},
{"type":"Text","value":"\n"},
{"type":"Name","value":"User-Agent"},
{"type":"Operator","value":":"},
{"type":"Text","value":" "},
{"type":"Literal","value":"foo"},
{"type":"Text","value":"\n\n"},
{"type":"Punctuation","value":"{"},
{"type":"NameTag","value":"\"hello\""},
{"type":"Punctuation","value":":"},
{"type":"Text","value":" "},
{"type":"LiteralStringDouble","value":"\"world\""},
{"type":"Punctuation","value":"}"},
{"type":"Text","value":"\n"}
]
2 changes: 1 addition & 1 deletion lexers/testdata/http.2.actual
@@ -1,4 +1,4 @@
GET /foo HTTP/2.0
GET /foo HTTP/2
Content-Type: application/json
User-Agent: foo

Expand Down
2 changes: 1 addition & 1 deletion lexers/testdata/http.2.expected
Expand Up @@ -5,7 +5,7 @@
{"type":"Text","value":" "},
{"type":"KeywordReserved","value":"HTTP"},
{"type":"Operator","value":"/"},
{"type":"LiteralNumber","value":"2.0"},
{"type":"LiteralNumber","value":"2"},
{"type":"Text","value":"\n"},
{"type":"Name","value":"Content-Type"},
{"type":"Operator","value":":"},
Expand Down
5 changes: 5 additions & 0 deletions lexers/testdata/http.3.actual
@@ -0,0 +1,5 @@
GET /foo HTTP/3
Content-Type: application/json
User-Agent: foo

{"hello": "world"}
27 changes: 27 additions & 0 deletions lexers/testdata/http.3.expected
@@ -0,0 +1,27 @@
[
{"type":"NameFunction","value":"GET"},
{"type":"Text","value":" "},
{"type":"NameNamespace","value":"/foo"},
{"type":"Text","value":" "},
{"type":"KeywordReserved","value":"HTTP"},
{"type":"Operator","value":"/"},
{"type":"LiteralNumber","value":"3"},
{"type":"Text","value":"\n"},
{"type":"Name","value":"Content-Type"},
{"type":"Operator","value":":"},
{"type":"Text","value":" "},
{"type":"Literal","value":"application/json"},
{"type":"Text","value":"\n"},
{"type":"Name","value":"User-Agent"},
{"type":"Operator","value":":"},
{"type":"Text","value":" "},
{"type":"Literal","value":"foo"},
{"type":"Text","value":"\n\n"},
{"type":"Punctuation","value":"{"},
{"type":"NameTag","value":"\"hello\""},
{"type":"Punctuation","value":":"},
{"type":"Text","value":" "},
{"type":"LiteralStringDouble","value":"\"world\""},
{"type":"Punctuation","value":"}"},
{"type":"Text","value":"\n"}
]

0 comments on commit 4f02bc5

Please sign in to comment.