《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开发进阶从小工到专家》读书笔记--网络框架的设计与实现
《android开发进阶从小工到专家》读书笔记--HTTP网络请求的更多相关文章
- Androidproject师进阶之路 :《Android开发进阶:从小工到专家》上市啦!
封面 文件夹1 文件夹2 - 当当购买链接 - 京东购买链接 为什么写这本书 写这本书的念头由来已久了. 或许是从我打算写<Android源代码设计模式解析与实战>那时起就萌生了这个念头, ...
- 《android开发进阶从小工到专家》读书笔记--网络框架的设计与实现
第一步: 第一层:Request--请求类型,JSON,字符串,文件 第二层:消息队列--维护了提交给网络框架的请求列表,并且根据响应的规则进行排序.默认情况下按照优先级和进入队列的顺序来执行,该队列 ...
- Android开发进阶从小工到专家之性能优化
- 推荐扔物线的HenCoder Android 开发进阶系列 后期接着更新
官网地址:http://hencoder.com/ 我来做一次辛勤的搬运工 HenCoder:给高级 Android 工程师的进阶手册 HenCoder Android 开发进阶: 自定义 View ...
- 【山外笔记-云原生】《Docker+Kubernetes应用开发与快速上云》读书笔记-2020.04.25(六)
书名:Docker+Kubernetes应用开发与快速上云 作者:李文强 出版社:机械工业出版社 出版时间:2020-01 ISBN:9787111643012 [山外笔记-云原生]<Docke ...
- android开发进阶学习博客资源
Android开发者博客推荐 Android入门级 - 罗宪明 http://blog.csdn.net/wdaming1986 Android入门级 - 魏祝林 http://blog.csdn.n ...
- Android开发进阶:如何读写Android文件
Android主要有四大主要组件组成:Activity.ContentProvider.Service.Intent组成.Android文件的运行主要需要读写四大组件的文件.本文将介绍如何读写Andr ...
- Android开发进阶——自定义View的使用及其原理探索
在Android开发中,系统提供给我们的UI控件是有限的,当我们需要使用一些特殊的控件的时候,只靠系统提供的控件,可能无法达到我们想要的效果,这时,就需要我们自定义一些控件,来完成我们想要的效果了.下 ...
- Android开发进阶 -- 通用适配器 CommonAdapter
在Android开发中,我们经常会用到ListView 这个组件,为了将ListView 的内容展示出来,我们会去实现一个Adapter来适配,将Layout中的布局以列表的形式展现到组件中. ...
随机推荐
- linux_文件权限
权限贯穿linux整个系统 创建文件或目录,属主和组都是当前用户 linux权限位? 9位基础权限位, 3位一组,总共12位权限 用户对文件权限,相当于你的笔记本 r 读 4 w ...
- 如何去掉ul标签的多余空白或多余大距离?
在css中写入 ul{ margin:; padding:; list-style: none; } 让其内边距和外边距为0,列表样式为空
- 三十天学不会TCP,UDP/IP网络编程 - UDP的实践--DHCP
在经历了一顿忙碌加出去玩了玩之后,我又开始重新更新了~这是最新的一篇~完整版可以去gitbook(https://www.gitbook.com/@rogerzhu/)看到,在gitbook的后台流量 ...
- python初识 - day4
一.集合(set) 1.集合的定义 set 是一个无序的元素集合,支持并.交.差及对称差等数学运算, 但由于 set 不记录元素位置, 因此不支持索引.分片等类序列的操作. 2.集合的创建 大括号或 ...
- linux下ftp命令的安装与使用
注意:实际使用时可以直接尝试第5步,如果提示找不到ftp命令,再进行第4步安装,如安装失败再进行第1步,然后顺序执行即可 1. 下载rpm文件 例如:ftp-0.17-51.1.el6.x86_64. ...
- Linux安装ffmpeg
1.安装ffmpeg 简单步骤: A.首先去官网下载源码包,我的是ffmpeg-3.4.tar.bz2,下载之后上传至Linux准备安装,首先解压安装包: tar -xjvf ffmpeg-3.4 ...
- java 包命名规范
转载 原文地址:http://blog.csdn.net/kongjiea/article/details/45365753 Java的包名都有小写单词组成,类名首字母大写:包的路径符合所开发的 系统 ...
- 定时任务schedule(quartz)
1, 简介Quartz是一个任务调度框架.核心类:Scheduler :调度器,所有Job的调度都是由它控制;JobDetail :生成Job对象的实例,存储Job对象需要的参数;Job ...
- Curl是什么,原文地址:http://www.phpchina.com/portal.php?mod=view&aid=40161
Curl是什么PHP supports libcurl, a library created by Daniel Stenberg, that allows you to connect and co ...
- $(window).scroll在页面没有滚动条时无法触发事件的bug解决方法
JS //给页面绑定滑轮滚动事件 if (document.addEventListener) { //webkit document.addEventListener('mousewheel', s ...