*****
**HTTP协议**
[TOC=6]
# 1. 为什么要学习HTTP协议?
中国人与中国人使用汉语沟通。
美国人与美国人使用英语沟通。
德国人与德国人使用德语沟通。
日本人与日本人使用日语沟通。
汉语、英语、德语、日语。就像约束、规范一样。要让他们听懂我们说的话要使用相应的语言。
那么,我们要使用一台计算机和另一台计算机通信,有没有规范/协议呢?
那么,那么这个规范/协议是什么?
# 2. HTTP协议的由来
它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,RFC 1945定义了HTTP/1.0版本。其中最著名的就是RFC 2616。RFC 2616定义了今天普遍使用的一个版本——HTTP 1.1。
## 2.1 RFC
Request For Comments(RFC),是一系列以编号排定的文件。文件收集了有关互联网相关信息,以及UNIX和互联网社区的[软件](https://baike.baidu.com/item/%E8%BD%AF%E4%BB%B6/12053)文件。目前RFC文件是由Internet Society(ISOC)赞助发行。基本的互联网通信协议都有在RFC文件内详细说明。RFC文件还额外加入许多的论题在标准内,例如对于互联网新开发的协议及发展中所有的记录。因此几乎所有的互联网标准都有收录在RFC文件之中。
# 3. 什么是HTTP协议?
HTTP协议,即超文本传输协议(Hypertext transfer protocol)。是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。
# 4. HTTP协议有哪些特点呢?
HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。
* 支持客户/服务器模式
* 简单快速
* 灵活
* 无连接
* 无状态
# 5. HTTP请求头与相应头
HTTP的请求由三部分组成,分别是:请求行、请求头、请求正文
请求头:请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。
常见的请求头:
Accept:Accept请求报头域用于指定客户端接受哪些类型的信息。
Accept-Charset:Accept-Charset请求报头域用于指定客户端接受的字符集。
Accept-Encoding:Accept-Encoding请求报头域类似于Accept,但是它是用于指定可接受的内容编码。
Authorization:Authorization请求报头域主要用于证明客户端有权查看某个资源。
Host(发送请求时,该报头域是必需的):Host请求报头域主要用于指定被请求资源的Internet主机和端口号,它通
常从HTTP URL中提取出来的,
HTTP的响应由三个部分组成,分别是:状态行、响应头、响应正文
响应头:响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的
资源进行下一步访问的信息。
常见的响应头:
Location:Location响应报头域用于重定向接受者到一个新的位置。
Server:Server响应报头域包含了服务器用来处理请求的软件信息。
# 6. HTTP请求方法与响应码
根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
![](https://box.kancloud.cn/9a2cad81985e1e3f8f481d40da5054b0_1670x764.png)
HTTP响应码:
状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
常见状态代码、状态描述、说明:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
# 7. GET请求和POST请求的区别
* GET在浏览器回退时是无害的,而POST会再次提交请求。
* GET请求会被浏览器主动cache,而POST不会,除非手动设置。
* GET请求只能进行url编码,而POST支持多种编码方式。
* GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
* GET请求在URL中传送的参数是有长度限制的,而POST么有。
* GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
* GET参数通过URL传递,POST放在Request body中。
# 8. HTTP1.1与HTTP1.0的区别
(1)加入了缓存处理
(2)带宽的优化
(3)错误通知管理
(4)host头处理
(5)长链接
- 咨询项目实战
- 第一单元 HTTP协议
- 1.1 OSI七层模型
- 1.2 HTTP协议(重点)
- 1.3 HTTPS协议(了解)
- 1.4 TCP/IP协议扩展
- 1.5 WebService简介及实战(无接口)
- 1.6 课后练习
- 第二单元 HTTPURLConnection
- 2.1 ANR
- 2.2 网络判断
- 2.3 HTTPURLConnection
- 2.4 课后练习
- 第三单元 AsyncTask
- 3.1 AsyncTask概述
- 3.2 AsyncTask基本使用
- 3.3 课后练习
- 第四单元 图片异步加载
- 4.1 图片异步加载概述
- 4.2 LruCache
- 4.3 DiskLRUCache
- 4.4 图片三级缓存概述
- 4.5 封装图片加载缓存框架
- 第五单元 ListView多条目
- 5.1 ListView多条目概述
- 5.2 ListView多条目的使用
- 第六单元 ListView实现下拉刷新上拉加载
- 6.1 下拉刷新和上拉加载更多
- 6.2 XListView概述
- 6.3 XListView的使用
- 第七单元 封装网络框
- 7.1 封装网络框架概述
- 7.2 网络框架的封装
- 第八单元 项目介绍
- 8.1 公司项目团队架构简介
- 8.2 项目文档及项目流程介绍
- 8.3 项目管理
- 8.4 项目开发
- 第九单元 项目框架搭建
- 9.1 基类封装概述
- 9.2 Application中初始化配置
- 9.3 项目中的工具类
- 9.4 封装网络请求框架
- 9.5 封装图片异步缓存框架
- 第十单元 搭建UI框架1
- 10.1 侧滑菜单概述
- 10.2 主界面框架搭建
- 第十一单元 搭建UI框架2
- 11.1 TabLayout的概述
- 11.2 TabLayout的使用
- 第十二单元 图片上传
- 12.1 图片上传概述
- 12.2 图片上传的实现
- 第十三单元 PullToRefresh
- 13.1 PullToRefresh概述
- 13.2 PullToRefresh的使用
- 13.3 缓存业务实现思路
- 第十四单元 事件分发及滑动冲突
- 14.1 事件分发概述
- 14.2 事件分发流程
- 14.3 事件分发的使用
- 第十五单元 传感器的基本使用
- 15.1 传感器概述
- 15.2 传感器的使用
- 第十六单元 HTML与CSS复习
- 16.1 HTML
- 16.2 CSS
- 第十七单元 js复习
- 17.1 js基础语法
- 17.2 js数组和内置对象
- 17.3 js常用事件
- 17.4 js对象模型
- 17.5 js 正则表达式
- 第十八单元 WebView
- 18.1 WebView 概述
- 18.2 WebView的使用
- 18.3 WebView与js交互
- 第十九单元 项目案例
- 项目概述
- 第二十单元 项目答辩
- 周考
- 第一周周考
- 第二周周考
- 第三种周考
- 月考
- 接口文档