应用层和应用程序有关(HTTP/HTTPS/SSH/FTP)
一、HTTP协议格式
请求
-
首行:以空格分割,由方法(get:获取资源/post:传输实体主体/delete/head/put/options/trace/connect/link/unlink)+URL+版本号构成HTTP/1.1
-
协议头(header)
每一行都是一个键值对,键和值之间用冒号+空格分割,比如connection: keep-alive
,每组属性用\n分隔 -
空行:header结束标记,空行后就是body部分
-
body :
body可能为空字符串,get一般为空,post一般不为空;键值对之间用&分割,键和值之间用=分隔,比如username=hgtz2222&password=222222222
如果body存在, 则在Header中会有一个Content-Length属性来标识body的长度; -
数据格式可能和query_string一样
响应
- 首行:版本号+状态码(标识这次请求是否失败以及原因)+状态码描述信息
- 协议头(header)
每一行都是一个键值对,键和值之间用冒号+空格分割,比如connection: keep-alive
,每组属性用\n分隔 - 空行:header结束标记
- body:正文,html结构;如果body存在, 则在Header中会有一个Content-Length属性来标识body的长度;
二、get和post的区别
get请求通常把数据通过query_string来传输,body为空
post请求通常把数据通过body来传输
三、常见状态码
1xx:信息性状态码
2xx:请求成功状态; 200(OK)
3xx:重定向;302(Redirect, 重定向)
4xx:客户端错误;404(Not Found), 403(Forbidden)
5xx:服务器错误;504(Bad Gateway)
四、常见的Header
- Content-Type: 数据类型(text/html等)
- Content-Length: Body的长度
- Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
- User-Agent: 声明用户的操作系统和浏览器版本信息;
- referer: 当前页面是从哪个页面跳转过来的;
- location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;
- Cookie: 浏览器存储数据的一种重要存储方式,用于在客户端存储少量信息.,具体内容由程序员自行决定,通常用于实现会话(session)的功能,一般包含了用户身份标识(session id)
五、Cookie和Session
Cookie是浏览器存放数据的一种方式(客户端的概念)
Session是服务器进行描述用户身份信息的方式(服务器的概念)
实现Session机制的过程中程序员自行实现,通常把session id放到cookie中保存