eea / volto-depiction

MIT License
0 stars 0 forks source link

Visiting `.../<image>/image_*` causes Volto to crash #11

Open kenmanheimer opened 6 months ago

kenmanheimer commented 6 months ago

With volto-depiction installed visits to <path-to-image>/image_mini or .../image_large or any applicable .../image_* causes Volto to crash. I am including a copy the backtrace from the instance launch terminal at the bottom of this issue.

The problem happens when volto-depiction is included in my build and stops when I remove it.

This is a critical bug because indexing robots trigger this, crashing Volto sites at random (and preventing indexing completion besides). Very not good.

Here's the sample backtrace:

[...]
docker-compose-webserver-1  | 2023/12/04 12:38:11 [error] 28#28: *1416 connect() failed (113: No route to host) while connecting to upstream, client: 52.167.144.229, server: myriadicity.net, request: "GET /@@search?sort_order=reverse&b_start:int=0&path=/myr&sort_on=Date&SearchableText=7&&advanced_search=True HTTP/1.1", upstream: "http://172.22.0.3:3000/@@search?sort_order=reverse&b_start:int=0&path=/myr&sort_on=Date&SearchableText=7&&advanced_search=True", host: "myriadicity.net"
docker-compose-webserver-1  | 202.83.173.19 - - [04/Dec/2023:12:38:11 +0000] "GET /xmlrpc.php HTTP/1.1" 502 157 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" "-"
docker-compose-webserver-1  | 52.167.144.229 - - [04/Dec/2023:12:38:11 +0000] "GET /@@search?sort_order=reverse&b_start:int=0&path=/myr&sort_on=Date&SearchableText=7&&advanced_search=True HTTP/1.1" 502 559 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) Chrome/116.0.1938.76 Safari/537.36" "-"
docker-compose-frontend-1   |       socketPath: undefined,
docker-compose-frontend-1   |       method: 'GET',
docker-compose-frontend-1   |       maxHeaderSize: undefined,
docker-compose-frontend-1   |       insecureHTTPParser: undefined,
docker-compose-frontend-1   |       joinDuplicateHeaders: undefined,
docker-compose-frontend-1   |       path: '/Plone/++api++/musings-and-amusements/drawings/pastel-explorations/bright_gray_heart.jpg/image_mini',
docker-compose-frontend-1   |       _ended: true,
docker-compose-frontend-1   |       res: <ref *2> IncomingMessage {
docker-compose-frontend-1   |         _readableState: ReadableState {
docker-compose-frontend-1   |           objectMode: false,
docker-compose-frontend-1   |           highWaterMark: 16384,
docker-compose-frontend-1   |           buffer: BufferList { head: null, tail: null, length: 0 },
docker-compose-frontend-1   |           length: 0,
docker-compose-frontend-1   |           pipes: [],
docker-compose-frontend-1   |           flowing: true,
docker-compose-frontend-1   |           ended: true,
docker-compose-frontend-1   |           endEmitted: true,
docker-compose-frontend-1   |           reading: false,
docker-compose-frontend-1   |           constructed: true,
docker-compose-frontend-1   |           sync: true,
docker-compose-frontend-1   |           needReadable: false,
docker-compose-frontend-1   |           emittedReadable: false,
docker-compose-frontend-1   |           readableListening: false,
docker-compose-frontend-1   |           resumeScheduled: false,
docker-compose-frontend-1   |           errorEmitted: false,
docker-compose-frontend-1   |           emitClose: true,
docker-compose-frontend-1   |           autoDestroy: true,
docker-compose-frontend-1   |           destroyed: true,
docker-compose-frontend-1   |           errored: null,
docker-compose-frontend-1   |           closed: true,
docker-compose-frontend-1   |           closeEmitted: true,
docker-compose-frontend-1   |           defaultEncoding: 'utf8',
docker-compose-frontend-1   |           awaitDrainWriters: null,
docker-compose-frontend-1   |           multiAwaitDrain: false,
docker-compose-frontend-1   |           readingMore: true,
docker-compose-frontend-1   |           dataEmitted: true,
docker-compose-frontend-1   |           decoder: null,
docker-compose-frontend-1   |           encoding: null,
docker-compose-frontend-1   |           [Symbol(kPaused)]: false
docker-compose-frontend-1   |         },
docker-compose-frontend-1   |         _events: [Object: null prototype] {
docker-compose-frontend-1   |           end: [
docker-compose-frontend-1   |             [Function: responseOnEnd],
docker-compose-frontend-1   |             [Function (anonymous)],
docker-compose-frontend-1   |             [Function: bound emit]
docker-compose-frontend-1   |           ],
docker-compose-frontend-1   |           data: [
docker-compose-frontend-1   |             [Function (anonymous)],
docker-compose-frontend-1   |             [Function (anonymous)],
docker-compose-frontend-1   |             [Function: bound emit]
docker-compose-frontend-1   |           ],
docker-compose-frontend-1   |           error: [ [Function], [Function: bound emit] ],
docker-compose-frontend-1   |           close: [Function: bound emit]
docker-compose-frontend-1   |         },
docker-compose-frontend-1   |         _eventsCount: 4,
docker-compose-frontend-1   |         _maxListeners: undefined,
docker-compose-frontend-1   |         socket: <ref *1> Socket {
docker-compose-frontend-1   |           connecting: false,
docker-compose-frontend-1   |           _hadError: false,
docker-compose-frontend-1   |           _parent: null,
docker-compose-frontend-1   |           _host: 'backend',
docker-compose-frontend-1   |           _closeAfterHandlingError: false,
docker-compose-frontend-1   |           _readableState: ReadableState {
docker-compose-frontend-1   |             objectMode: false,
docker-compose-frontend-1   |             highWaterMark: 16384,
docker-compose-frontend-1   |             buffer: [BufferList],
docker-compose-frontend-1   |             length: 0,
docker-compose-frontend-1   |             pipes: [],
docker-compose-frontend-1   |             flowing: true,
docker-compose-frontend-1   |             ended: false,
docker-compose-frontend-1   |             endEmitted: false,
docker-compose-frontend-1   |             reading: true,
docker-compose-frontend-1   |             constructed: true,
docker-compose-frontend-1   |             sync: false,
docker-compose-frontend-1   |             needReadable: true,
docker-compose-frontend-1   |             emittedReadable: false,
docker-compose-frontend-1   |             readableListening: false,
docker-compose-frontend-1   |             resumeScheduled: false,
docker-compose-frontend-1   |             errorEmitted: false,
docker-compose-frontend-1   |             emitClose: false,
docker-compose-frontend-1   |             autoDestroy: true,
docker-compose-frontend-1   |             destroyed: false,
docker-compose-frontend-1   |             errored: null,
docker-compose-frontend-1   |             closed: false,
docker-compose-frontend-1   |             closeEmitted: false,
docker-compose-frontend-1   |             defaultEncoding: 'utf8',
docker-compose-frontend-1   |             awaitDrainWriters: null,
docker-compose-frontend-1   |             multiAwaitDrain: false,
docker-compose-frontend-1   |             readingMore: false,
docker-compose-frontend-1   |             dataEmitted: true,
docker-compose-frontend-1   |             decoder: null,
docker-compose-frontend-1   |             encoding: null,
docker-compose-frontend-1   |             [Symbol(kPaused)]: false
docker-compose-frontend-1   |           },
docker-compose-frontend-1   |           _events: [Object: null prototype] {
docker-compose-frontend-1   |             end: [Function: onReadableStreamEnd],
docker-compose-frontend-1   |             free: [Function: onFree],
docker-compose-frontend-1   |             close: [Array],
docker-compose-frontend-1   |             timeout: [Function: onTimeout],
docker-compose-frontend-1   |             agentRemove: [Function: onRemove],
docker-compose-frontend-1   |             error: [Function: socketErrorListener],
docker-compose-frontend-1   |             finish: [Function]
docker-compose-frontend-1   |           },
docker-compose-frontend-1   |           _eventsCount: 7,
docker-compose-frontend-1   |           _maxListeners: undefined,
docker-compose-frontend-1   |           _writableState: WritableState {
docker-compose-frontend-1   |             objectMode: false,
docker-compose-frontend-1   |             highWaterMark: 16384,
docker-compose-frontend-1   |             finalCalled: true,
docker-compose-frontend-1   |             needDrain: false,
docker-compose-frontend-1   |             ending: true,
docker-compose-frontend-1   |             ended: true,
docker-compose-frontend-1   |             finished: false,
docker-compose-frontend-1   |             destroyed: false,
docker-compose-frontend-1   |             decodeStrings: false,
docker-compose-frontend-1   |             defaultEncoding: 'utf8',
docker-compose-frontend-1   |             length: 0,
docker-compose-frontend-1   |             writing: false,
docker-compose-frontend-1   |             corked: 0,
docker-compose-frontend-1   |             sync: false,
docker-compose-frontend-1   |             bufferProcessing: false,
docker-compose-frontend-1   |             onwrite: [Function: bound onwrite],
docker-compose-frontend-1   |             writecb: null,
docker-compose-frontend-1   |             writelen: 0,
docker-compose-frontend-1   |             afterWriteTickInfo: null,
docker-compose-frontend-1   |             buffered: [],
docker-compose-frontend-1   |             bufferedIndex: 0,
docker-compose-frontend-1   |             allBuffers: true,
docker-compose-frontend-1   |             allNoop: true,
docker-compose-frontend-1   |             pendingcb: 1,
docker-compose-frontend-1   |             constructed: true,
docker-compose-frontend-1   |             prefinished: false,
docker-compose-frontend-1   |             errorEmitted: false,
docker-compose-frontend-1   |             emitClose: false,
docker-compose-frontend-1   |             autoDestroy: true,
docker-compose-frontend-1   |             errored: null,
docker-compose-frontend-1   |             closed: false,
docker-compose-frontend-1   |             closeEmitted: false,
docker-compose-frontend-1   |             [Symbol(kOnFinished)]: []
docker-compose-frontend-1   |           },
docker-compose-frontend-1   |           allowHalfOpen: false,
docker-compose-frontend-1   |           _sockname: null,
docker-compose-frontend-1   |           _pendingData: null,
docker-compose-frontend-1   |           _pendingEncoding: '',
docker-compose-frontend-1   |           server: null,
docker-compose-frontend-1   |           _server: null,
docker-compose-frontend-1   |           parser: null,
docker-compose-frontend-1   |           _httpMessage: [Circular *3],
docker-compose-frontend-1   |           [Symbol(async_id_symbol)]: 84647,
docker-compose-frontend-1   |           [Symbol(kHandle)]: TCP {
docker-compose-frontend-1   |             reading: true,
docker-compose-frontend-1   |             onconnection: null,
docker-compose-frontend-1   |             [Symbol(owner_symbol)]: [Circular *1]
docker-compose-frontend-1   |           },
docker-compose-frontend-1   |           [Symbol(lastWriteQueueSize)]: 0,
docker-compose-frontend-1   |           [Symbol(timeout)]: null,
docker-compose-frontend-1   |           [Symbol(kBuffer)]: null,
docker-compose-frontend-1   |           [Symbol(kBufferCb)]: null,
docker-compose-frontend-1   |           [Symbol(kBufferGen)]: null,
docker-compose-frontend-1   |           [Symbol(kCapture)]: false,
docker-compose-frontend-1   |           [Symbol(kSetNoDelay)]: true,
docker-compose-frontend-1   |           [Symbol(kSetKeepAlive)]: false,
docker-compose-frontend-1   |           [Symbol(kSetKeepAliveInitialDelay)]: 0,
docker-compose-frontend-1   |           [Symbol(kBytesRead)]: 0,
docker-compose-frontend-1   |           [Symbol(kBytesWritten)]: 0
docker-compose-frontend-1   |         },
docker-compose-frontend-1   |         httpVersionMajor: 1,
docker-compose-frontend-1   |         httpVersionMinor: 1,
docker-compose-frontend-1   |         httpVersion: '1.1',
docker-compose-frontend-1   |         complete: true,
docker-compose-frontend-1   |         rawHeaders: [
docker-compose-frontend-1   |           'Connection',
docker-compose-frontend-1   |           'close',
docker-compose-frontend-1   |           'Content-Length',
docker-compose-frontend-1   |           '179',
docker-compose-frontend-1   |           'Content-Type',
docker-compose-frontend-1   |           'application/json',
docker-compose-frontend-1   |           'Date',
docker-compose-frontend-1   |           'Mon, 04 Dec 2023 12:37:38 GMT',
docker-compose-frontend-1   |           'Server',
docker-compose-frontend-1   |           'waitress',
docker-compose-frontend-1   |           'Via',
docker-compose-frontend-1   |           'waitress',
docker-compose-frontend-1   |           'X-Frame-Options',
docker-compose-frontend-1   |           'SAMEORIGIN',
docker-compose-frontend-1   |           'X-Powered-By',
docker-compose-frontend-1   |           'Zope (www.zope.dev), Python (www.python.org)'
docker-compose-frontend-1   |         ],
docker-compose-frontend-1   |         rawTrailers: [],
docker-compose-frontend-1   |         joinDuplicateHeaders: undefined,
docker-compose-frontend-1   |         aborted: false,
docker-compose-frontend-1   |         upgrade: false,
docker-compose-frontend-1   |         url: '',
docker-compose-frontend-1   |         method: null,
docker-compose-frontend-1   |         statusCode: 404,
docker-compose-frontend-1   |         statusMessage: 'Not Found',
docker-compose-frontend-1   |         client: <ref *1> Socket {
docker-compose-frontend-1   |           connecting: false,
docker-compose-frontend-1   |           _hadError: false,
docker-compose-frontend-1   |           _parent: null,
docker-compose-frontend-1   |           _host: 'backend',
docker-compose-frontend-1   |           _closeAfterHandlingError: false,
docker-compose-frontend-1   |           _readableState: ReadableState {
docker-compose-frontend-1   |             objectMode: false,
docker-compose-frontend-1   |             highWaterMark: 16384,
docker-compose-frontend-1   |             buffer: [BufferList],
docker-compose-frontend-1   |             length: 0,
docker-compose-frontend-1   |             pipes: [],
docker-compose-frontend-1   |             flowing: true,
docker-compose-frontend-1   |             ended: false,
docker-compose-frontend-1   |             endEmitted: false,
docker-compose-frontend-1   |             reading: true,
docker-compose-frontend-1   |             constructed: true,
docker-compose-frontend-1   |             sync: false,
docker-compose-frontend-1   |             needReadable: true,
docker-compose-frontend-1   |             emittedReadable: false,
docker-compose-frontend-1   |             readableListening: false,
docker-compose-frontend-1   |             resumeScheduled: false,
docker-compose-frontend-1   |             errorEmitted: false,
docker-compose-frontend-1   |             emitClose: false,
docker-compose-frontend-1   |             autoDestroy: true,
docker-compose-frontend-1   |             destroyed: false,
docker-compose-frontend-1   |             errored: null,
docker-compose-frontend-1   |             closed: false,
docker-compose-frontend-1   |             closeEmitted: false,
docker-compose-frontend-1   |             defaultEncoding: 'utf8',
docker-compose-frontend-1   |             awaitDrainWriters: null,
docker-compose-frontend-1   |             multiAwaitDrain: false,
docker-compose-frontend-1   |             readingMore: false,
docker-compose-frontend-1   |             dataEmitted: true,
docker-compose-frontend-1   |             decoder: null,
docker-compose-frontend-1   |             encoding: null,
docker-compose-frontend-1   |             [Symbol(kPaused)]: false
docker-compose-frontend-1   |           },
docker-compose-frontend-1   |           _events: [Object: null prototype] {
docker-compose-frontend-1   |             end: [Function: onReadableStreamEnd],
docker-compose-frontend-1   |             free: [Function: onFree],
docker-compose-frontend-1   |             close: [Array],
docker-compose-frontend-1   |             timeout: [Function: onTimeout],
docker-compose-frontend-1   |             agentRemove: [Function: onRemove],
docker-compose-frontend-1   |             error: [Function: socketErrorListener],
docker-compose-frontend-1   |             finish: [Function]
docker-compose-frontend-1   |           },
docker-compose-frontend-1   |           _eventsCount: 7,
docker-compose-frontend-1   |           _maxListeners: undefined,
docker-compose-frontend-1   |           _writableState: WritableState {
docker-compose-frontend-1   |             objectMode: false,
docker-compose-frontend-1   |             highWaterMark: 16384,
docker-compose-frontend-1   |             finalCalled: true,
docker-compose-frontend-1   |             needDrain: false,
docker-compose-frontend-1   |             ending: true,
docker-compose-frontend-1   |             ended: true,
docker-compose-frontend-1   |             finished: false,
docker-compose-frontend-1   |             destroyed: false,
docker-compose-frontend-1   |             decodeStrings: false,
docker-compose-frontend-1   |             defaultEncoding: 'utf8',
docker-compose-frontend-1   |             length: 0,
docker-compose-frontend-1   |             writing: false,
docker-compose-frontend-1   |             corked: 0,
docker-compose-frontend-1   |             sync: false,
docker-compose-frontend-1   |             bufferProcessing: false,
docker-compose-frontend-1   |             onwrite: [Function: bound onwrite],
docker-compose-frontend-1   |             writecb: null,
docker-compose-frontend-1   |             writelen: 0,
docker-compose-frontend-1   |             afterWriteTickInfo: null,
docker-compose-frontend-1   |             buffered: [],
docker-compose-frontend-1   |             bufferedIndex: 0,
docker-compose-frontend-1   |             allBuffers: true,
docker-compose-frontend-1   |             allNoop: true,
docker-compose-frontend-1   |             pendingcb: 1,
docker-compose-frontend-1   |             constructed: true,
docker-compose-frontend-1   |             prefinished: false,
docker-compose-frontend-1   |             errorEmitted: false,
docker-compose-frontend-1   |             emitClose: false,
docker-compose-frontend-1   |             autoDestroy: true,
docker-compose-frontend-1   |             errored: null,
docker-compose-frontend-1   |             closed: false,
docker-compose-frontend-1   |             closeEmitted: false,
docker-compose-frontend-1   |             [Symbol(kOnFinished)]: []
docker-compose-frontend-1   |           },
docker-compose-frontend-1   |           allowHalfOpen: false,
docker-compose-frontend-1   |           _sockname: null,
docker-compose-frontend-1   |           _pendingData: null,
docker-compose-frontend-1   |           _pendingEncoding: '',
docker-compose-frontend-1   |           server: null,
docker-compose-frontend-1   |           _server: null,
docker-compose-frontend-1   |           parser: null,
docker-compose-frontend-1   |           _httpMessage: [Circular *3],
docker-compose-frontend-1   |           [Symbol(async_id_symbol)]: 84647,
docker-compose-frontend-1   |           [Symbol(kHandle)]: TCP {
docker-compose-frontend-1   |             reading: true,
docker-compose-frontend-1   |             onconnection: null,
docker-compose-frontend-1   |             [Symbol(owner_symbol)]: [Circular *1]
docker-compose-frontend-1   |           },
docker-compose-frontend-1   |           [Symbol(lastWriteQueueSize)]: 0,
docker-compose-frontend-1   |           [Symbol(timeout)]: null,
docker-compose-frontend-1   |           [Symbol(kBuffer)]: null,
docker-compose-frontend-1   |           [Symbol(kBufferCb)]: null,
docker-compose-frontend-1   |           [Symbol(kBufferGen)]: null,
docker-compose-frontend-1   |           [Symbol(kCapture)]: false,
docker-compose-frontend-1   |           [Symbol(kSetNoDelay)]: true,
docker-compose-frontend-1   |           [Symbol(kSetKeepAlive)]: false,
docker-compose-frontend-1   |           [Symbol(kSetKeepAliveInitialDelay)]: 0,
docker-compose-frontend-1   |           [Symbol(kBytesRead)]: 0,
docker-compose-frontend-1   |           [Symbol(kBytesWritten)]: 0
docker-compose-frontend-1   |         },
docker-compose-frontend-1   |         _consuming: false,
docker-compose-frontend-1   |         _dumped: false,
docker-compose-frontend-1   |         req: [Circular *3],
docker-compose-frontend-1   |         [Symbol(kCapture)]: false,
docker-compose-frontend-1   |         [Symbol(kHeaders)]: {
docker-compose-frontend-1   |           connection: 'close',
docker-compose-frontend-1   |           'content-length': '179',
docker-compose-frontend-1   |           'content-type': 'application/json',
docker-compose-frontend-1   |           date: 'Mon, 04 Dec 2023 12:37:38 GMT',
docker-compose-frontend-1   |           server: 'waitress',
docker-compose-frontend-1   |           via: 'waitress',
docker-compose-frontend-1   |           'x-frame-options': 'SAMEORIGIN',
docker-compose-frontend-1   |           'x-powered-by': 'Zope (www.zope.dev), Python (www.python.org)'
docker-compose-frontend-1   |         },
docker-compose-frontend-1   |         [Symbol(kHeadersCount)]: 16,
docker-compose-frontend-1   |         [Symbol(kTrailers)]: null,
docker-compose-frontend-1   |         [Symbol(kTrailersCount)]: 0
docker-compose-frontend-1   |       },
docker-compose-frontend-1   |       aborted: false,
docker-compose-frontend-1   |       timeoutCb: null,
docker-compose-frontend-1   |       upgradeOrConnect: false,
docker-compose-frontend-1   |       parser: null,
docker-compose-frontend-1   |       maxHeadersCount: null,
docker-compose-frontend-1   |       reusedSocket: false,
docker-compose-frontend-1   |       host: 'backend',
docker-compose-frontend-1   |       protocol: 'http:',
docker-compose-frontend-1   |       [Symbol(kCapture)]: false,
docker-compose-frontend-1   |       [Symbol(kBytesWritten)]: 0,
docker-compose-frontend-1   |       [Symbol(kNeedDrain)]: false,
docker-compose-frontend-1   |       [Symbol(corked)]: 0,
docker-compose-frontend-1   |       [Symbol(kOutHeaders)]: [Object: null prototype] {
docker-compose-frontend-1   |         host: [ 'Host', 'backend:8080' ],
docker-compose-frontend-1   |         'accept-encoding': [ 'accept-encoding', 'gzip, deflate' ],
docker-compose-frontend-1   |         'user-agent': [ 'user-agent', 'node-superagent/3.8.2' ],
docker-compose-frontend-1   |         'x-forwarded-for': [ 'x-forwarded-for', '66.249.64.33, 172.22.0.4' ],
docker-compose-frontend-1   |         'x-forwarded-host': [ 'x-forwarded-host', 'myriadicity.net' ]
docker-compose-frontend-1   |       },
docker-compose-frontend-1   |       [Symbol(errored)]: null,
docker-compose-frontend-1   |       [Symbol(kHighWaterMark)]: 16384,
docker-compose-frontend-1   |       [Symbol(kRejectNonStandardBodyWrites)]: false,
docker-compose-frontend-1   |       [Symbol(kUniqueHeaders)]: null
docker-compose-frontend-1   |     },
docker-compose-frontend-1   |     text: undefined,
docker-compose-frontend-1   |     body: Buffer(179) [Uint8Array] [
docker-compose-frontend-1   |       123,  10,  32,  32,  34, 109, 101, 115, 115,  97, 103, 101,
docker-compose-frontend-1   |        34,  58,  32,  34,  82, 101, 115, 111, 117, 114,  99, 101,
docker-compose-frontend-1   |        32, 110, 111, 116,  32, 102, 111, 117, 110, 100,  58,  32,
docker-compose-frontend-1   |       104, 116, 116, 112,  58,  47,  47,  98,  97,  99, 107, 101,
docker-compose-frontend-1   |       110, 100,  58,  56,  48,  56,  48,  47,  80, 108, 111, 110,
docker-compose-frontend-1   |       101,  47,  43,  43,  97, 112, 105,  43,  43,  47, 109, 117,
docker-compose-frontend-1   |       115, 105, 110, 103, 115,  45,  97, 110, 100,  45,  97, 109,
docker-compose-frontend-1   |       117, 115, 101, 109, 101, 110, 116, 115,  47, 100, 114,  97,
docker-compose-frontend-1   |       119, 105, 110, 103,
docker-compose-frontend-1   |       ... 79 more items
docker-compose-frontend-1   |     ],
docker-compose-frontend-1   |     files: undefined,
docker-compose-frontend-1   |     buffered: false,
docker-compose-frontend-1   |     headers: {
docker-compose-frontend-1   |       connection: 'close',
docker-compose-frontend-1   |       'content-length': '179',
docker-compose-frontend-1   |       'content-type': 'application/json',
docker-compose-frontend-1   |       date: 'Mon, 04 Dec 2023 12:37:38 GMT',
docker-compose-frontend-1   |       server: 'waitress',
docker-compose-frontend-1   |       via: 'waitress',
docker-compose-frontend-1   |       'x-frame-options': 'SAMEORIGIN',
docker-compose-frontend-1   |       'x-powered-by': 'Zope (www.zope.dev), Python (www.python.org)'
docker-compose-frontend-1   |     },
docker-compose-frontend-1   |     header: {
docker-compose-frontend-1   |       connection: 'close',
docker-compose-frontend-1   |       'content-length': '179',
docker-compose-frontend-1   |       'content-type': 'application/json',
docker-compose-frontend-1   |       date: 'Mon, 04 Dec 2023 12:37:38 GMT',
docker-compose-frontend-1   |       server: 'waitress',
docker-compose-frontend-1   |       via: 'waitress',
docker-compose-frontend-1   |       'x-frame-options': 'SAMEORIGIN',
docker-compose-frontend-1   |       'x-powered-by': 'Zope (www.zope.dev), Python (www.python.org)'
docker-compose-frontend-1   |     },
docker-compose-frontend-1   |     statusCode: 404,
docker-compose-backend-1    | 127.0.0.1 - - [04/Dec/2023:12:38:19 +0000] "GET /ok HTTP/1.1" 200 2 "-" "Wget"
docker-compose-frontend-1   |     status: 404,
docker-compose-frontend-1   |     statusType: 4,
docker-compose-frontend-1   |     info: false,
docker-compose-frontend-1   |     ok: false,
docker-compose-frontend-1   |     redirect: false,
docker-compose-frontend-1   |     clientError: true,
docker-compose-frontend-1   |     serverError: false,
docker-compose-frontend-1   |     error: Error: cannot GET /Plone/++api++/musings-and-amusements/drawings/pastel-explorations/bright_gray_heart.jpg/image_mini (404)
docker-compose-frontend-1   |         at Response.toError (/app/node_modules/superagent/lib/node/response.js:94:15)
docker-compose-frontend-1   |         at ResponseBase._setStatusProperties (/app/node_modules/superagent/lib/response-base.js:123:16)
docker-compose-frontend-1   |         at new Response (/app/node_modules/superagent/lib/node/response.js:41:8)
docker-compose-frontend-1   |         at Request._emitResponse (/app/node_modules/superagent/lib/node/index.js:742:20)
docker-compose-frontend-1   |         at /app/node_modules/superagent/lib/node/index.js:906:38
docker-compose-frontend-1   |         at IncomingMessage.<anonymous> (/app/node_modules/superagent/lib/node/parsers/image.js:10:5)
docker-compose-frontend-1   |         at IncomingMessage.emit (node:events:529:35)
docker-compose-frontend-1   |         at IncomingMessage.emit (node:domain:489:12)
docker-compose-frontend-1   |         at endReadableNT (node:internal/streams/readable:1368:12)
docker-compose-frontend-1   |         at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
docker-compose-frontend-1   |       status: 404,
docker-compose-frontend-1   |       text: undefined,
docker-compose-frontend-1   |       method: 'GET',
docker-compose-frontend-1   |       path: '/Plone/++api++/musings-and-amusements/drawings/pastel-explorations/bright_gray_heart.jpg/image_mini'
docker-compose-frontend-1   |     },
docker-compose-frontend-1   |     accepted: false,
docker-compose-frontend-1   |     noContent: false,
docker-compose-frontend-1   |     badRequest: false,
docker-compose-frontend-1   |     unauthorized: false,
docker-compose-frontend-1   |     notAcceptable: false,
docker-compose-frontend-1   |     forbidden: false,
docker-compose-frontend-1   |     notFound: true,
docker-compose-frontend-1   |     type: 'application/json',
docker-compose-frontend-1   |     links: {},
docker-compose-frontend-1   |     setEncoding: [Function: bound ],
docker-compose-frontend-1   |     redirects: [
docker-compose-frontend-1   |       'http://backend:8080/Plone/++api++/musings-and-amusements/drawings/pastel-explorations/bright_gray_heart.jpg/image_mini'
docker-compose-frontend-1   |     ],
docker-compose-frontend-1   |     [Symbol(kCapture)]: false
docker-compose-frontend-1   |   }
docker-compose-frontend-1   | }
docker-compose-frontend-1   | 
docker-compose-frontend-1   | Node.js v18.18.2
docker-compose-webserver-1  | 64.124.8.26 - - [04/Dec/2023:12:38:24 +0000] "GET /robots.txt HTTP/1.1" 499 0 "-" "Mozilla/5.0 (compatible; ImagesiftBot; +imagesift.com)" "-"
[...]
avoinea commented 5 months ago

