WebSockets 프로토콜과 HTTP


330

websocket 및 HTTP에 대한 많은 블로그와 토론이 있으며 많은 개발자와 사이트가 websocket을 강력하게 옹호하지만 여전히 이유를 이해할 수 없습니다.

예를 들어 (웹 소켓 애호가의 주장) :

HTML5 웹 소켓은 웹의 단일 소켓을 통해 작동하는 전이중 양방향 통신 채널 인 웹 통신의 차세대 발전을 ​​나타냅니다. ( http://www.websocket.org/quantum.html )

HTTP는 스트리밍 : 요청 본문 스트리밍 (큰 파일을 업로드하는 동안 사용하고 있음) 및 응답 본문 스트리밍을 지원합니다.

WebSocket과 연결하는 동안 클라이언트와 서버는 연속 폴링을 수행 할 때 8 킬로바이트의 http 헤더와 비교하여 각각 2 바이트 인 프레임 당 데이터를 교환합니다.

왜 2 바이트에 tcp 및 tcp 프로토콜 오버 헤드가 포함되지 않습니까?

GET /about.html HTTP/1.1
Host: example.org

~ 48 바이트 http 헤더입니다.

HTTP 청크 인코딩 - https://en.wikipedia.org/wiki/Chunked_transfer_encoding :

23
This is the data in the first chunk
1A
and this is the second one
3
con
8
sequence
0
  • 따라서 각 청크 당 오버 헤드는 크지 않습니다.

또한 두 프로토콜 모두 TCP를 통해 작동하므로 오래 지속되는 연결의 모든 TCP 문제는 여전히 존재합니다.

질문 :

  1. 웹 소켓 프로토콜이 더 좋은 이유는 무엇입니까?
  2. http 프로토콜을 업데이트하는 대신 왜 구현 되었습니까?

2
귀하의 질문은 무엇인가?
조나스

@Jonas, 1) 왜 websockets 프로토콜이 더 낫습니까? 2) 왜 http 프로토콜을 업데이트하는 대신 구현 되었습니까? 3) 왜 웹 소켓이 그렇게 홍보됩니까?
4esn0k

@JoachimPileborg, TCP 소켓 또는 http로 데스크톱 응용 프로그램을 사용할 수 있습니다. 웹 사이트를위한 브라우저와 브라우저 간 통신을하려면 WebRTC를 사용해야합니다
4esn0k

@JoachimPileborg, 웹 소켓이 아닌 브라우저 간 브라우저를위한 webRTC입니다.
4esn0k

@ 4esn0k, WS는 더 나쁘지 않으며, 특정 작업에 대해 다르고 더 좋습니다. 3) 사람들이 웹에 대한 새로운 가능성을 알고 개방해야하는 새로운 기능
Jonas

답변:


490

1) WebSockets 프로토콜이 더 좋은 이유는 무엇입니까?

WebSockets는 대기 시간이 짧은 통신, 특히 클라이언트와 서버 메시지의 대기 시간이 짧은 상황에 적합합니다. 서버 대 클라이언트 데이터의 경우 장기간 연결 및 청크 전송을 사용하여 대기 시간을 상당히 줄일 수 있습니다. 그러나 이것은 클라이언트 대 서버 대기 시간에 도움이되지 않으므로 각 클라이언트 대 서버 메시지에 대해 새 연결을 설정해야합니다.

48 바이트 HTTP 핸드 셰이크는 많은 헤더와 쿠키 데이터를 포함하여 요청의 일부로 (양방향으로) 전송되는 데이터가 종종있는 실제 HTTP 브라우저 연결에는 현실적이지 않습니다. 다음은 Chrome 사용에 대한 요청 / 응답의 예입니다.

요청 예 (쿠키 데이터를 포함한 2800 바이트, 쿠키 데이터가없는 490 바이트) :

GET / HTTP/1.1
Host: www.cnn.com
Connection: keep-alive
Cache-Control: no-cache
Pragma: no-cache
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.68 Safari/537.17
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: [[[2428 byte of cookie data]]]

응답 예 (355 바이트) :

