应用层:负责应用程序之间的沟通
一、自定制协议:在应用层自己定制的数据格式
结构化传输协议:(方便数据式的组织与解析)
- 定义结构体来表示我们需要交互的信息。
- 发送数据时将这个结构体按照一个规则转换成字符串,接收到数据的时候再按照相同的规则把字符串转化回结构体。
- 这个过程叫做“序列化”(结构体转换成二进制序列)和“反序列化”(二进制数据转换成结构体)。
- 192.168.0.1:本地路由器地址 127.0.0.1:本地保留地址
二、HTTP协议(应用层)
1.作用:传输文件,网页
采用TCP协议(TCP协议详解:https://blog.csdn.net/ZY_20181010/article/details/81589479)
2.URL:统一资源定位符
相对路径是根目录下的相对路径
3.urlencode(编码) 和urldecode(解码)
一个字符8位,前4位-->编成1位,后4位-->编成1位,再加上%。
0000 0000 + 0010 1011 eg:C++ ---> C%2B%2B
前四位转换成一个十六进制的数字 2
后四位转换成一个十六进制的数字 B
4.HTTP协议格式(四部分):
请求Request:
1)首行:请求方法 url 协议版本号\r\n
请求方法:POST:提交数据有正文。将请求放在正文里(key=val&key=val)
GET:请求资源没有正文,提交数据在url(urlencode)
(QUERY_STRING查询字符串)中。(数据长度有限 )
GET和POST一个重要的区别:
GET产生一个TCP数据包,POST产生两个TCP数据包。时间上:POST比GET消耗时间多。
2)请求头(Header):请求的属性,冒号分割的键值对。
格式:Key: val\r\n key: val\r\n
key冒号空格val换行
每行为一个关键信息,用“\r\n”(Windows下)间隔,每一行信息由键(key)
值(value)对组成
User-Agent:将操作系统和浏览器的信息告诉服务器
Content-Type:正文类型(格式)
Content-Length:指定正文长度(一次性发送)
Cache-Control:缓存大小
Accept-Encoding:所能接收的数据格式
Accept-Language:能接受的语言
Cookie:(最多300个,4K)保存会话或是浏览信息
Set-Cookie:保存某些浏览器的信息
Referer:当前的请求从哪个网页跳转的
连续接收两个“\r\n”表示请求头请求接收
3)空格:用于间隔请求头Header与Body正文
4)body:向服务器发送的正文(可以是空字符串)。如果body存在,Header中会有
一个Connect-Length属性来标识body的长度。
响应Response
1)首行:协议版本号 响应状态码 状态码描述
响应状态码:1开头(通知)
2开头(响应成功)
3开头(重定向 301:永久重定向 302:临时重定向)
4开头(客户端错误 404:没找到 403:Forbidden)
5开头(服务端错误)
2)Header:
格式:Key: val\r\n key: val\r\n
key冒号空格val换行
location:以3开头的重定向的位置,表示下一次在哪里显示
Transfer-Encoding:传输方式
chunked:分次发送,最后大小以0 结束
expires:生存周期
3)空行:用于间隔请求头Header与Body正文
4)body:向服务器发送的正文(可以是空字符串)。如果body存在,Header中会有
一个Connect-Length属性来标识body的长度。如果服务器返回了一个html界面,
那么html页面内容就是在body中。