《android开发进阶从小工到专家》读书笔记--HTTP网络请求
No1:
客户端与服务器的交互流程:
1)客户端执行网络请求,从URL中解析出服务器的主机名
2)将服务器的主机名转换成服务器的IP地址
3)将端口号从URL中解析出来
4)建立一条从客户端与Web服务器的TCP连接
5)客户端通过输出流向服务器发送一条HTTP请求
6)服务器向客户端回送一条HTTP响应报文
7)客户端从输入流获取报文
8)客户端解析报文,关闭连接
9)客户端将结果显示在UI上
No2:
HTTP请求方式:
1)GET
获取服务器中某个资源,www.devtf.cn/articles/123.html?username=myname&userid=123
2)POST
通常会会用来提交HTML的表单
3)PUT
会向服务器写入资源
4)DELETE
请求服务器删除请求URL所指定的资源。但是,客户端应用程序无法保证删除操作一定会被执行。因为,HTTP规范允许服务器在不通知客户端的情况下撤销请求。DELETE方式和GET请求一样,参数都需要放在请求的URL中。
5)HEAD
与GET方法行为很类似,但服务器在响应中只返回首部,不会返回实体的主体部分。这就允许客户端在未获取实际资源的情况下,对资源的首部进行检查。
6)TRACE
TRACE请求会在目的服务端发起一个“环回”诊断。行程最后一站的服务器会弹回一条TRACE响应,并在响应主体中携带它收到的原始请求报文。这样客户端就可以查看在所有中间HTTP应用程序组成的请求/响应链上,原始报文是否以及如何被毁坏或修改过。
主要用于诊断,即用于验证请求是否如愿穿过了请求/响应链
7)OPTIONS请求
OPTIONS方法请求Web服务器告知其支持的各种功能。可以询问服务器通常支持哪些方法,或者对某些特殊资源支持哪些方法(有些服务器可能只支持对一些特殊类型的对象使用特定的操作)
No3:
一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成。
HTTP响应也由3个部分组成,分别是:状态行、消息报头、响应正文。
No4:
常见状态代码、状态描述
1)200 OK:客户端请求成功
2)400 Bad Request:客户端请求有语法错误,不能被服务器所理解
3)401 Unauthorized:请求未经授权,这个状态码必须和WWW-Authenticate报头域一起使用
4)403 Forbidden:服务器收到请求,但是拒绝提供服务
5)404 Not Fount:请求资源不存在,举个例子:输入了错误的URL
6)500 Internal Server Error:服务器发生不可预期的错误
7)503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,举个例子:HTTP/1.1 200 OK(CRLF)
No5:
HTTP要传送一条报文时,会以流的形式将报文数据的内容通过一条打开的TCP连接按序传输。TCP收到数据流之后,会将数据流分割成被称作段的小数据块,并将段封装在IP分组中,通过因特网进行传输。所有这些工作都是由TCP/IP软件来处理的,程序员什么都看不到。
No6:
android中提供了两种执行网络请求的方式,一种是使用Apache的HttpClient,另一种则是Java的HttpURLConnection。
No7:
HttpURLConnection的API简单,体积较小,它的压缩和缓存机制可以有效的减少网络访问的流量,在提升速度和省电方面也起到了较大的作用。
在Android 6.0中,HttpClient库已经被移除。
No8:
一旦向输出流中写入了参数,那么请求方式则会变为POST,即使通过setRequestMethod函数将请求设置为“GET”。因为GET请求的参数是附在URL中的,因此,如果是GET请求,则不要在请求体中设置参数。
相关文章
- android onresume函数,Android界面跳转时候onDestroy和onResume的调用顺序
- android开机动画多长时间_Android开机动画原理分析
- android 的hook技术,Android Native Hook技术(一)
- android 定时器重置,Android定时器延迟和重置[通俗易懂]
- android短信验证码方案,Android之短信验证码
- robotium android,Robotium 测试Android apk安装包
- Android resource linking failed_android:authorities
- Android angle_android 界面悬停
- Android n_android 反编译
- 用新技术 “派生” 动听旋律 | Android 开发者故事
- Android 数据库加密 android-database-sqlcipher 开源版本编译过程
- 【Android 多媒体开发】 MediaPlayer 网络视频播放器
- 【Android NDK 开发】Kotlin 语言中使用 NDK ( 创建支持 Kotlin 的 NDK 项目 | Kotlin 语言中使用 NDK 要点 | 代码示例 )
- 【Android 逆向】函数拦截 ( GOT 表拦截 与 插桩拦截 | 插桩拦截简介 | 插桩拦截涉及的 ARM 和 x86 中的跳转指令 )
- 【错误记录】编译 Android 版本的 ijkplayer 报错 ( ./init-android.sh: 第 37 行: cd: android/contrib/: 没有那个文件或目录 )
- 【Android RenderScript】RenderScript 简介 ① ( GPU 简介 | GPU 系统架构 )
- Android弹性收缩自适应布局FlexboxLayout详解手机开发
- android广播监听短信并显示内容详解手机开发
- [android] 网络图片查看器详解手机开发
- Android中android:visibility的3中属性的剖析详解手机开发
- android ignore文件备份详解手机开发
- Android AudioRecord、AudioTrack录制播放音频详解手机开发
- Android下保存数据到SharePreference和从SharePreference读取数据详解编程语言
- Linux搭建HTTP代理实现网络自由访问(linux搭建http代理)
- Win11能跑Android应用但无缘GMS服务
- 谷歌正在为Android 12原生版开发单手模式 照顾某些小型安卓设备制造商
- 【硬创邦】跟hoowa学做智能路由(十三):网络音箱之Android篇
- Android系统基于Linux内核,实现移动设备突破极限。(android linux内核)
- 谷歌Android内测版设备查找功能曝光 支持寻物网络和车载平台
- 16年前,谷歌为何花5000万美元买下Android?
- 提升Android应用视觉吸引效果的10个UI设计技巧
- android读取raw文件示例
- android获取联系人示例分享