HTTP/1.1 200 OK
Server: nginx
Date: Wed, 13 Feb 2013 18:56:27 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Set-Cookie: CG=US:TX:Arlington; path=/
Last-Modified: Wed, 13 Feb 2013 18:55:22 GMT
Vary: Accept-Encoding
Cache-Control: max-age=60, private
Expires: Wed, 13 Feb 2013 18:56:54 GMT
Content-Encoding: gzip

HTTP와 WebSocket 모두 동일한 크기의 초기 연결 핸드 셰이크를 갖지만 WebSocket 연결을 사용하면 초기 핸드 셰이크가 한 번 수행 된 후 작은 메시지에는 6 바이트의 오버 헤드 (헤더의 경우 2, 마스크 값의 경우 4) 만 있습니다. 지연 시간 오버 헤드는 헤더의 크기가 아니라 해당 헤더를 구문 분석 / 처리 / 저장하는 논리에서 비롯됩니다. 또한 TCP 연결 설정 대기 시간은 각 요청의 크기 또는 처리 시간보다 큰 요인 일 수 있습니다.

2) HTTP 프로토콜을 업데이트하는 대신 왜 구현 되었습니까?

SPDY , HTTP 2.0QUIC 와 같이 더 나은 성능과 낮은 대기 시간을 달성하기 위해 HTTP 프로토콜을 다시 엔지니어링하려는 노력이 있습니다 . 이렇게하면 일반적인 HTTP 요청의 상황이 개선되지만 WebSocket 및 / 또는 WebRTC DataChannel은 여전히 ​​HTTP 프로토콜보다 클라이언트에서 서버로의 데이터 전송에 대한 대기 시간이 낮을 수 있습니다 (또는 WebSocket과 매우 유사한 모드에서 사용됨). 어쨌든).

업데이트 :

