一:HTTP网络请求原理

HTTP的请求方式:

1、GET请求:获取服务器中的某个资源,例如客户端请求链接为www.ylog.me/articles/123.html则此时服务器将123.html的内容返回给客户端,在请求时如果需要传递参数,则需要在链接后添加?符号。例如需要传递用户名与用户id两个参数,那么格式应该为www.ylog.me/articles/123.html?username=myname&userid=123
2、POST请求:POST通常用于提交参数给客户端,返回值为服务器状态码
3、PUT请求:与POST方法相同,区别在于PUT写入资源
4、DELETE请求:DELETE方法就是请求服务器请求URL所指定的资源,参数传递需要与GET请求一样,参数都需要放在请求URL中
5、HEAD请求:HEAD请求与GET方法类似,在响应中只返回首部。并不返回实体的主体部分,只用于检查资源的首部进行检查,通过查看相应中的状态码,查看对象是否存在。
6、TRACE请求:TRACE请求会在目的服务器发起一个“回环”诊断,行程最后一站弹回一条TRACE响应,并在相应主体中携带他收到的原始请求报文,以便于开发人员查看原始报文检查是否被毁坏或修改过
7、OPTIONS请求:请求WEB服务器告知其支持的各种功能。通过询问服务器通常支持哪些方法,或者对某些特殊资源支持哪些方法。

HTTP报文格式解析:

1、起始行:为报文的第一行,在相应报文中粗略的说明了报文的执行结果
2、首部字段:起始行后面有零个或多个首部字段,每个首部字段都包含一个名字和一个值,为了便于解析,两者之间用冒号进行分隔。
3、主体:首部字段的空格之后就是可选的报文主体了,其中包含了所有类型的数据,起始行和首部就是结构化的文本形式,而主体则可以包含任意的二进制数据

报文示例

GET报文:

GET /?p=909 HTTP/1.1<br>
Host: www.ylog.me<br>
Cache-Control: no-cache<br>

POST(PUT)报文:

POST /?p=909 HTTP/1.1<br>
Accept-Encoding: gzip<br>
Content-Length: 22587<br>
Content-Type:multipart/form-data;   boundary=OCqxMF6-JxtxoMDHmoG5W5Y9MGRsTbF6-JxtxoMDHmoG5W5Y9MGRsTb<br>
Host: www.ylog.me
Connection: Keep-Alive<br>//此处开始为请求内容<br>
--OCqxMF6-JxtxoMDHmoG5W5Y9MGRsTbF6-JxtxoMDHmoG5W5Y9MGRsTb<br>
Content-Disposition:form-data; name="username"<br>
Content-Type: text/plain; charset=UTF-8<br>
Content-Transfer-Encoding: 8bit<br>Mr.Simple(参数,上面的参数数据格式对应当前参数)<br>
--OCqxMF6-JxtxoMDHmoG5W5Y9MGRsTbF6-JxtxoMDHmoG5W5Y9MGRsTb<br>
Content-Disposition: form-data; name="images"<br>
filename="/filepath/iamge.jpg"<br>
Content-Type: application/octet-stream<br>
Content-Transfer-Encoding: binary<br>
此处为图片的二进制数据,数据过程,在此省略
响应报文:

HTTP响应由三个部分组成,分别为:状态行,消息报文,相应报文

<状态栏>
<响应报文header>
<空行>
[响应报文内容]

状态行格式如下:

HTTP-Version Status-Code Reason-Phrase CRLF

状态返回表如下

取值范围 含义
100~199 指示信息–表示请求已接收,继续处理
200~299 请求成功。表示请求已被接收,理解,接收
300~399 重定向。要完成请求必须进行更进一步的操作
400~499 客户端错误。请求有语法错误或请求无法实现
500~599 服务器端错误。服务器未能实现合法的请求

Notes:常见状态码,状态描述的说明如下
(a) 200 OK:客户端请求成功
(b) 400 Bad Request: 客户端请求有语法错误,不能被服务器所理解
(c) 401 Unauthorized: 请求未授权,这个状态代码必须和WWW-Authenticate报头域一起使用
(d) 403 Forbidden: 服务器收到请求,但是拒绝提供服务
(e) 404 Not Found: 请求资源不存在,举个例子: 输入了错误的URL
(f) 500 Internal Server Error: 服务器发生不可预期的错误
(g) 503 Server Unavaliable: 当前服务器无法请求客户端的需求,一段时间后可能恢复正常

GET请求的Response返回示例

HTTP/1.1 200 OK
Date: Sat, 31 Dec 2005 23:59:59 GMT
Content-Type: text/html;charset=UTF-8
Content-Length: 122
<html><head><title>测试数据</title></head><body><!-这里是Body--></body>
</html>

常见的请求头部
HTTP首部可以分为以下几类,如表所示

