【Linux】应用层之HTTP协议

应用层协议

在应用层,需要我们传递应用层所需特殊的数据格式,这种数据可能是连续数据,例如int类型的整形变量,也可能是string类型的字符串,也可能是多个变量构成的结构体,那么就意味着我们发送的数据可能是连续的,也可能是不连续的,这时为了统一数据的解析方法,我们对数据在发送前进行序列化,在接收后进行反序列化。那么无论使用序列化还是反序列化,都需要对数据格式进行约定,以便于一端能够正常进行解析。
而对数据进行约定,使之能够正常的进行构造和解析,这种约定就是应用层协议

应用层的作用:为应用程序提供网络服务

序列化的意义、为什么要将数据序列化?

序列化本质是将离散存储的数据转换为连续的数据,由于大量的数据存储并非连续的,例如一个结构体中嵌套一个指针,而这个指针所指向的是一另一个结构体对象,那么此时当前结构体在存储角度来看就是一个不连续的数据,如果我们贸然当当前的数据进行发送,对方接收到之后,其内部的指针指向的地址就无效了,因此我们需要将数据进行序列化,之后才可以进行存储或者通过网络发送出去。

HTTP协议概述

虽然应用层协议是程序员定的,但是为了方便大量的程序员使用,大佬们已经定义了现成的应用层协议可以直接使用,就比如HTTP协议

HTTP协议是无连接,无状态,工作在应用层的协议。
其中无连接表示HTTP协议本身不维护连接信息,但是HTTP的数据会交给传输层的TCP协议,而TCP是面向连接的。
无状态是指:HTTP本身不会对数据的请求和响应状态进行保存。

HTTP的协议格式

协议格式分为:请求和响应

请求中包含:请求首行,请求头部,空行,请求体
响应中包含:响应首行,响应头部,空行,响应体

在这里插入图片描述

请求

在这里插入图片描述
在这里插入图片描述
注意:GET类型的请求没有请求体

请求首行:[方法] + [url] + [版本]

请求方法主要有:GET、HEAD、PUT、POST、TRACE、OPTIONS、DELETE以及扩展方法,但常用的只有前两个。

请求头部:为请求报文添加了一些附加信息,由“名/值”对组成,每行一对,名和值之间使用冒号分隔

常见请求头部如下:

请求头说明
Host接受请求的服务器地址,可以是IP:端口号,也可以是域名
User-Agent发送请求的应用程序名称
Connection指定与连接相关的属性,如Connection:Keep-Alive
Accept-Charset通知服务端可以发送的编码格式
Accept-Encoding通知服务端可以发送的数据压缩格式
Accept-Language通知服务端可以发送的语言

请求体:GET没有请求体
在这里插入图片描述
请求体:POST请求体
在这里插入图片描述

响应

在这里插入图片描述

响应首行: [版本号] + [状态码] + [状态码解释]

常见的状态码及其含义

状态码含义
200响应成功
301永久重定向,删除源地址,保留重定向地址
302临时重定向
400客户端请求有语法错误,无法被服务器识别
403服务器收到请求,但是拒绝提供服务
404请求资源不存在
500服务器内部错误

响应头部:与请求头部类似,为响应报文提供一些附加信息
常见的响应头部如下:

响应头部说明
Server服务器应用程序软件的名称和版本
Content-Type响应正文的类型(是图片还是二进制字符串)
Content-Length响应正文长度
Content-Charset响应正文使用的编码
Content-Encoding响应正文使用的数据压缩格式
Content-Language响应正文使用的语言

GET方法和POST方法的出现的场景和区别?

GET方法是最常见的请求方法,一般出现于以下几种场景:
1.在浏览器输入URL后点击回车,实际上只要是网址,点击之后都会触发GET请求
2.一些图片的src属性,也会被构造出一个URL

POST方法也比较常见,一般出现于输入用户名和密码之后,点击登录会触发POST请求

GET方法和POST方法的区别?
1.没有本质的区别,可以互相替换
2.语义不同,GET习惯于从服务器获取数据,POST是向服务器提交数据
2.格式不同,GET方法一般没有请求体,而POST方法有,所以GET习惯用URL传递数据,POST习惯用请求体传递数据
3.长度不同:GET方法一般有长度限制,POST请求没有长度限制
4.后续维护不同:GET请求方法返回的内容可以被浏览器缓存起来,而POST方法不会缓存返回的内容
5.读写不同:GET主要是对数据查询,而POST主要对数据进行修改

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值