웹 프로토콜에 대한 생각을위한 프레임 워크는 다음과 같습니다.

  • TCP : 저수준, 양방향, 전이중 및 보장 된 주문 전송 계층. 브라우저 지원 없음 (플러그인 / 플래시 제외)
  • HTTP 1.0 : TCP에서 계층화 된 요청-응답 전송 프로토콜. 클라이언트는 하나의 전체 요청을하고 서버는 하나의 전체 응답을 제공 한 다음 연결을 닫습니다. 요청 메소드 (GET, POST, HEAD)는 서버의 자원에 대한 특정 트랜잭션 의미를 갖습니다.
  • HTTP 1.1 : HTTP 1.0의 요청-응답 특성을 유지하지만 여러 개의 전체 요청 / 전체 응답 (요청 당 하나의 응답)에 대해 연결을 열어 둘 수 있습니다. 요청 및 응답에 여전히 전체 헤더가 있지만 연결이 재사용되고 닫히지 않습니다. HTTP 1.1은 또한 특정 트랜잭션 의미를 갖는 몇 가지 추가 요청 메소드 (OPTIONS, PUT, DELETE, TRACE, CONNECT)를 추가했습니다. 에서 언급 그러나, 소개 는 HTTP 2.0 제안서 초안, HTTP이 크게 브라우저와 서버 사이의 대기 시간을 해결하기 위해 HTTP 1.1의 유틸리티를 제한하므로 1.1 파이프 라인은 널리 배포되지 않습니다.
  • 장기 여론 : 서버가 클라이언트 요청에 즉시 응답하지 않거나 헤더로 부분적으로 만 응답하는 HTTP (1.0 또는 1.1)에 대한 "해킹"의 일종. 서버 응답 후 클라이언트는 즉시 HTTP 1.1을 통해 동일한 연결을 사용하여 새 요청을 보냅니다.
  • HTTP 스트리밍 : 서버가 단일 클라이언트 요청에 둘 이상의 응답을 보낼 수있는 다양한 기술 (멀티 파트 / 청크 응답). W3C는 이것을 MIME 유형을 사용하여 서버가 보낸 이벤트 로 표준화하고 text/event-stream있습니다. 브라우저 API (WebSocket API와 상당히 유사한)를 EventSource API라고합니다.
  • 혜성 / 서버 푸시 : 장기 폴링과 HTTP 스트리밍을 모두 포함하는 포괄적 인 용어입니다. 혜성 라이브러리는 일반적으로 브라우저 간 및 서버 간 지원을 시도하고 최대화하기 위해 여러 가지 기술을 지원합니다.
  • WebSockets : HTTP 친화적 업그레이드 핸드 셰이크를 사용하는 전송 계층 내장 TCP. 스트리밍 전송 인 TCP와 달리 WebSockets는 메시지 기반 전송입니다. 메시지는 유선으로 구분되며 응용 프로그램에 전달되기 전에 전체적으로 다시 어셈블됩니다. WebSocket 연결은 양방향, 전이중 및 오래 지속됩니다. 초기 핸드 셰이크 요청 / 응답 후에는 트랜잭션 시맨틱이 없으며 메시지 당 오버 헤드가 거의 없습니다. 클라이언트와 서버는 언제든지 메시지를 보낼 수 있으며 메시지 수신을 비동기 적으로 처리해야합니다.
  • SPDY : Google은보다 효율적인 유선 프로토콜을 사용하지만 모든 HTTP 의미 (요청 / 응답, 쿠키, 인코딩)를 유지하면서 HTTP를 확장하기위한 제안을 시작했습니다. SPDY는 길이 프레 픽스가있는 새로운 프레이밍 형식을 도입하고 새로운 프레이밍 레이어에 HTTP 요청 / 응답 쌍을 레이어링하는 방법을 지정합니다. 연결이 설정된 후 헤더를 압축하고 새 헤더를 보낼 수 있습니다. 브라우저와 서버에는 실제 SPDY 구현이 있습니다.
  • HTTP 2.0 : SPDY와 비슷한 목표 : HTTP 의미를 유지하면서 HTTP 대기 시간 및 오버 헤드를 줄입니다. 현재 초안은 SPDY에서 파생되었으며 핸드 셰이크 및 프레이밍에 대한 WebSocket 표준과 매우 유사한 업그레이드 핸드 셰이크 및 데이터 프레이밍을 정의합니다. 대체 HTTP 2.0 초안 제안 (httpbis-speed-mobility)은 실제로 전송 계층에 WebSocket을 사용하고 SPDY 멀티플렉싱 및 HTTP 매핑을 WebSocket 확장으로 추가합니다 (WebSocket 확장은 핸드 셰이크 중에 협상됩니다).
  • WebRTC / CU-WebRTC : 브라우저 간 피어 투 피어 연결을 허용하기위한 제안. 기본 전송이 TCP가 아닌 SDP / 데이터 그램이므로 평균 및 최대 대기 시간 통신이 더 낮을 수 있습니다. 이를 통해 패킷 / 메시지의 순서가 잘못된 전달을 허용하여 패킷이 손실되어 발생하는 지연 스파이크의 TCP 문제를 피하여 모든 후속 패킷의 전달을 지연시킵니다 (순서 전달 보장).
  • QUIC : TCP보다 웹 대기 시간을 줄이는 것을 목표로하는 실험적인 프로토콜입니다. 표면적으로 QUIC는 UDP에 구현 된 TCP + TLS + SPDY와 매우 유사합니다. QUIC는 HTTP / 2에 해당하는 멀티플렉싱 및 흐름 제어, TLS에 해당하는 보안, TCP에 해당하는 연결 의미, 안정성 및 혼잡 제어를 제공합니다. TCP는 운영 체제 커널 및 미들 박스 펌웨어에서 구현되므로 TCP를 크게 변경하는 것은 불가능합니다. 그러나 QUIC는 UDP를 기반으로 구축되므로 이러한 제한이 없습니다. QUIC는 HTTP / 2 시맨틱에 맞게 설계되고 최적화되었습니다.

참고 문헌 :


1
>> 그러나 이것은 클라이언트 대 서버 대기 시간에 도움이되지 않으므로 각 클라이언트 대 서버 메시지에 대해 새 연결을 설정해야합니다. -응답 본문 스트리밍은 어떻습니까? XMLHttpRequest API는 이것을 허용하지 않지만 존재합니다. 서버로 스트리밍하면 클라이언트 측에서 스트리밍 할 수 있습니다.
4esn0k

8
@Philipp, 그는 어쨌든 철저히 조사하고 문서화하고 싶었다는 질문을했습니다. WebSockets 대 다른 HTTP 기반 메커니즘의 문제는 상당히 자주 발생하지만 이제는 링크에 대한 좋은 참조가 있습니다. 그러나 그렇습니다 .Asker는 WebSockets vs HTTP에 대한 선입견을 뒷받침 할 증거를 찾고 있었을 것 같습니다. 특히 답변을 선택하지 않았거나 현상금을 수여하지 않았기 때문입니다.
카나 카

