为什么要有HTTP
通信是将数据从A结点发送到B结点,可是仅仅将数据交给B就可以了吗?
举个栗子:在淘宝购物,当卖家发送货物由物流将货物运输给买家就ok了吗?肯定不是,买家会检查商品,会使用商品,还会给评价。我们知道,TCP/IP是传输层的协议,所以TCP/IP就相当于物流公司,而两端还需要对数据进行加工处理或者使用,所以还需要一层协议,不关心通信,而关注使用细节。这层协议就是应用层协议,而应用是有不同场景的,所以就有不同种类,Http就是应用层的一种协议
HTTP是什么
HTTP(Hyper Text Transfer)是超文本传输协议,是应用层上的一个协议,是基于TCP/IP模型协议模型来传输数据
HTTP特点
- 传输效率高
- 无连接:交换HTTP报文前,不需要建立HTTP连接
- 无状态:数据传输过程中,不保存任何数据信息。比如第一次传输了数据后,就断开连接,直接进行第二次传输,如果两次传输的用户是相同的,不会被识别,必须再次传送
- 传输格式简单:传输时,只用传输方法和路径
- 传输可靠性高:HTTP的底层是TCP/IP,TCP是可靠性传输
HTTP之请求Request
请求包括请求行、请求头、空行和请求正文
请求行:请求方法 请求资源(URL) 请求版本
请求头:紧接着请求行下一行,请求的属性,冒号分割的键值对;每组属性之间用\n分隔,如果遇到空行标识请求头结束
空行:请求头后的空行是必须的
请求正文:空行后面的是请求正文,body允许为空字符串,当body有内容时,会在Header中有一个Content——Length 表明正文的长度
HTTP之响应Response
服务器接收到客户端发来的请求时,会接收请求,解析请求,然后给客户端发送HTTP响应
响应包含状态行、响应头、空行、响应正文
状态行:版本号 状态码 状态码的描述
响应头:在状态行的下一行,包含一些属性信息
空行:响应头后必须有空行,和请求一样
响应正文:服务器返回给客户端的信息
HTTP请求方法
请求方法 | 说明 |
---|---|
GET | 获取资源,返回报文实体 |
HEAD | 获取资源,只有报文头部 |
POST | 向指定资源提交数据进行处理请求,数据被包含在请求体 |
PUT | 传输文件 |
DELETE | 请求服务器删除文件 |
常用的是GET、POST
GET 和 POST 区别
- get 请求是从服务器上获取资源,post 是用来向服务器提交数据
- get 携带数据会将数据添加到 URL 中,而 post 提交数据将数据放在header 中或 body 中
- get 传输的数据要受到 URL 长度限制(1024字节),post 可以传大量数据
- 使用 get 参数会显示在地址栏,不安全,而 post 相对安全
HTTP响应状态码
常见状态码
- 200 OK:客户端请求成功
- 301 永久移动:请求的网页已移动到新位置,服务器返回此响应时,会自动将请求者转到新位置
- 302 临时移动:服务器目前从不同位置的网页响应请求,但请求者应继续用原有位置进行以后的请求
- 307 临时重定向:服务器目前从不同位置的网页响应请求,但请求者应继续用原有位置进行以后的请求
- 400 错误请求:服务器不理解请求语法
- 403 禁止:表示对请求的资源被服务器拒绝
- 404 Not Found:找不到请求的资源的访问
- 405:请求中指定的请求方法不能被用于请求相应的资源
- 500 服务器内部错误:服务器内部遇到错误,无法完成请求
- 505:HTTP版本不支持