http协议
0x0 WHAT-什么是HTTP?
HTTP是超文本传输协议,用来传输超越文本的一些信息,比如视频、音乐等
0x1 HOW-HTTP如何工作的
0x1.1 HTTP请求报文
请求报文 = 请求行+请求消息头+空白行+请求正文
请求行 = 请求方法+请求路径+版本号
- 常见请求方法
- get:直接请求资源
- post:请求资源并且提交参数
- head:向服务器发出指定资源的请求,只不过服务器将不传回资源的本文部分
- put:上传文件
- delete:删除请求的url所标识的资源
- 常见请求消息头
- User-Agent 用户浏览器
- Host 目的域名
- Referer 来自什么网站
0x1.2 HTTP应答报文
应答报文=状态行+响应头部+响应正文
状态行=协议版本+状态码+状态码的原因短语
- 常见状态码
- 1xx 信息性状态码:请求已经被服务器接收,接收的请求正在被处理
- 2xx 成功状态码:正常处理
- 3xx 重定向状态码
- 4xx 客户端错误状态码
- 5xx 服务器错误状态码
- 200 OK:客户端请求成功。
- 400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
- 401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
- 403 Forbidden:服务器收到请求,但是拒绝提供服务。
- 404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
- 500 Internal Server Error:服务器发生不可预期的错误。
-
503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,举个例子:HTTP/1.1 200 OK(CRLF)
- 常见响应头
- server:服务器相关软件信息;apache
- location:用于重定向
- content-type:内容类型
- content-encoding:压缩、编码格式
- content-length:内容长度
- connnetion:是否需要长久连接
0x1.3 http的工作过程
在浏览器地址栏键入URL,按下回车之后会经历以下流程:
- 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
- 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;
- 浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
- 服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
- 释放 TCP连接;
- 浏览器将该 html 文本并显示内容;
0x2 cooike和sessions
0x2.1 cooike
HTTP是一个没有连接状态的协议,所以当每次传输完毕网页内容后,就会自动断开连接,所以当进为了避免出现,多次进行用户的登录的情况,设置了cooike来描述用户连接的状态和信息
- web服务器通过在http响应消息中增加set-cooike响应头字段将cooike信息发给浏览器
- 之后浏览器在每次访问服务器的时都会设置自己的cooike字段,用来告知服务器自己的信息
0x2.2 sessions
使用cooike和URL参数将上一次请求的状态信息传递到下一次请求中,但是如果传递的状态信息较多的话,就增大服务处理难度和网络传输效率
session是一种将会话保存在服务器的一种技术,通过将唯一session id来标识一个会话,客户端每次传递的cooike参数只需要携带session id即可
0x2.3 cooike与sessions对比
- cooike
- 存储在浏览器
- 安全性低
- 默认随着浏览器进程结束而结束,可以手动指定时间,浏览器结束后依然存在
- sessions
- 存储在服务器,session太多影响服务器性能
- 安全性高
- 在指定时间过后会结束,未到指定时间会随着浏览器进程结束而结束
0x2.4 cooike的安全性
- secure
- 通过设置secure属性,只有在HTTPS连接中,才会传递cooike;http则不会
- httponly
- 只有通过http请求或者https请求才能查看cooike信息,防止xss攻击盗取cooike