9
이 매우 훌륭하고 정확한 프로토콜 개요에 대해 대단히 감사합니다.
Martin Meeser

2
@WardC caniuse.com 은 브라우저 호환성 정보 (모바일 포함)를 제공합니다.
카나 카

3
@ www139, 아니오, WebSocket 프로토콜 수준에서 한쪽 또는 다른 쪽이 연결을 닫을 때까지 연결이 열린 상태로 유지됩니다. TCP 시간 초과 (TCP 기반 프로토콜의 문제)에 대해 걱정해야 할 수도 있지만 1 분 또는 2 분마다 모든 종류의 트래픽이 연결을 유지합니다. 실제로 WebSocket 프로토콜 정의는 핑 / 퐁 프레임 유형을 지정하지만, 단일 바이트 (2 바이트 헤더를 더한 값)를 보낼 수 있고 연결을 계속 유지합니다. 몇 분마다 2-3 바이트는 큰 대역폭 영향이 아닙니다.
카나 카

130

WebSocket이 HTTP를 대체한다고 가정합니다. 그렇지 않습니다. 확장입니다.

WebSockets의 주요 사용 사례는 웹 브라우저에서 실행되고 서버에서 실시간 데이터를받는 Javascript 응용 프로그램입니다. 게임이 좋은 예입니다.

WebSockets 이전에는 Javascript 응용 프로그램이 서버와 상호 작용할 수있는 유일한 방법은이었습니다 XmlHttpRequest. 그러나 다음과 같은 큰 단점이 있습니다. 클라이언트가 명시 적으로 요청하지 않으면 서버가 데이터를 보낼 수 없습니다.

그러나 새로운 WebSocket 기능을 통해 서버는 필요할 때마다 데이터를 보낼 수 있습니다. 이를 통해 AJAX 롱 폴링 또는 브라우저 플러그인과 같은 추악한 해킹을 사용하지 않고도 훨씬 짧은 대기 시간으로 브라우저 기반 게임을 구현할 수 있습니다.

스트리밍 요청 및 응답에 일반 HTTP를 사용하지 않는 이유

다른 답변에 대한 의견에서 클라이언트 요청과 응답 본문을 비동기 적으로 스트리밍하는 것이 좋습니다.

사실, WebSockets는 기본적으로 그런 것입니다. 클라이언트에서 WebSocket 연결을 열려는 시도는 처음에는 HTTP 요청처럼 보이지만 헤더의 특수 지시문 (업그레이드 : websocket)은 서버가이 비동기 모드에서 통신을 시작하도록 지시합니다. WebSocket 프로토콜의 초안은 그 이상이 아니며 서버가 클라이언트가 비동기식으로 통신하기를 원한다는 사실을 서버가 실제로 이해하도록하기위한 핸드 쉐이킹입니다. 그러나 프록시 서버는 일반적인 HTTP 요청 / 응답 모델에 사용되기 때문에 혼란 스러울 수 있습니다. 잠재적 인 공격 시나리오 프록시 서버에 대해이 발견되었다. 이를 방지하려면 WebSocket 트래픽을 일반 HTTP 트래픽과 다르게 보이게해야했습니다. 마스킹 키가 도입 된 이유프로토콜의 최종 버전 .


>> 클라이언트가 명시 적으로 요청하지 않으면 서버가 데이터를 전송할 수 없습니다.; 웹 브라우저는 WebSockets 연결을 시작해야합니다 ... XMLHttpRequest와 동일
4esn0k

18
@ 4esn0k 브라우저가 웹 소켓 연결을 시작합니다. 그러나 설립 후 양측은 원할 때마다 데이터를 보낼 수 있습니다. XmlHttpRequest의 경우에는 그렇지 않습니다.
Philipp

1
왜 이것이 HTTP로는 불가능합니까?
4esn0k

