「Android 9以降でHTTPを利用する」の版間の差分

 
(同じ利用者による、間の2版が非表示)
1行目: 1行目:




[[Android 9]]から「[[セキュリティ]]を強化する」という名目で[[アプリ]]内での通信は[[HTTPS]]が必須になり、[[HTTP]]で通信しようとすると以下のような例外を吐くようになった。
[[Android 9]]から「[[セキュリティ]]を強化する」という名目で[[アプリ]]内での通信は[[HTTPS]]が必須になり、[[HTTP]]で通信しようとすると以下のような例外を吐くようになりました。
  Java.IO.IOException: Cleartext HTTP traffic to localhost not permitted
  Java.IO.IOException: Cleartext HTTP traffic to localhost not permitted


== HTTPSの問題点 ==
=== デバッグがめんどくさい ===
ただ[[デバッグ]]のときは[[HTTPS]]と[[オレオレ証明証]]だと色々とめんどくさいし捗らない。
ただ[[デバッグ]]のときは[[HTTPS]]と[[オレオレ証明証]]だと色々とめんどくさいし捗らない。
=== 暗号化によるデータ増大 ===
HTTPSはHTTPと比較してデータ量が約10〜20倍に膨れ上がることがあります。
とくに小さいデータでは最低2〜3KBが追加され影響が大きくなります。
極端にいえば1バイトを送信したいのに鍵交換などだけで3000バイトくらいになります。
これは格安SIMの低速モードでは割と重大は問題になります。公称128Kbpsや64kbpsなどの携帯回線では実測値が公称値付近と絶好調に出たとしても、TLS暗号化を噛ますことによるデータ量の増大で実質的には9600bps程度しか流せないこともザラにあります。
小さいデータの代表格であるゲームなんかだと割と影響が大きいです。
よって、どう考えても重要ではないデータはHTTPで通信した方がよい。
== すべてのドメインでHTTP通信を許可する ==
== すべてのドメインでHTTP通信を許可する ==
applicationタグの属性「android:usesCleartextTraffic="true"」で全許可となる。
applicationタグの属性「android:usesCleartextTraffic="true"」で全許可となる。
45行目: 58行目:
   <!-- ドメイン毎の設定 -->
   <!-- ドメイン毎の設定 -->
   <domain-config cleartextTrafficPermitted="true">  
   <domain-config cleartextTrafficPermitted="true">  
     <!-- HTTP通信を許可するドメインを列挙しておく -->
     <!-- domainタグでHTTP通信を許可するドメインやIPアドレスを列挙する -->
     <domain includeSubdomains="true">10.0.2.2</domain>
     <domain includeSubdomains="true">yahoo.co.jp</domain>
    <domain includeSubdomains="true">google.co.jp</domain>
    <domain includeSubdomains="true">monobook.org</domain>
   </domain-config>
   </domain-config>