2017-12-19 38 views
-3

제목은입니다. 상태 코드 만 필요합니다. 응답 본문이 아닙니다.본체 요청없이 상태 요청 코드를받을 수있는 방법은 무엇입니까

package main 

import (
    "fmt" 
    "net/http" 
) 

func main() { 
    req, _ := http.NewRequest("POST", "http://api.example.com/getUserList", nil) 
    res, _ := http.DefaultClient.Do(req) // <-- 300KB Full page downloading here 
    fmt.Print("status code", res.StatusCode) 
} 

상태 코드를 얻은 후 어떻게 응답 스트림을 중단 할 수 있습니까? (또는 가능?)

감사

짧은 대답은
+1

그게 무슨 머리입니다. – Volker

+2

@Volker 나는 OP가 리소스를 생성하기 위해'POST '를 사용하는 RESTful 웹 서비스와 함께 일하고 있으며, 성공시 상태 코드 201을 리턴한다는 느낌이 들었다. 그래서 응답 컨텍스트를 무시하려는 이유를 상상할 수있다. –

+0

@Volker하지만 서버에서 POST 요청을해야합니다. 나는 HEAD 나 다른 방법을 사용할 수 없다. –

답변

1

은 ... 아마 수 없습니다. 즉 HTTP 작동 얼마나 때문에

일반적으로 HTTP 클라이언트는 항상는 몸이 포함되어있는 응답에 대한 전체 응답 (상태, 헤더, 몸)를 검색합니다. "HEAD"메쏘드는 당신이 원하는 것을 구체적으로 처리하지만 "POST"메쏘드를 사용해야하므로 분명히 여기에 적용되지 않습니다.

코멘트 작성자가 언급했듯이 어떤면에서는 응답 본문을 읽지 않아도 무시할 수 있지만 (현재 예제에서와 같이) 클라이언트 시스템은 여전히 ​​신체를 다운로드하는 데 드는 네트워크 비용이 발생합니다. 응용 프로그램의 표면.

이론적으로 HTTP 상태가 검색 되 자마자 기본 TCP 연결을 종료하려고 시도하고 HTTP 응답의 나머지 부분을 무시하도록 사용자 지정 HTTP 클라이언트를 구현할 수 있습니다 (또는 기존 클라이언트를 구성 할 수도 있음). 그러나이 전략은 매우 복잡 할 수 있으며 응용 프로그램을 제어 할 수없는 많은 요소가있을 수 있습니다.

궁극적으로 예제 코드는 상태 코드에만주의를 기울이고 응답 본문을 무시하기 위해 수행 할 수있는 최상의 방법 일 것입니다. 응답 리더를 즉시 닫아 HTTP 라이브러리에 관련 리소스가 필요 없으며 즉시 해제 될 수 있음을 나타낼 수 있습니다. 그러나 효과가 있다는 보장은 없습니다. 또한 HTTP 클라이언트가 본문을 닫기 전에 사용 된 리소스를 최소화하기 위해 응답 본문에 아주 작은 버퍼를 사용하도록 구성 할 수 있지만 실제로는 응답 본문이 실제로 나타나지 않도록 보장 할 수는 없습니다. 네트워크를 통해 전송됩니다.

+0

두 번째 단락을 잘 모르겠습니다. 클라이언트는 실제로 읽지 않는 한 전신을 다운로드하지 않습니다 (상대적으로 작은 버퍼에서 빼낸 것 빼기). 본문을 읽지 않고 본문을 닫으면 전송 장치가 닫히고 연결이 끊어 지므로 서버가 계속 전송하면 RST가 발생합니다. – JimB