4
@Philipp, 게임은 WebSocket이 빛나는 좋은 예입니다. 그러나 가장 큰 승리를 거둔 서버의 실시간 데이터는 아닙니다. HTTP 스트리밍 / 장기 연결을 사용하면 거의 서버-> 클라이언트 대기 시간을 얻을 수 있습니다. 클라이언트가 이미 요청을 보냈고 서버가 데이터를 가질 때까지 "요청을 보류"하기 때문에 오랫동안 요청을하면 서버는 데이터가있을 때마다 효과적으로 전송할 수 있습니다. WebSockets의 가장 큰 승리는 클라이언트-> 서버 대기 시간 (따라서 왕복)입니다. 요청 오버 헤드없이 원할 때마다 전송할 수있는 클라이언트는 실제 키입니다.
카나 카

1
@Philipp, 또 다른 참고 사항 : 숨겨진 iframe 및 긴 폴 스크립트 태그를 포함하여 JavaScript가 서버와 상호 작용하기 위해 XMLHttpRequest 및 WebSockets 외에 다른 메소드가 있습니다. 자세한 내용은 Comet wikipedia 페이지를 참조하십시오. en.wikipedia.org/wiki/Comet_(programming)
kanaka

27

일반 REST API는 HTTP를 통신의 기본 프로토콜로 사용하는데, 이는 요청 및 응답 패러다임을 따릅니다. 즉, 통신에는 클라이언트가 서버에서 일부 데이터 또는 자원을 요청하고 서버는 해당 클라이언트에 다시 응답 함을 의미합니다. 그러나 HTTP는 상태 비 저장 프로토콜이므로 모든 요청-응답주기는 헤더 및 메타 데이터 정보를 반복해야합니다. 이는 자주 반복되는 요청-응답주기의 경우 추가 대기 시간이 발생합니다.

http

WebSocket을 사용하면 통신이 여전히 초기 HTTP 핸드 셰이크로 시작되지만 WebSockets 프로토콜을 따르도록 추가로 업그레이드됩니다 (즉, 모든 엔티티가 WebSockets 프로토콜을 지원하지 않기 때문에 서버와 클라이언트가 모두 프로토콜을 준수하는 경우).

이제 WebSocket을 사용하면 클라이언트와 서버 사이에 전이중 및 영구 연결을 설정할 수 있습니다. 즉, 요청 및 응답과 달리 응용 프로그램이 실행되는 동안 (즉, 지속되는 동안) 연결이 열린 상태로 유지되며 전이중 방식이므로 양방향 동시 통신이 가능합니다. 이제 서버가 시작될 수 있습니다. 새로운 데이터 (클라이언트가 관심이있는)가 사용 가능 해지면 클라이언트에 일부 데이터를 '밀어 넣습니다'.

웹 소켓

WebSockets 프로토콜은 상태 저장이 가능하며 실시간 기술에 사용되는 주요 개념 인 Publish-Subscribe (또는 Pub / Sub) 메시징 패턴을 구현할 수 있습니다. 클라이언트가 반복적으로 요청 (페이지 새로 고침)해야합니다. 이러한 응용 프로그램의 예로는 Uber 자동차의 위치 추적, 푸시 알림, 실시간으로 업데이트되는 주식 시장 가격, 채팅, 멀티 플레이어 게임, 라이브 온라인 협업 도구 등이 있습니다.

Websockets에 대한 심층 다이빙 기사에서이 프로토콜의 이력, 프로토콜 사용 방법, 용도 및 사용 방법을 설명 할 수 있습니다.

다음은 WebSocket에 대한 프레젠테이션과 일반 REST API를 사용하는 것과 다른 점에 대한 비디오입니다. 표준화 및 데이터 스트리밍의 기하 급수적 활용


24

TL; DR의 경우 여기에 2 센트가 있으며 질문에 대한 간단한 버전이 있습니다.

  1. WebSockets는 HTTP에 비해 다음과 같은 이점을 제공합니다.

    • 연결 기간 동안 지속적인 상태 저장 연결
    • 낮은 대기 시간 : HTTP가 요구하는 각 요청에 대한 연결을 다시 설정하는 오버 헤드가 없기 때문에 서버 / 클라이언트 간의 거의 실시간 통신.
    • 전이중 : 서버와 클라이언트 모두 동시에 전송 / 수신 가능
  2. WebSocket 및 HTTP 프로토콜은 다양한 문제를 해결하도록 설계되었으며 IE WebSocket은 양방향 통신을 개선하도록 설계되었지만 HTTP는 요청 / 응답 모델을 사용하여 상태 비 저장 형으로 설계되었습니다. 레거시 이유로 포트를 공유하는 것 외에 (방화벽 / 프록시 침투) 포트를 하나의 프로토콜로 결합하는 일반적인 근거는 많지 않습니다.


