Χρονικά όρια αδράνειας του proxy κατά τη διάρκεια μακρών εργασιών HTTP
Επιλέξτε polling ή μια καθορισμένη μορφή ροής όταν η μακρά εργασία διακομιστή συναντά το όριο αδράνειας ενός proxy, αντί να εισάγετε αυθαίρετα byte στην τελική απόκριση.
Αν μια υπηρεσία μείνει σιωπηλή για λεπτά και ένας proxy λήξει λόγω χρονικού ορίου, επιλέξτε τι πρέπει να λάβει ο πελάτης πριν προσθέσετε byte καρδιοχτύπου. Η παράταση ενός χρονόμετρου μπορεί να βοηθήσει μία αναμονή· το συμβόλαιο απόκρισης καθορίζει ποια πρόοδος είναι έγκυρη.
| Σχεδιασμός εφαρμογής | Συμβόλαιο προόδου |
|---|---|
| Ασύγχρονη εργασία | 202 Accepted με αναπαράσταση που περιγράφει την παρακολούθηση, ακολουθούμενη από πεπερασμένα αιτήματα κατάστασης και ρητές καταστάσεις ολοκλήρωσης/αποτυχίας |
| Ροή Server-Sent Events | Content-Type: text/event-stream και εγγραφές που καταλαβαίνει ο πελάτης SSE |
Το 202 δεν υπόσχεται ότι η εργασία θα πετύχει. Για SSE, μια εγγραφή σχολίου μπορεί να μοιάζει έτσι:
: heartbeat
Η άνω τελεία το κάνει σχόλιο και όχι συμβάν εφαρμογής. Οι σημειώσεις σύνταξης της HTML προτείνουν περιοδικά σχόλια περίπου κάθε 15 δευτερόλεπτα απέναντι σε κάποια παλιά συμπεριφορά αδράνειας proxy· αυτό είναι καθοδήγηση, όχι καθολική εγγύηση χρονικού ορίου.
Ολοκληρώστε τις κεφαλίδες και βεβαιωθείτε ότι η εφαρμογή/στοίβα εξυπηρέτησης απελευθερώνει εγγραφές αντί να τις αποθηκεύει τοπικά σε buffer. Τα byte που δεν έχουν σταλεί ακόμη δεν μπορούν να κρατήσουν ενεργό έναν καθοδικό μεσάζοντα.
Μην εισάγετε σχόλια SSE σε συνηθισμένο JSON ή δυαδικό περιεχόμενο. Ένα chunk μηδενικού μήκους HTTP/1.1 τερματίζει ένα chunked σώμα, άρα δεν είναι επαναλαμβανόμενο κενό καρδιοχτύπι.
Διατηρήστε μια προθεσμία λειτουργίας και μια πολιτική ακύρωσης. Μόνο η κίνηση δικτύου δεν δείχνει χρήσιμη πρόοδο εργασίας ή έγκυρο τελικό αποτέλεσμα.