HTTP网络通讯协议在任何的开发工做中都起到很是重要的做用,今天,咱们来说解下关于HTTP的相关知识。html
计算机网络体系结构分为五层,自上而下分别是应用、运输、网络、数据链路和物理层,以下图:web
HTTP存在于最高层的应用层,简单介绍下应用层:浏览器
做用
经过应用层协议定义应用进程间(运行的程序)的通讯规则服务器
应用层协议主要有HTTP、SMTP、FTP协议等等网络
交互的数据单元称为报文并发
即HyperText Transfer Protocol,超文本传输协议,属于应用层协议的一种测试
规定了应用进程间通讯(请求&响应)的准则.net
HTTP协议采用了请求/响应的工做方式,工做流程如图:计算机网络
HTTP的报文分为请求报文和响应报文设计
空格不能省
1.1 请求方法
即对请求对象的操做,请求方法有8种:
方法类别 | 意义 |
---|---|
OPTION | 请求“选项”的信息 |
HEAD | 请求读取”URL标志信息的首部“信息 |
GET | 请求读取“URL标志的信息“的信息 |
POST | 为服务器添加信息 |
PUT | 为指定的URL下添加(存储)一个文档 |
DELETE | 删除指定URL所标志的信息 |
TRACE | 用于进行环回测试的请求报文 |
CONNECT | 用于代理服务器 |
最经常使用的就是GET和POST方法。
1.2 请求路径
要了解请求地址,先来了解下URL概念:
- 协议:采用的应用层通讯协议,好比在HTTP协议下的URL地址:
HTTP://<主机>:<端口>/<路径>- 主机:请求资源所在主机的域名
- 端口和路径有时能够省略(HTTP默认端口号是80)
从上面能够了解到,路径则是端口号后面符号”/“的部分,下面举例
URL(统一资源定位符) | PATH(路径) |
---|---|
http://www.baidu.com/ | / |
http://www.weibo.com/2874748/home | /2874748/home |
1.3 协议版本
HTTP协议版本主要是1.0、1.一、2.0
具体区别这里很少解释,你们有兴趣能够去了解下
先假设:
2. 常见请求Header
1. 数据交换格式
请求体是能够是任意类型的,但服务器须要额外进行解析,如JSON
{"skill":{ "web":[ { "name":"html", "year":"5" }, { "name":"ht", "year":"4" }], "database":[ { "name":"h", "year":"2" }] `}}
想详细了解Android开发中的JSON解析能够看下我写的另一篇文章:
Android开发:JSON简介及最全面解析方法!
2.键值对形式
键与值之间用”=“链接,每一个键值对间用&链接,且只能用ASCII字符,如Query String
key1=value1&key2&value2
3. 分部分形式
请求体被分为多个部分,应用场景是文件上传,好比邮件上传等等
以下:
结合上述说的请求行、请求头和请求体,现假设
则请求报文以下:
从上面能够看出,与请求报文相比,除了第一行(请求行VS状态行)之外,响应报文的其余结构与请求报文很是类似。其中,响应体是用于存放须要返回给客户端的数据信息的。
其中,空格不能省
1.1 协议版本
HTTP协议版本主要是1.0、1.一、2.0
具体区别这里很少解释,你们有兴趣能够去了解下
1.2 状态码
状态码分为5大类:
类别 | 含义 |
---|---|
1xx | 表示信息通知,如请求收到了或正在进行处理 |
2xx | 表示成功,如接受或知道了 |
3xx | 表示重定向,如要完成请求还必须采起进一步行动 |
4xx | 客户的差错,如请求中有错误的语法或不能完成:404 |
5xx | 表示服务器的差错,如服务器失效没法完成请求 |
1.3 状态信息
对状态码的简单解释
具体详细的状态码信息能够看状态码详解
2. 常见响应Header