HttpResponseStream doesn't work when `end`ing the stream without a `write`
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 38/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- À l'abandon
- Stack technique
- aws, node.js, typescript
Piste de recherche
Commencez par lire src/HttpResponseStream.js, en particulier la gestion de onBeforeFirstWrite, puis suivez le chemin de fin de Node ClientRequest décrit dans l’issue. Reproduisez à la fois le cas responseStream.end("Not Found") et le cas responseStream.end(), et vérifiez que le code d’état personnalisé et les en-têtes sont appliqués dans chaque cas.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
When using HttpResponseStream to set the status code and headers on a streaming response, I noticed that if I never call write on the stream, the custom status code and headers don't work.
Example repro:
export const handler = awslambda.streamifyResponse(
async (event, responseStream, context) => {
const metadata = {
statusCode: 404,
headers: { "Content-Type": "text/plain", "X-Foo": "Bar" }
};
responseStream = awslambda.HttpResponseStream.from(responseStream, metadata);
// This will cause a 502 with no custom response headers:
responseStream.end("Not Found");
// This will cause a 200 with no custom response headers:
responseStream.end();
}
);
I believe this is because HttpResponseStream relies on the onBeforeFirstWrite callback:
onBeforeFirstWrite is implemented by overriding http.ClientRequest stream's write:
// https://github.com/aws/aws-lambda-base-images/tree/nodejs18.x -> /var/runtime/index.mjs
req.write = function(chunk, encoding, callback) {
vvverbose("ResponseStream::write", chunk.length, "callback:", typeof callback);
if (typeof chunk !== "string" && !Buffer.isBuffer(chunk) && chunk?.constructor !== Uint8Array) {
chunk = JSON.stringify(chunk);
}
if (status === STATUS_READY && typeof this._onBeforeFirstWrite === "function") {
this._onBeforeFirstWrite((ch) => origWrite(ch));
}
const ret = origWrite(chunk, encoding, callback);
// [snip]
But turns out Node's ClientRequest doesn't call write when ending the stream with a final chunk of data, it calls an internal write_ instead:
I guess this could also be considered a Node bug, because their documentation for ClientRequest.end says:
If
datais specified, it is equivalent to callingrequest.write(data, encoding)followed byrequest.end(callback).
But even if it did implement that contract correctly, there's still the case of ending the stream with no data, i.e., responseStream.end().
- Langage dominant
- TypeScript
- Étoiles
- 224
- Forks
- 60
- Merge moyen
- 26 min
- PR mergées (30 j)
- 2
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de aws/aws-lambda-nodejs-runtime-interface-client
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 20/100
aws/aws-lambda-nodejs-runtime-interface-client#198 · 3 commentaires · 6 réactions ·
-
Difficulté 4/5 3-5 jours Accessibilité débutants 48/100
aws/aws-lambda-nodejs-runtime-interface-client#195 · 12 réactions ·
-
bug
aws/aws-lambda-nodejs-runtime-interface-client#170 · 15 commentaires · 6 réactions · 1 personne assignée ·
-
AWS Inspector findings for curl Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 38/100
aws/aws-lambda-nodejs-runtime-interface-client#159 · 2 réactions ·
-
Difficulté 4/5 3-5 jours Accessibilité débutants 42/100
aws/aws-lambda-nodejs-runtime-interface-client#145 · 1 commentaire · 6 réactions ·
Toutes les issues de aws/aws-lambda-nodejs-runtime-interface-client
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
copse-dev/agent-pane#2953 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
Eynzof/Hermes-CN-Desktop#610 ·
-
[Bug]: Matrix progress drafts fail with "Matrix runtime not initialized" during tool activity Ouvertebug clawsweeper:linked-pr-open clawsweeper:needs-live-repro clawsweeper:no-new-fix-pr impact:message-loss issue-rating: 🐚 platinum hermit P2 regression
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
Client support matrix inclusion Ouverteenhancement
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
-
calcite-components needs triage refactor
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
Esri/calcite-design-system#15203 ·