应用层(HTTP协议)

应用层:负责应用程序之间的沟通

一、自定制协议:在应用层自己定制的数据格式

结构化传输协议:(方便数据式的组织与解析)

  • 定义结构体来表示我们需要交互的信息。
  • 发送数据时将这个结构体按照一个规则转换成字符串,接收到数据的时候再按照相同的规则把字符串转化回结构体。
  • 这个过程叫做“序列化”(结构体转换成二进制序列)和“反序列化”(二进制数据转换成结构体)。
  • 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中。

猜你喜欢

转载自blog.csdn.net/ZY_20181010/article/details/81673911