HTTP 协议简读

我们终于要开始接触网络这部分知识了,在我们继续一边写 demo 一边学习的之前,我打算用一两章节来简单的学习一下 HTTP 的基础知识

为什么要学习 HTTP ?

因为,这是我们 APP 日常浏览量网上资源所使用的协议,就像我们日常网上购物一样,我们必须知道怎么买,怎么付钱,哪家物流,我们要怎么收快递,HTTP 协议就是这一篮子的事情

为什么是 HTTP 协议 ?

日常开发中,APP 与服务器打交道一般是基于 HTTP 协议的

所以了解 HTTP 协议的基本知识很有必要

什么是 HTTP 协议?

HTTP ( HyperText Transfer Protocol),中文超文本传输协议

用于定义 WEB 浏览器与 WEB 服务器之间交换数据的过程

用户代理(浏览器) 连上 Web 服务器后,若想获得 web 服务器 中的某个 web 资源,需遵守一定的通讯格式,HTTP 协议用于定义客户端与 web 服务器通迅的格式

HTTP 1.0 与 HTTP 1.1 的区别

  1. 1.0 协议,客户端与 web 服务器建立连接后,只能获得一个 web 资源

  2. 1.1 协议,允许客户端与 web 服务器建立连接后,在一个连接上获取多个 web 资源

HTTP 协议的底层工作流程

首先解释两个名词

名词 说明
SYN (SYNchronous) TCP/IP 建立连接时使用的握手信号
ACK (ACKnowledgement) 确认字符,确认发来的数据已经接受无误

TCP/IP 三次握手

客户端与服务器端连接过程要经历三次握手,用来相互确认对方身份

  1. 客户端发送 syn 包( syn = j )到服务器,进入 SYN_SEND 状态,然后等待服务器确认

  2. 服务器收到 syn 包,确认客户的 syn(ack = j + 1) ,同时在自己也发送一个 SYN(syn=k),即 SYN + ACK 包,服务器进入 SYN_RECV 状态

  3. 客户端收到 SYN + ACK 包,向服务器发送确认包 ACK(ack = k +1) ,发送完毕后,客户端与服务端进入 ESTABLISHED 状态,完成三次握手,然后两者开始传送数据

HTTP 协议一般流程

  1. 用户点击网页上的链接,比如点 简单教程,浏览器就会与 WEB 服务器建立连接 TCP 链接

  2. 建立连接后,客户端发送请求给服务器,请求的格式为:

    请求方法 + 统一资源标识符(URL)+ 协议版本号(一般是 HTTP/1.1) + (多个消息头)+ 一个空行
    

    比如

  3. 服务端收到请求后,给予相应的返回信息,返回格式为

    协议版本号 + 状态行(处理结果) + 多个信息头 + 空行 + 实体内容(比如返回的 HTML)

  4. 客户端接收服务端返回信息,通过浏览器显示出来,然后与服务端断开连接

    当然如果中途某步发生错误的话,错误信息会返回到客户端,并显示,比如:经典的 404 错误

HTTP 协议规定的几种请求方法

方法 说明
GET 请求获取 Request-URI 所标识的资源
POST 在 Request-URI 所标识的资源后附加新的数据
HEAD 请求获取由 Request-URI 所标识的资源的响应信息报头
PUT 请求服务器存储一个资源,并用 Request-URI 作为其标识
DELETE 请求服务器删除 Request-URI 所标识的资源
TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断
CONNECT 保留将来使用
OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项

实际开发中我们用得较多的方式是 GETPOST

GET 和 POST 的对比

HTTP 协议中所有的请求方法,用得最多的就是这两个用得最多的两个

GETPOST 请求都能发送数据,只是发送数据的机制不一样

  • GET

    在请求的 URL 地址后以 ? 的形式带上交给服务器的数据,多个数据之间以 & 进行分隔

    http://xxx?username=yufei&id=8
    

    数据容量通常不能超过 2K

  • POST

    可以在请求的实体内容中向服务器发送数据,传输没有数量限制

常用HTTP 应答状态码

HTTP 协议规定了一系列的状态码用于表示服务器的状态或者资源请求的状态

状态码 说明
100~199 成功接受请求,客户端需提交下一次请求才能完成整个处理过程
200 OK,客户端请求成功
300~399 请求资源已移到新的地址(302,307,304)
401 请求未授权,改状态代码需与WWW-Authenticate报头域一起使用
403 Forbidden,服务器收到请求,但是拒绝提供服务
404 Not Found,请求资源不存在,这个就不用说啦
500 Internal Server Error,服务器发生不可预期的错误
503 Server Unavailable,服务器当前不能处理客户端请求,一段时间后可能恢复正常

HTTP 协议的特点

  1. 支持客户/服务器模式

  2. 简单快速

    客户向服务器请求服务时,只需传送请求方法和路径

    请求方法常用的有GET、HEAD、POST

    每种方法规定了客户与服务器联系的类型不同

    由于 HTTP 协议简单,使得 HTTP 服务器的程序规模小,因而通信速度很快

  3. 灵活

    HTTP 允许传输任意类型的数据对象,可以使用 Content-Type 头来标记传输的类型

  4. 无连接

    无连接的含义是限制每次连接只处理一个请求

    服务器处理完客户的请求,并收到客户的应答后,即断开连接

  5. 无状态

    HTTP 协议是无状态协议

    无状态是指协议对于事务处理没有记忆能力

    缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每 次连接传送的数据量增大

    另一方面,在服务器不需要先前信息时它的应答就较快

Android 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.