【Linux】应用层之HTTP协议

HTTP协议

  • 应用层协议
  • 应用层的作用:为应用程序提供网络服务
  • 序列化的意义、为什么要将数据序列化?
  • HTTP协议概述
  • HTTP的协议格式
    • 请求
    • 响应
    • GET方法和POST方法的出现的场景和区别?

应用层协议

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

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

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

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

HTTP协议概述

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

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

HTTP的协议格式

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

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

【Linux】应用层之HTTP协议_第1张图片

请求

【Linux】应用层之HTTP协议_第2张图片
【Linux】应用层之HTTP协议_第3张图片
注意:GET类型的请求没有请求体

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

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

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

常见请求头部如下:

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

请求体:GET没有请求体
【Linux】应用层之HTTP协议_第4张图片
请求体:POST请求体
【Linux】应用层之HTTP协议_第5张图片

响应

【Linux】应用层之HTTP协议_第6张图片

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

常见的状态码及其含义

状态码 含义
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主要对数据进行修改

你可能感兴趣的:(linux,linux,http)