Users have complained for a while that Swift's ETags don't match the expected RFC formats. We've resisted fixing this for just as long, worrying that the fix would break innumerable clients that expect the value to be a hex-encoded MD5 digest and *nothing else*. But, users keep asking for it, and some consumers (including some CDNs) break if we *don't* have quoted etags -- so, let's make it an option. With this middleware, Swift users can set metadata per-account or even per-container to explicitly request RFC compliant etags or not. Swift operators also get an option to change the default behavior cluster-wide; it defaults to the old, non-compliant format. See also: - https://tools.ietf.org/html/rfc2616#section-3.11 - https://tools.ietf.org/html/rfc7232#section-2.3 Closes-Bug: 1099087 Closes-Bug: 1424614 Co-Authored-By: Tim Burke <tim.burke@gmail.com> Change-Id: I380c6e34949d857158e11eb428b3eda9975d855d
7.5 KiB
Middleware
Account Quotas
swift.common.middleware.account_quotas
AWS S3 Api
swift.common.middleware.s3api.s3api
swift.common.middleware.s3api.s3token
swift.common.middleware.s3api.s3request
swift.common.middleware.s3api.s3response
swift.common.middleware.s3api.exception
swift.common.middleware.s3api.etree
swift.common.middleware.s3api.utils
swift.common.middleware.s3api.subresource
swift.common.middleware.s3api.acl_handlers
swift.common.middleware.s3api.acl_utils
swift.common.middleware.s3api.controllers.base
swift.common.middleware.s3api.controllers.service
swift.common.middleware.s3api.controllers.bucket
swift.common.middleware.s3api.controllers.obj
swift.common.middleware.s3api.controllers.acl
swift.common.middleware.s3api.controllers.s3_acl
swift.common.middleware.s3api.controllers.multi_upload
swift.common.middleware.s3api.controllers.multi_delete
swift.common.middleware.s3api.controllers.versioning
swift.common.middleware.s3api.controllers.location
swift.common.middleware.s3api.controllers.logging
Bulk Operations (Delete and Archive Auto Extraction)
swift.common.middleware.bulk
CatchErrors
swift.common.middleware.catch_errors
CNAME Lookup
swift.common.middleware.cname_lookup
Container Quotas
swift.common.middleware.container_quotas
Container Sync Middleware
swift.common.middleware.container_sync
Cross Domain Policies
swift.common.middleware.crossdomain
Discoverability
Swift will by default provide clients with an interface providing
details about the installation. Unless disabled (i.e
expose_info=false
in proxy-server-config
), a GET request to
/info
will return configuration data in JSON format. An
example response:
{"swift": {"version": "1.11.0"}, "staticweb": {}, "tempurl": {}}
This would signify to the client that swift version 1.11.0 is running and that staticweb and tempurl are available in this installation.
There may be administrator-only information available via
/info
. To retrieve it, one must use an HMAC-signed request,
similar to TempURL. The signature may be produced like so:
swift tempurl GET 3600 /info secret 2>/dev/null | sed s/temp_url/swiftinfo/g
Domain Remap
swift.common.middleware.domain_remap
Dynamic Large Objects
DLO support centers around a user specified filter that matches
segments and concatenates them together in object listing order. Please
see the DLO docs for dlo-doc
further details.
Encryption
Encryption middleware should be deployed in conjunction with the
keymaster
middleware.
swift.common.middleware.crypto
swift.common.middleware.crypto.encrypter
swift.common.middleware.crypto.decrypter
Etag Quoter
swift.common.middleware.etag_quoter
FormPost
swift.common.middleware.formpost
GateKeeper
swift.common.middleware.gatekeeper
Healthcheck
swift.common.middleware.healthcheck
Keymaster
Keymaster middleware should be deployed in conjunction with the encryption
middleware.
swift.common.middleware.crypto.keymaster
KeystoneAuth
swift.common.middleware.keystoneauth
List Endpoints
swift.common.middleware.list_endpoints
Memcache
swift.common.middleware.memcache
Name Check (Forbidden Character Filter)
swift.common.middleware.name_check
Object Versioning
swift.common.middleware.versioned_writes.object_versioning
Proxy Logging
swift.common.middleware.proxy_logging
Ratelimit
swift.common.middleware.ratelimit
Read Only
swift.common.middleware.read_only
Recon
swift.common.middleware.recon
Server Side Copy
swift.common.middleware.copy
Static Large Objects
Please see the SLO docs for slo-doc
further details.
StaticWeb
swift.common.middleware.staticweb
Symlink
swift.common.middleware.symlink
TempAuth
swift.common.middleware.tempauth
TempURL
swift.common.middleware.tempurl
Versioned Writes
swift.common.middleware.versioned_writes.legacy
XProfile
swift.common.middleware.xprofile