[SERVER] HTTP/1.0 VS HTTP/1.1 차이

런던행·2021년 3월 22일
0

Infra

목록 보기
2/2

Python API 연동 시

ConnectionError : ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response',))

클라이언트에서 api 요청 실패가 발생하였고 생각보다 실패 비율이 상당하여 관련된 문제를 찾아보았다. 카카오 인프라에서는 http/1.1 관련된 문제 가능성을 무게을 두어 문제 연관성을 찾아보았다.

HTTP/1.0 과 HTTP/1.1 차이

HTTP/1.0에서는 서버와 클라이언트간 트랙잭션 발생하면 connection 후 처리가 끝나면 바로 close 한다.
HTTP/1.1에서는 연결시 발생하는 지연을 줄이고자 connection을 재 활용한다. 이와 관련되서 Keep-Alive가 있다.

Python Requests의 Session 오브젝트 경우 connection pooling을 이용하여 keep-alive시 지속연결을 사용한다.

이때 전역으로 Session Object를 생성하는 경우 HTTP/1.1에서 타임이슈로 서버에서 connection이 끊기며 위의 에러가 발생한다.

해결책으로 전역으로 Session Object를 생성하지 않거나,
get()요청 시, session 사용하지 않게 변경한다.

    def __init__(self):
        self.proxies = {
            'http': None,
            'https': None
        }
 
    def get(self, url, **kwargs):
        kwargs['proxies'] = self.proxies
        return requests.get(url, **kwargs)
 
profile
unit test, tdd, bdd, laravel, django, android native, vuejs, react, embedded linux, typescript

0개의 댓글