2016-08-12 6 views
2

Я знаю, что большинство браузеров поддерживают http/2 для загрузки страниц, но означает ли это, что я могу использовать его, когда я делаю вызовы api с помощью XmlHttpRequest?Использовать Http/2 для создания api-звонков с javascript

Более конкретно, мой вопрос заключается в том, что если я делаю 2 вызова для извлечения данных с помощью XmlHttpRequest, это гарантирует, что оба они используют одно и то же соединение tcp внизу? Ни одна из документации, которую я прочитал, где-либо не упоминает о поддержке HTTP2 для XmlHttpRequest или о том, как я могу явно открыть соединение http2, сделать некоторые вызовы, используя это, а затем закрыть соединение.

ОКHttp, jetty и другие библиотеки в java предлагают клиентские библиотеки для поддержки этого. Но поддержка JavaScript не ясна.

ответ

5

Когда браузер и сервер поддерживают HTTP/2, он будет использоваться для всех вызовов из браузера, включая XHR. Для этого вам не нужно ничего делать в своем javascript. Это одна из замечательных вещей о том, как был реализован протокол HTTP/2.

Если вы спрашиваете, как обеспечить соединение удерживается открытым для, как вы хотите использовать соединение, то http/2 spec говорит:

HTTP 2 соединения/постоянны. Для достижения наилучшей производительности ожидает, что клиенты не будут закрывать соединения до тех пор, пока не будет установлено , что дальнейшая связь с сервером не требуется (например, когда пользователь переходит от определенной веб-страницы) или до тех пор, пока сервер не закроется связь.

...

серверы рекомендуется поддерживать открытые соединения до тех пор, пока это возможно, но разрешено прекратить неактивные соединения, если это необходимо.

+0

Я не думаю, что браузер держит tcp-соединение открытым навсегда. Как узнать, когда нужно открыть и когда закрыть tcp-соединение? Вот почему я подозреваю поддержку. –

+0

Если есть какая-либо документация, поддерживающая теорию, это очень поможет. Я не мог найти никого. –

+0

Обновлен ответ, чтобы включить детали, которые, я думаю, вы ищете. Хотя вы не уверены, как вы думаете, что это отличается от того, как это работает в рамках http/1.1 соединений с keep-alives, поэтому не уверен, почему именно вы спрашиваете, что в качестве следствия того, что я думал, вопрос, который вы задавали, был? –