您当前的位置:首页 > 互联网教程

Android面试笔记——HTTPHTTPS

发布时间:2025-05-17 05:58:09    发布人:远客网络

Android面试笔记——HTTPHTTPS

一、Android面试笔记——HTTP/HTTPS

HTTP和HTTPS是面试常问的问题,内容比较多而且复杂,HTTPS里面的细节很多,本文只是把主要的东西写出来,想要弄懂HTTPS还是要多看几篇博文,自己动手走一遍把各个攻击的case搞明白。

HTTP是超⽂本传输协议,也就是HyperText Transfer Protocol。

Host字段:客户端发送请求时,⽤来指定服务器的域名。 Host: www.baidu.com

Content-Length字段:服务器在返回数据时,会有 Content-Length字段,表明本次回应的数据长度。 Content-Length: 1000

Connection字段:Connection字段最常用于客户端要求服务器使⽤ TCP持久连接,以便其他请求复⽤。 HTTP/1.1版本的默认连接都是持久连接,但为了兼容⽼版本的 HTTP,需要指定 Connection⾸部字段的值为Keep-Alive。

Content-Type字段:Content-Type字段⽤于服务器回应时,告诉客户端,本次数据是什么格式。 Content-Type: text/html; charset=utf-8

Content-Encoding字段:Content-Encoding字段说明数据的压缩⽅法。表示服务器返回的数据使用了什么压缩格式。客户端在请求时,⽤ Accept-Encoding字段说明自己可以接受哪些压缩⽅法。 Accept-Encoding: gzip, deflate

HTTP/2协议是基于 HTTPS的,所以 HTTP/2的安全性也是有保障的。

这都是基于 TCP传输层的问题,所以 HTTP/3把 HTTP下层的 TCP协议改成了 UDP。

UDP发生是不管顺序,也不管丢包的,所以不会出现 HTTP/1.1的队头阻塞和 HTTP/2的⼀个丢包全部重传问题。

UDP是不可靠传输的,但基于 UDP的 QUIC协议可以实现类似 TCP的可靠性传输。

HTTPS采⽤的是对称加密和⾮对称加密结合的「混合加密」⽅式:

采⽤「混合加密」的⽅式的原因:

摘要算法⽤来实现完整性,能够为数据⽣成独⼀⽆⼆的「指纹」,⽤于校验数据的完整性,解决了篡改的⻛险。

客户端在发送明⽂之前会通过摘要算法算出明文的「指纹」,发送的时候把「指纹+明文」⼀同加密成密文后,发送给服务器,服务器解密后,用相同的摘要算法算出发送过来的明文,通过⽐较客户端携带的「指纹」和当前算出的「指纹」做⽐较,若「指纹」相同,说明数据是完整的。

客户端先向服务器端索要公钥,然后⽤公钥加密信息,服务器收到密文后,⽤⾃⼰的私钥解密。这就存在些问题,如何保证公钥不被篡改和信任度?

所以这⾥就需要借助第三⽅权威机构 CA(数字证书认证机构),将服务器公钥放在数字证书(由数字证书认证机构颁发)中,只要证书是可信的,公钥就是可信的。

通过数字证书的⽅式保证服务器公钥的身份,解决冒充的⻛险。

二、android p不支持http协议了,教你三招解决问题!

相信很多在android8.0之前很正常,跑到9.0上数据都无法加载出来,忽然就懵逼了,因为google在android p为了安全起见,已经明确规定禁止http协议额,但是之前很多接口都是http协议啊,怎么解决呢?

1.使用https,当然这是最好的解决方式,也是比较复杂的,因为之前很多接口都是http协议的,不可能一个个替换啊,可以留待空余时间慢慢修改.

2.target降低至27,这也是一个方法,可以暂解燃眉之急,因为在target27之前是没有对http协议做过限制的,但是后期会出现什么问题,还有未可知.

3.允许使用http,你可以禁止,但我也可以让他允许啊,既然前两个方法都比较差,那我就推荐第三种方法,下面请看:

在res目录下创建xml目录,然后随便创建一个.xml文件,里面内容如下:

<?xml version="1.0" encoding="utf-8"?>

<network-security-config>

<base-config cleartextTrafficPermitted="true"/>

</network-security-config>

然后在AndroidManifest.xml文件下加上:

android:networkSecurityConfig="@xml/network_security_config"

三、Android已经添加了网络权限为什么不能http