3
비교에서 Stateful 및 Stateless라는 용어를 언급했음을주의하십시오 (Y)
Utsav T

15

웹 소켓 프로토콜이 더 좋은 이유는 무엇입니까?

나는 누가 더 나은지 나란히 비교할 수 없다고 생각합니다. 단순히 두 가지 다른 문제를 해결하고 있기 때문에 공정한 비교는 아닙니다 . 요구 사항이 다릅니다. 사과를 오렌지와 비교하는 것과 같습니다. 그들은 다르다.

HTTP 는 요청-응답 프로토콜입니다. 클라이언트 (브라우저)는 무언가를 원하고 서버가 제공합니다. 그건. 원하는 데이터 클라이언트가 큰 경우 서버는 스트리밍 데이터를 보내 원하지 않는 버퍼 문제를 무효화 할 수 있습니다. 여기서 주요 요구 사항 또는 문제는 클라이언트로부터 요청을하는 방법과 요청한 리소스 (하이버 텍스트)에 응답하는 방법입니다. 그것이 바로 HTTP가 빛나는 곳입니다.

HTTP에서는 클라이언트 요청 만 있습니다. 서버 만 응답합니다.

WebSocket 은 클라이언트 만 요청할 수있는 요청-응답 프로토콜이 아닙니다. 소켓입니다 (TCP 소켓과 매우 유사). 연결이 열리면 밑줄 TCP 연결이 닫힐 때까지 어느 쪽이든 데이터를 보낼 수 있습니다. 일반 소켓과 같습니다. TCP 소켓과의 유일한 차이점은 웹에서 websocket을 사용할 수 있다는 것입니다. 웹에서는 일반 소켓에 대해 많은 제한이 있습니다. 대부분의 방화벽은 HTTP가 사용하는 80 및 433 이외의 다른 포트를 차단합니다. 프록시와 중개자도 문제가 될 수 있으므로 프로토콜을 기존 인프라에보다 쉽게 ​​배포 할 수 있도록하려면 웹 소켓에서 HTTP 핸드 셰이크를 사용하여 업그레이드하십시오. 즉, 처음 연결이 열리면 클라이언트가 HTTP 요청을 전송하여 "HTTP 요청이 아닙니다. 웹 소켓 프로토콜로 업그레이드하십시오"라고 서버에 알리십시오.

Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13

서버가 요청을 이해하고 웹 소켓 프로토콜로 업그레이드 한 후에는 더 이상 HTTP 프로토콜이 적용되지 않았습니다.

그래서 내 대답은 둘 다 서로 낫지 않습니다. 그들은 완전히 다릅니다.

http 프로토콜을 업데이트하는 대신 왜 구현 되었습니까?

우리는 HTTP 라는 이름으로 모든 것을 만들 수 있습니다. 그러나 우리는? 그들이 두 가지 다른 것이라면, 나는 두 가지 다른 이름을 선호합니다. Hickson과 Michael Carter도 마찬가지 입니다.


6

다른 답변은 여기서 핵심 측면을 다루지 않는 것 같습니다. 즉, 클라이언트로 웹 브라우저를 지원해야한다는 언급은 없습니다. 위의 일반 HTTP의 제한 사항 중 대부분은 브라우저 / JS 구현으로 작업한다고 가정합니다.

HTTP 프로토콜은 전이중 통신이 가능합니다. 클라이언트가 청크 인코딩 전송으로 POST를 수행하고 서버가 청크 인코딩 본문으로 응답을 리턴하도록하는 것은 합법적입니다. 이것은 초기에 헤더 오버 헤드를 제거합니다.

따라서 찾고있는 모든 것이 전이중이고 클라이언트와 서버를 모두 제어하고 웹 소켓의 추가 프레임 / 기능에 관심이 없다면 HTTP는 대기 시간 / CPU가 더 짧은 간단한 접근 방식이라고 주장합니다 실제로는 마이크로 초 이하 만 차이가납니다).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.