ReactNative (0.54+) で、サーバサイドに AWS ALB で HTTP/2.0 を使っていた時に、HTTP/1.1 と HTTP/2.0 で挙動が変わっているっぽかったので、調査のために RN (android) からの HTTP/2.0 接続を無効にしてみました。
- メインのReactActivity.onCreate() で OkHttpClientProvider.setOkHttpClientFactory() を呼びます。
- OkHttpClient を返す任意のCustomClientFactoryを定義します。
package your.domain
:
import com.facebook.react.modules.network.OkHttpClientProvider;
:
public class MainActivity extends ReactActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
OkHttpClientProvider.setOkHttpClientFactory(new CustomClientFactory());
super.onCreate(savedInstanceState);
}
:
package your.domain
import java.util.List;
import java.util.ArrayList;
import com.facebook.react.modules.network.OkHttpClientFactory;
import com.facebook.react.modules.network.OkHttpClientProvider;
import com.facebook.react.modules.network.ReactCookieJarContainer;
import okhttp3.OkHttpClient;
import okhttp3.Protocol;
public class CustomClientFactory implements OkHttpClientFactory {
@Override
public OkHttpClient createNewNetworkModuleClient() {
List<Protocol> protocolList = new ArrayList<>();
protocolList.add(Protocol.SPDY_3);
protocolList.add(Protocol.HTTP_1_1);
return OkHttpClientProvider.createClientBuilder()
.cookieJar(new ReactCookieJarContainer())
.protocols(protocolList)
// .followRedirects(false)
// .followSslRedirects(false)
.build();
}
}
それから react-native run android。
すると、Charlesなどで監視してみると Protocol: HTTP/1.1 に落ちている。
see also:
-
Provide a interface to allow users to disable android http2, if they
https://github.com/facebook/react-native/pull/11372 -
how to use my own OkHttp client in react-native (0.54 + )
https://stackoverflow.com/questions/49722981/how-to-use-my-own-okhttp-client-in-react-native-0-54 -
Is it possible to disable following redirects in OkHttp 2.0?
https://stackoverflow.com/questions/23996680/is-it-possible-to-disable-following-redirects-in-okhttp-2-0
END