HTTP.Handler로 본문을 검사하는 동안 요청 상태 보존
HTTP 핸들러 구현 컨텍스트에서 다음과 같은 메서드를 사용하여 요청 본문에 액세스 req.ParseForm()은 딜레마를 일으킬 수 있습니다. 이러한 검사는 종종 필요하지만 요청의 본문 스트림을 고갈시켜 후속 핸들러(예: 역방향 프록시)가 사용할 수 없게 만들 수 있습니다.
문제: 본문 스트림 배수
req.ParseForm()과 같은 메서드를 호출하여 요청 본문이 소비되면 req.Body.Reader 스트림은 다음과 같습니다. 배수되어 다운스트림 핸들러에 남은 데이터가 남지 않습니다. 예상되는 요청 본문 길이가 더 이상 고갈 상태와 일치하지 않으므로 프록시 전달 시 오류가 발생합니다.
해결책: 본문 스트림 분할
이 문제를 극복하려면 , 완충층을 포함하는 기술이 채용될 수 있다. 요청 본문을 버퍼로 읽고 해당 버퍼를 사용하여 여러 개의 새로운 판독기를 생성함으로써 원래 본문 스트림에서 검사를 분리할 수 있습니다.
단계:
예:
buf, _ := io.ReadAll(r.Body) rdr1 := io.NopCloser(bytes.NewBuffer(buf)) rdr2 := io.NopCloser(bytes.NewBuffer(buf)) doStuff(rdr1) r.Body = rdr2
혜택:
위 내용은 후속 처리기에 대한 데이터 손실 없이 HTTP 요청 본문을 검사하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!