首部类型 作用
通用首部 可以同时出现在请求报文和响应报文中
请求首部 提供更多有关请求的信息
响应首部 提供更多有关响应的信息
实体首部 描述主体的长度和内容,或者资源本身
扩展首部 HTTP规范中没有定义的新首部

经典的请求头为:
- Content-Type: 请求数据的格式
- Content-Length: 消息长度
- Host: 请求的主机名,允许多个域名同处一个IP地址,即虚拟主机
- User-Agent: 发出请求的浏览器类型,可以自行设置
- Accept: 客户端可识别的内容类型列表
- Accept-Encoding: 客户端可识别的数据编码
- Connection : 允许客户端和服务器指定与请求/响应连接有关的选项,例如Keep-Alive
- Transfer-Encoding:告知接收端为了保证报文的可靠传输,对报文采用了什么编码方式

Android HTTP网络详解相关推荐

  1. Android事件流程详解

    Android事件流程详解 网络上有不少博客讲述了android的事件分发机制和处理流程机制,但是看过千遍,总还是觉得有些迷迷糊糊,因此特地抽出一天事件来亲测下,向像我一样的广大入门程序员详细讲述an ...

  2. Android Studio 插件开发详解二:工具类

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78112856 本文出自[赵彦军的博客] 在插件开发过程中,我们按照开发一个正式的项 ...

  3. android屏幕适配详解

    android屏幕适配详解 官方地址:http://developer.android.com/guide/practices/screens_support.html 一.关于布局适配建议 1.不要 ...

  4. Android LiveData组件详解以及LiveDataBus

    转载请标明出处:https://blog.csdn.net/zhaoyanjun6/article/details/99749323 本文出自[赵彦军的博客] 一.LiveData简介 LiveDat ...

  5. 《Java和Android开发实战详解》——1.2节Java基础知识

    本节书摘来自异步社区<Java和Android开发实战详解>一书中的第1章,第1.2节Java基础知识,作者 陈会安,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  6. android 7 apk 安装程序,Android安装apk文件并适配Android 7.0详解

    Android安装apk文件并适配Android 7.0详解 首先在AndroidManifest.xml文件,activity同级节点注册provider: android:name="a ...

  7. android中getSystemService详解

    原文地址:android中getSystemService详解作者:邹斌 http://blog.sina.com.cn/s/blog_71d1e4fc0100o8qr.html http://blo ...

  8. Android OkHttp 全面详解

    Android OkHttp 全面详解 包的导入 基本使用 异步请求 同步请求 build创建 源码跟踪 newCall RealCall.enqueue Dispatcher.enqueue exe ...

  9. Carson带你学Android:图文详解RxJava背压策略

    前言 Rxjava,由于其基于事件流的链式调用.逻辑简洁 & 使用简单的特点,深受各大 Android开发者的欢迎. 本文主要讲解的是RxJava中的 背压控制策略,希望你们会喜欢. Cars ...

最新文章

  1. 手写一个合格的前端脚手架
  2. C#的变迁史10 - C# 5.0 之其他增强篇
  3. 阿里高级技术专家方法论:如何写复杂业务代码?
  4. DP项目计算机科学,动态规划DynamicProgrammingDP-天津大学计算机科学与技术学院.PPT...
  5. 使用route命令解决一机双网访问
  6. 95-180-055-源码-Watermark-AutoMaticWatermarkContext
  7. python猴子补丁_Python猴子补丁Monkey Patch用法实例解析
  8. android之NDK version was not found
  9. 前端开发:报错Error in created hook:”SyntaxError:Unexpected token u in JSON at position 0”…解决方法
  10. 智能工厂信息化系统建设规划
  11. 通达OA2017版工作流触发器应用实例
  12. C#调用Windows图片和传真查看器打开图片
  13. 【LeetCode】重复的子字符串
  14. win10系统设置还原点,系统永不奔溃
  15. php一些单选、复选框的默认选择方法
  16. 如何简单粗暴解决echars大数据量渲染卡顿问题
  17. 满满的骚操作,通用流行框架大全
  18. 100个统计学 R语言学习资源网站
  19. 判定覆盖 与 条件覆盖 的区别
  20. 使用Redis中hscan的坑

热门文章

  1. Aviutl 视频处理软件
  2. python代理ip多进程_静听网+python爬虫+多线程+多进程+构建IP代理池
  3. vue-cli打包后,找不到css、js文件问题的解决
  4. 7-4 NetworkPolicy网络策略简介与Ingress及Egress案例
  5. 古代五大美男的悲惨结局:潘安被灭三族
  6. 右键单击文件、文件夹,一直转圈圈的解决办法小总结
  7. 照片怎么转换成jpg?常见渠道一览
  8. python获取地图上经纬度_Python从地图上划出经纬度
  9. 哈夫曼树(huffman)
  10. 伤害世界不显示服务器,伤害世界肿么开服务器