Puncte:0

Solicitarea HTTPS POST eșuează în legătură cu Lungimea conținutului

drapel iq

O aplicație PHP postează date XML cu curl; nimic deosebit, rezultatul arată ca (c/p, dar identificatorii și parolele s-au schimbat):

Gazdă: străină.gazdă.exemplu
Autorizare: Basic dGVzdDpnZWhlaW0=
User-Agent: ourhost HTTP-connector/1.0
Accept: */*
Referer: https://our.host.example/
Tip de conținut: text/xml
Lungimea conținutului: 9218
Așteptați: 100-continuați

[9218 octeți de date XML]

Acest lucru se face pe câteva gazde sursă S1...Sn și este postat pe câteva gazde țintă T1...Tn. Acum o săptămână, gazda S1 a fost actualizată de la Debian/buster la Debian/bullseye; software-ul PHP generator a fost, de asemenea, actualizat, dar nu sunt conștient de nicio modificare în acest domeniu (și solicitările generate arată identice). Exact din moment ce acest upgrade, două gazde țintă (nerelative) T1 și T2 refuză cererile noastre cu codul de răspuns 400. Toate celelalte gazde țintă funcționează bine, iar T1/T2 funcționează bine, dacă sunt conectate de la alte gazde sursă (cu nivel de revizuire vechi).

Corolar: Vina este de partea noastră. Dar unde?

Notă laterală: eliminarea antetului Expect nu schimbă nimic.

Informații suplimentare: în timp ce T1 răspunde numai cu codul de răspuns 400, T2 este politicos și include un mesaj de stare precum:

[our.ip.address]:60760 are o solicitare incompletă: lungimea estimată a fost de 3994 de octeți, a primit 3899 de octeți

Din păcate, acest indiciu nu este suficient pentru a mă lumina (și nici contactele de acolo nu au suficiente cunoștințe pentru a face asta), dar m-a condus la următoarele

Soluție: dacă suprim antetul Content-Length, transmisia funcționează

Acest lucru este mai bine decât nimic, dar nu satisfăcător - vreau ca problema să fie rezolvată; așa că am verificat de două ori și de trei ori numărul din antetul Content-Length (deoarece aceasta este singura sursă posibilă a erorii la care mă pot gândi până acum); pare ok, si exact acelasi calcul este folosit pe gazdele S2...Sn care inca functioneaza. Și: lungimea conținutului plus antetul estimat (acest lucru va diferi, desigur, un pic din cauza altei gazdă, autorizare și referer) nu este nici lungimea estimată, nici lungimea primită, ci undeva la mijloc. Răspunsurile de până acum au furnizat următoarele numere:

Estimată Primit Diferență
4322 4228 94
3972 3877 95
3994 3899 95
6928 6768 160

Din păcate, acest lucru nu este nici constant și nici nu sună niciun clopoțel.

Am setat câteva etichete pentru că Apache (2.4.52), OpenSSL (1.1.1k), curl (7.74.0) și PHP (7.4.25) au fost actualizate împreună cu serverul, chiar dacă nu văd nicio influență posibilă. Dar nu am alte idei, așa că nu vreau să exclud asta.

Orice idei sunt binevenite.

drapel jp
Utilizați `tcpdump` sau un proxy pentru a captura solicitarea trimisă și confirmați că aveți `Content-Length` corectă pe fir.
drapel iq
Acest lucru mă înnebunea: cu mitmproxy pot intercepta apeluri către unul dintre propriile noastre site-uri - totul în regulă. Dacă încerc să contactez T1 sau T2, cererea __se blochează__ în timp ce mitmproxy face strângere de mână către gazda la distanță; Nu văd niciun antet deloc. De îndată ce renunț la Content-Length, totul funcționează conform așteptărilor.
drapel iq
Dar m-am uitat acum în depozit: antetul Content-Length a fost setat de la originea software-ului în 2006. Cel mai probabil, ceva s-a schimbat în fundal (cURL) cu mult timp în urmă, ca și cum pur și simplu l-am omis, seturile cURL oricum antetul corect. Deci, deși încă nu înțeleg ce se întâmplă aici, voi opri investigațiile ulterioare în acest moment.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.