使用Chrome扩展程序中的AJAX请求检测URL是否支持HTTP2?

fst*_*str 16 javascript ajax google-chrome google-chrome-extension http2

我希望用户能够将其网站网址输入到Chrome扩展程序中的输入框中,Chrome扩展程序将使用AJAX请求或其他类似内容来检测并告知用户URL后面的服务器是否支持发送响应通过HTTP2.这可能吗?

也许WebRequest有办法获取这些信息?还是新的Fetch API?你的请求能否以某种方式告诉服务器只能理解HTTP2回复?我看不出明显的方式.

我知道你可以使用window.chrome.loadTimes().connectionInfo获取当前页面的协议,但这需要加载我不想做的整个页面.

示例URLS:

通过HTTP2发送:https://cdn.sstatic.net/

通过HTTP 1.1提供:https://stackoverflow.com/

Rob*_*b W 1

HTTP/2 响应需要一个“状态”响应标头 - https://http2.github.io/http2-spec/#HttpResponse,因此要检查响应是否使用 HTTP/2,您可以在 extraInfoSpec 中使用该chrome.webRequest.onHeadersReceived事件"responseHeaders"。例如,对于您的测试用例:

chrome.webRequest.onHeadersReceived.addListener(function(details) {
    var isHttp2 = details.responseHeaders.some(function(header) {
        return header.name === 'status';
    });
    console.log('Request to ' + details.url + ', http2 = ' + isHttp2);
}, {
    urls: ['https://cdn.sstatic.net/*', 'http://stackoverflow.com/*'],
    types: ['xmlhttprequest']
}, ['responseHeaders']);

// Tests:
fetch('http://stackoverflow.com');
fetch('https://cdn.sstatic.net');
Run Code Online (Sandbox Code Playgroud)