mirror of
https://gitee.com/iresty/apisix.git
synced 2024-12-04 21:17:36 +08:00
feat(gzip): support special * to match any type (#4817)
This commit is contained in:
parent
ca5ea1ffa4
commit
e244940ea6
@ -21,17 +21,25 @@ local req_http_version = ngx.req.http_version
|
||||
local str_sub = string.sub
|
||||
local ipairs = ipairs
|
||||
local tonumber = tonumber
|
||||
local type = type
|
||||
|
||||
|
||||
local schema = {
|
||||
type = "object",
|
||||
properties = {
|
||||
types = {
|
||||
type = "array",
|
||||
minItems = 1,
|
||||
items = {
|
||||
type = "string",
|
||||
minLength = 1,
|
||||
anyOf = {
|
||||
{
|
||||
type = "array",
|
||||
minItem = 1,
|
||||
items = {
|
||||
type = "string",
|
||||
minLength = 1,
|
||||
},
|
||||
},
|
||||
{
|
||||
enum = {"*"}
|
||||
}
|
||||
},
|
||||
default = {"text/html"}
|
||||
},
|
||||
@ -110,11 +118,15 @@ function _M.header_filter(conf, ctx)
|
||||
end
|
||||
|
||||
local matched = false
|
||||
for _, ty in ipairs(types) do
|
||||
if content_type == ty then
|
||||
matched = true
|
||||
break
|
||||
if type(types) == "table" then
|
||||
for _, ty in ipairs(types) do
|
||||
if content_type == ty then
|
||||
matched = true
|
||||
break
|
||||
end
|
||||
end
|
||||
else
|
||||
matched = true
|
||||
end
|
||||
if not matched then
|
||||
return
|
||||
|
@ -37,15 +37,15 @@ The `gzip` plugin dynamically set the gzip behavior of Nginx.
|
||||
|
||||
## Attributes
|
||||
|
||||
| Name | Type | Requirement | Default | Valid | Description |
|
||||
| --------- | ------------- | ----------- | ---------- | ------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| types | array | optional | ["text/html"] | | dynamically set the `gzip_types` directive |
|
||||
| min_length | integer | optional | 20 | >= 1 | dynamically set the `gzip_min_length` directive |
|
||||
| comp_level | integer | optional | 1 | [1, 9] | dynamically set the `gzip_comp_level` directive |
|
||||
| http_version | number | optional | 1.1 | 1.1, 1.0 | dynamically set the `gzip_http_version` directive |
|
||||
| buffers.number | integer | optional | 32 | >= 1 | dynamically set the `gzip_buffers` directive |
|
||||
| buffers.size | integer | optional | 4096 | >= 1 | dynamically set the `gzip_buffers` directive |
|
||||
| vary | boolean | optional | false | | dynamically set the `gzip_vary` directive |
|
||||
| Name | Type | Requirement | Default | Valid | Description |
|
||||
| --------------------------------------| ------------| -------------- | -------- | --------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| types | array[string] or "*" | optional | ["text/html"] | | dynamically set the `gzip_types` directive, special value `"*"` matches any MIME type |
|
||||
| min_length | integer | optional | 20 | >= 1 | dynamically set the `gzip_min_length` directive |
|
||||
| comp_level | integer | optional | 1 | [1, 9] | dynamically set the `gzip_comp_level` directive |
|
||||
| http_version | number | optional | 1.1 | 1.1, 1.0 | dynamically set the `gzip_http_version` directive |
|
||||
| buffers.number | integer | optional | 32 | >= 1 | dynamically set the `gzip_buffers` directive |
|
||||
| buffers.size | integer | optional | 4096 | >= 1 | dynamically set the `gzip_buffers` directive |
|
||||
| vary | boolean | optional | false | | dynamically set the `gzip_vary` directive |
|
||||
|
||||
## How To Enable
|
||||
|
||||
|
51
t/plugin/gzip.t
vendored
51
t/plugin/gzip.t
vendored
@ -395,7 +395,54 @@ Content-Encoding: gzip
|
||||
|
||||
|
||||
|
||||
=== TEST 15: vary
|
||||
=== TEST 15: match all types
|
||||
--- config
|
||||
location /t {
|
||||
content_by_lua_block {
|
||||
local t = require("lib.test_admin").test
|
||||
local code, body = t('/apisix/admin/routes/1',
|
||||
ngx.HTTP_PUT,
|
||||
[[{
|
||||
"uri": "/echo",
|
||||
"upstream": {
|
||||
"type": "roundrobin",
|
||||
"nodes": {
|
||||
"127.0.0.1:1980": 1
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"gzip": {
|
||||
"types": "*"
|
||||
}
|
||||
}
|
||||
}]]
|
||||
)
|
||||
|
||||
if code >= 300 then
|
||||
ngx.status = code
|
||||
end
|
||||
ngx.say(body)
|
||||
}
|
||||
}
|
||||
--- response_body
|
||||
passed
|
||||
|
||||
|
||||
|
||||
=== TEST 16: hit
|
||||
--- request
|
||||
POST /echo
|
||||
0123456789
|
||||
012345678
|
||||
--- more_headers
|
||||
Accept-Encoding: gzip
|
||||
Content-Type: video/3gpp
|
||||
--- response_headers
|
||||
Content-Encoding: gzip
|
||||
|
||||
|
||||
|
||||
=== TEST 17: vary
|
||||
--- config
|
||||
location /t {
|
||||
content_by_lua_block {
|
||||
@ -429,7 +476,7 @@ passed
|
||||
|
||||
|
||||
|
||||
=== TEST 16: hit
|
||||
=== TEST 18: hit
|
||||
--- request
|
||||
POST /echo
|
||||
0123456789
|
||||
|
Loading…
Reference in New Issue
Block a user