android.permission.ACCESS_CHECKIN_PROPERTIES//允许读写访问”properties”表在checkin数据库中,改值可以修改上传 android.permission.ACCESS_COARSE_LOCATION//允许一个程序访问CellID或WiFi热点来获取粗略的位置 android.permission.ACCESS_FINE_LOCATION//允许一个程序访问精良位置(如GPS) android.permission.ACCESS_LOCATION_EXTRA_COMMANDS//允许应用程序访问额外的位置提供命令 android.permission.ACCESS_MOCK_LOCATION//允许程序创建模拟位置提供用于测试 android.permission.ACCESS_NETWORK_STATE//允许程序访问有关GSM网络信息 android.permission.ACCESS_SURFACE_FLINGER//允许程序使用SurfaceFlinger底层特性 android.permission.ACCESS_WIFI_STATE//允许程序访问Wi-Fi网络状态信息 android.permission.ADD_SYSTEM_SERVICE//允许程序发布系统级服务 android.permission.BATTERY_STATS//允许程序更新手机电池统计信息 android.permission.BLUETOOTH//允许程序连接到已配对的蓝牙设备 android.permission.BLUETOOTH_ADMIN//允许程序发现和配对蓝牙设备 android.permission.BRICK//请求能够禁用设备(非常危险 android.permission.BROADCAST_PACKAGE_REMOVED//允许程序广播一个提示消息在一个应用程序包已经移除后 android.permission.BROADCAST_STICKY//允许一个程序广播常用intents android.permission.CALL_PHONE//允许一个程序初始化一个电话拨号不需通过拨号用户界面需要用户确认 android.permission.CALL_PRIVILEGED//允许一个程序拨打任何号码,包含紧急号码无需通过拨号用户界面需要用户确认 android.permission.CAMERA//请求访问使用照相设备 android.permission.CHANGE_COMPONENT_ENABLED_STATE//允许一个程序是否改变一个组件或其他的启用或禁用 android.permission.CHANGE_CONFIGURATION//允许一个程序修改当前设置,如本地化 android.permission.CHANGE_NETWORK_STATE//允许程序改变网络连接状态 android.permission.CHANGE_WIFI_STATE//允许程序改变Wi-Fi连接状态 android.permission.CLEAR_APP_CACHE//允许一个程序清楚缓存从所有安装的程序在设备中 android.permission.CLEAR_APP_USER_DATA//允许一个程序清除用户设置 android.permission.CONTROL_LOCATION_UPDATES//允许启用禁止位置更新提示从无线模块 android.permission.DELETE_CACHE_FILES//允许程序删除缓存文件 android.permission.DELETE_PACKAGES//允许一个程序删除包 android.permission.DEVICE_POWER//允许访问底层电源管理 android.permission.DIAGNOSTIC//允许程序RW诊断资源 android.permission.DISABLE_KEYGUARD//允许程序禁用键盘锁 android.permission.DUMP//允许程序返回状态抓取信息从系统服务 android.permission.EXPAND_STATUS_BAR//允许一个程序扩展收缩在状态栏,android开发网提示应该是一个类似Windows Mobile中的托盘程序 android.permission.FACTORY_TEST//作为一个工厂测试程序,运行在root用户 android.permission.FLASHLIGHT//访问闪光灯,android开发网提示HTC Dream不包含闪光灯 android.permission.FORCE_BACK//允许程序强行一个后退操作是否在顶层activities android.permission.FOTA_UPDATE//暂时不了解这是做什么使用的,android开发网分析可能是一个预留权限. android.permission.GET_ACCOUNTS//访问一个帐户列表在Accounts Service中 android.permission.GET_PACKAGE_SIZE//允许一个程序获取任何package占用空间容量 android.permission.GET_TASKS//允许一个程序获取信息有关当前或最近运行的任务,一个缩略的任务状态,是否活动等等 android.permission.HARDWARE_TEST//允许访问硬件 android.permission.INJECT_EVENTS//允许一个程序截获用户事件如按键、触摸、轨迹球等等到一个时间流,android开发网提醒算是hook技术吧 android.permission.INSTALL_PACKAGES//允许一个程序安装packages android.permission.INTERNAL_SYSTEM_WINDOW//允许打开窗口使用系统用户界面 android.permission.INTERNET//允许程序打开网络套接字 android.permission.MANAGE_APP_TOKENS//允许程序管理(创建、催后、 z- order默认向z轴推移)程序引用在窗口管理器中 android.permission.MASTER_CLEAR//目前还没有明确的解释,android开发网分析可能是清除一切数据,类似硬格机 android.permission.MODIFY_AUDIO_SETTINGS//允许程序修改全局音频设置 android.permission.MODIFY_PHONE_STATE//允许修改话机状态,如电源,人机接口等 android.permission.MOUNT_UNMOUNT_FILESYSTEMS//允许挂载和反挂载文件系统可移动存储 android.permission.PERSISTENT_ACTIVITY//允许一个程序设置他的activities显示 android.permission.PROCESS_OUTGOING_CALLS//允许程序监视、修改有关播出电话 android.permission.READ_CALENDAR//允许程序读取用户日历数据 android.permission.READ_CONTACTS//允许程序读取用户联系人数据 android.permission.READ_FRAME_BUFFER//允许程序屏幕波或和更多常规的访问帧缓冲数据 android.permission.READ_INPUT_STATE//允许程序返回当前按键状态 android.permission.READ_LOGS//允许程序读取底层系统日志文件 android.permission.READ_OWNER_DATA//允许程序读取所有者数据 android.permission.READ_SMS//允许程序读取短信息 android.permission.READ_SYNC_SETTINGS//允许程序读取同步设置 android.permission.READ_SYNC_STATS//允许程序读取同步状态 android.permission.REBOOT//请求能够重新启动设备 android.permission.RECEIVE_BOOT_COMPLETED//允许一个程序接收到 android.permission.RECEIVE_MMS//允许一个程序监控将收到MMS彩信,记录或处理 android.permission.RECEIVE_SMS//允许程序监控一个将收到短信息,记录或处理 android.permission.RECEIVE_WAP_PUSH//允许程序监控将收到WAP PUSH信息 android.permission.RECORD_AUDIO//允许程序录制音频 android.permission.REORDER_TASKS//允许程序改变Z轴排列任务 android.permission.RESTART_PACKAGES//允许程序重新启动其他程序 android.permission.SEND_SMS//允许程序发送SMS短信 android.permission.SET_ACTIVITY_WATCHER//允许程序监控或控制activities已经启动全局系统中 android.permission.SET_ALWAYS_FINISH//允许程序控制是否活动间接完成在处于后台时 android.permission.SET_ANIMATION_SCALE//修改全局信息比例 android.permission.SET_DEBUG_APP//配置一个程序用于调试 android.permission.SET_ORIENTATION//允许底层访问设置屏幕方向和实际旋转 android.permission.SET_PREFERRED_APPLICATIONS//允许一个程序修改列表参数PackageManager.addPackageToPreferred()和PackageManager.removePackageFromPreferred()方法 android.permission.SET_PROCESS_FOREGROUND//允许程序当前运行程序强行到前台 android.permission.SET_PROCESS_LIMIT//允许设置最大的运行进程数量 android.permission.SET_TIME_ZONE//允许程序设置时间区域 android.permission.SET_WALLPAPER//允许程序设置壁纸 android.permission.SET_WALLPAPER_HINTS//允许程序设置壁纸hits android.permission.SIGNAL_PERSISTENT_PROCESSES//允许程序请求发送信号到所有显示的进程中 android.permission.STATUS_BAR//允许程序打开、关闭或禁用状态栏及图标Allows an application to open, close, or disable the status bar and its icons. android.permission.SUBSCRIBED_FEEDS_READ//允许一个程序访问订阅RSS Feed内容提供 android.permission.SUBSCRIBED_FEEDS_WRITE//系统暂时保留改设置,android开发网认为未来版本会加入该功能。 android.permission.SYSTEM_ALERT_WINDOW//允许一个程序打开窗口使用 TYPE_SYSTEM_ALERT,显示在其他所有程序的顶层(Allows an application to open windows using the type TYPE_SYSTEM_ALERT, shown on top of all other applications.) android.permission.VIBRATE//允许访问振动设备 android.permission.WAKE_LOCK//允许使用PowerManager的 WakeLocks保持进程在休眠时从屏幕消失 android.permission.WRITE_APN_SETTINGS//允许程序写入API设置 android.permission.WRITE_CALENDAR//允许一个程序写入但不读取用户日历数据 android.permission.WRITE_CONTACTS//允许程序写入但不读取用户联系人数据 android.permission.WRITE_GSERVICES//允许程序修改Google服务地图 android.permission.WRITE_OWNER_DATA//允许一个程序写入但不读取所有者数据 android.permission.WRITE_SETTINGS//允许程序读取或写入系统设置 android.permission.WRITE_SMS//允许程序写短信 android.permission.WRITE_SYNC_SETTINGS//允许程序写入同步设置