@kenmanheimer Thank you for your report.

We used this add-on mainly with a Plone 4 back-end and it requires eea.depiction Plone Backend add-on.

Now, using image/image_* depiction is in general a bad idea, because you will have issues with cache invalidation, SEO, etc.

That's why, if you're using Plone 5/6, you should rely on Image scales. @@images/<scale-uid>.png

avoinea commented 5 months ago

@kenmanheimer Here is an example of an output from RestAPI on https://demo.plone.org for an Image content-type:

{
  "@id": "https://demo.plone.org/2-1.jpg", 
  "@type": "Image", 
  "UID": "3b75a909666a4dcb8c20fc8237beb786", 
  "image": {
    "content-type": "image/jpeg", 
    "download": "https://demo.plone.org/2-1.jpg/@@images/image-1440-a7251717990b93362dccd2c30e0485a9.jpeg", 
    "filename": "2-1.jpg", 
    "height": 960, 
    "scales": {
      "great": {
        "download": "https://demo.plone.org/2-1.jpg/@@images/image-1200-3e3e92cd46e7fffcac3f6aa8bf37780f.jpeg", 
        "height": 800, 
        "width": 1200
      }, 
      "huge": {
        "download": "https://demo.plone.org/2-1.jpg/@@images/image-1600-881d67e7a229ea7d1099c03423a73a43.jpeg", 
        "height": 960, 
        "width": 1440
      }, 
      "icon": {
        "download": "https://demo.plone.org/2-1.jpg/@@images/image-32-579e7393ca93608184dd1527b2dfb468.jpeg", 
        "height": 21, 
        "width": 32
      }, 
      "large": {
        "download": "https://demo.plone.org/2-1.jpg/@@images/image-800-af233b2e542d0b5d03fd6b30baa9cd0f.jpeg", 
        "height": 533, 
        "width": 800
      }, 
      "larger": {
        "download": "https://demo.plone.org/2-1.jpg/@@images/image-1000-a6d867dee85e30094910db4becdb52a8.jpeg", 
        "height": 666, 
        "width": 1000
      }, 
      "mini": {
        "download": "https://demo.plone.org/2-1.jpg/@@images/image-200-794d60fa226f49c38baea97e14189945.jpeg", 
        "height": 133, 
        "width": 200
      }, 
      "preview": {
        "download": "https://demo.plone.org/2-1.jpg/@@images/image-400-84e647c058830c50fec90f68ccc02317.jpeg", 
        "height": 266, 
        "width": 400
      }, 
      "teaser": {
        "download": "https://demo.plone.org/2-1.jpg/@@images/image-600-81283d7b7abaf9eaec93291cd849bc85.jpeg", 
        "height": 400, 
        "width": 600
      }, 
      "thumb": {
        "download": "https://demo.plone.org/2-1.jpg/@@images/image-128-bcd63489d2996195c82df81d0460397c.jpeg", 
        "height": 85, 
        "width": 128
      }, 
      "tile": {
        "download": "https://demo.plone.org/2-1.jpg/@@images/image-64-df2ee3b64d8e882fd502725819d3af14.jpeg", 
        "height": 42, 
        "width": 64
      }
    }, 
    "size": 168735, 
    "width": 1440
  },
...
}
kenmanheimer commented 5 months ago

Thanks for this info. I have specific responses which I will include inline with your cited text.

We used this add-on mainly with a Plone 4 back-end and it requires eea.depiction Plone Backend add-on.

I knew about and installed the Plone backend add-on.

Now, using image/image_* depiction is in general a bad idea, because you will have issues with cache invalidation, SEO, etc.

I did not use image/image_*, nor did I intend to do so. It was web indexing spiders who visited those addresses and triggered the crashes.

This is why it is important that you make it clear that this add-on should not be used except in special cases! (Eg, use only if you need it for use with a Plone 4 backend?)

That's why, if you're using Plone 5/6, you should rely on Image scales. @@images/<scale-uid>.png

Please make this kind of thing clear in the README so others don't make the mistake I made of using volto-depiction when I didn't need it, and in fact are going to cause experience frontend crashes every time the site is indexed!