1.Web简介
2.Http简介
3.Http的报文
4.Http的状态码
1.Web
1 ) . Web是由无数个网页通过超链接构成的庞大信息空, 通俗的理解Web理解为我们日常看到的一个
个网页的集合
2 ) . 网页由一些对象组成, 对象可以是html文件, jpeg图像, 声音剪辑文件等
3 ) . 通过url ( 通用对象访问符) 对每个对象进行引用
- 访问协议, 用户名, 口令, 端口等
4 ) . url格式
2.Http
1 ) . Http协议简介
Http表示超文本传输协议, 表示为了传输超文本而制定的规则; 超文本表示一份包含超链接的
文件( 点击超链接从一个地方跳到另一个地方)
a. Web的应用层协议
b. 客户端/ 服务器模式
- 客户: 请求, 接收和显示web对象的浏览器
- 服务器: 对请求进行响应, 发送对象的web服务器
2 ) . Http短连接和无状态简介
a. 短连接( http/ 1.0 默认方式) , 一个连接只用于一次请求- 响应
b. 无状态: 协议本身不会为了下一次通信而记住本次通信的任何内容, 每一次http请求都是
完全独立的, 自包含的, 服务器不会默认记录任何之前的请求信息
c. http/ 1.1 后http是持久性连接( 长连接)
Http的下层协议使用的是tcp
a. 客户发起一个与服务器的tcp连接( 建立套接字) , 端口号为80
b. 服务器接受客户的tcp连接
c. 在浏览器( http客户端) 与web服务器( http服务器server) 交换http报文
d. tcp连接关闭
3 ) . 持久性http和非持久性http
a. 区别: 一次事务完成后, 下层的传输层( tcp) 连接是否断开
b. 事务: 客户端发送请求, 服务器处理请求, 客户端接收响应
c. Http/ 1.0 使用非持久性连接, Http/ 1.1 默认使用持久性连接
d. 如下是非持久性http的实例:
持久性Http
a. 服务器在发送响应后, 仍保持tcp连接
b. 在相同客户端和服务器之间的后续请求和响应报文通过相同的连接进行传送
c. 持久性Http分为两种方式:
- 非流水方式的持久Http
客户端只能在前一个响应后才能发出新的请求
- 流水方式的持久Http
Http/ 1.1 的默认方式, 客户端无需收到前一个响应可以立即产生一个请求
3.Http的报文
Http报文就是用于在Http协议中发送和接收数据的数据块
a. Http协议: 两个人约定好的对话规则( 比如: 先说请求行, 再说头部, 空一行, 再说正文)
b. Http报文: 按照这个规则写出来的具体的一封信, 里面包含了所有要传递的信息
c. Http报文分为两种:
- 请求报文( Request Message) : 写给服务器的信
- 响应报文( Response Message) : 服务器回给你的信
1 ) . http请求报文的格式
请求报文有三个必有的核心部分组成
a. 请求行( The Request Line) - 信封上的一句话摘要; 这是信的第一行, 告诉服务器你想干
什么, 它又包含三部分:
- 方法( Method) , 你想做的动作
Get表示你想获取点东西, 比如: 获取网页, 图片
Post表示你想提交点东西给服务器, 比如: 提交登录信息, 下单数据等
- URL ( 路径)
你想要的动作施加在哪个资源上, 比如: / product/ 12345 . html
- Http版本
用的什么写信格式, 比如: Http/ 1.1
b. 请求头( Request Headers) - 信的附加说明
从第二行开始, 是一行行的"键值对" , 就像在信纸上写一些附加信息, 告诉服务器更多细节
- Host: www. taobao. com ( 你要寄给谁? )
- User- Agent: Mozilla/ 5 . 0 ( 你用什么浏览器写的这封信)
- Accept: text/ html ( 我希望你回信用html格式)
- Cookie: user_id = abc123 ( 这是你的身份凭证, 告诉服务器你是谁)
c. 请求体( Request Body) - 信的主要内容
一个空行之后, 才是信的具体内容; 不是所有信都有内容
- Get请求通常没有Body, 参数通常在url中
- Post请求通常有Body, 里面装着你提交的数据; 比如你登录时写的username= xiaoming
& password= 123456 就在这里
2 ) . http响应报文的格式
服务器回的信结构也非常类似, 同样由三部分核心组成
a. 状态行( Status Line) - 回信的第一句话
告诉你请求的结果如何了, 也包含三部分:
- Http版本
- 状态码( Status Code) , 一个三位数字, 快速告诉你结果
- 原因短语: 对状态码的简短文字描述, 比如OK
比如: HTTP/ 1.1 200 OK, 表示你请求的事情办成了
b. 响应头( Response Headers) - 回信的附加说明
同样是键值对, 服务器告诉你一些关于这封回信的说明
- Content- Type: text/ html ( 我回信的主要内容是HTML格式的)
- Content- Length: 1024 ( 内容有1024 字节)
- Set- Cookie: new_session= def456 ( 给你一张新的会员卡, 下层记得带上)
c. 响应体( Response Body) - 回信的主要内容/ 你要的东西
空行之后, 服务器返回的真实数据
Http协议中最常用的方法Methdo
a. Get - 获取( 查看)
从服务器查询资源, 只读操作, 不应该修改服务器状态; 参数在url
b. Delete - 删除
请求服务器删除指定的资源
c. Head - 头部( 获取元信息)
只向服务器获取资源的响应头( Header) , 不要响应体( Body) ; 也就是说, 只要元信息, 不要
数据本身
d. Post - 用于创建和触发复杂更新
比如1 : 领取每日奖励, 服务器发生了什么 ?
- 创建了一条新的奖励领取记录
- 修改了你的金币数量( 给你加钱)
- 修改了你的任务状态( 标记为“已领取”)
- 你看: 这个请求创建了新数据, 并顺带修改了其他数据; 但其核心是创建了一个“领取动作”
的记录
比如2 : 触发复杂更新, 服务器发生了什么?
- 从你的背包里删除这个道具( 修改)
- 给你的角色增加经验值( 修改)
- 可能会触发其他效果( 如更新成就进度)
- 你看: 这个请求没有“创建”一个显而易见的新东西, 但它触发了一个有多个步骤的“使用”动
作, 导致多处数据被修改
e. Put - 用于简单地更新
比如: 更新个人资料, 服务器发生了什么?
用你发过来的完整新数据, 直接替换掉旧的个人资料数据; 你看: 这个请求非常直接, 就是“更
新”, 而且是“完整替换”; 它不涉及复杂的业务逻辑
3.Http的响应状态码
Http的响应状态码位于服务器, 客户端的响应报文中首行; 常见的状态码如下:
a. 200 Ok
请求成功, 请求对象包含在响应报文的后续部分
b. 301 Moved Permanently
- 请求的对象被永久转移了, 新的url在响应报文的首部行中指定
- 客户端软件自动用新的url去获取对象
c. 400 Bad Request
一个通用的差错代码, 表示该请求不能被服务器解读
d. 404 Not Found
请求的文档在该服务器上没有找到
e. 505 Http version not supported