http的请求报文和响应报文结构
http请求报文
分为请求行、请求头、空行、请求正文(可选项,get没有)
-
请求行:包括请求方法、URL以及消息版本,用空格分隔
-
请求头:为请求报文添加了一下附加信息,由“名:值”组成
-
空行:表示头部的结束,接下来是正文,必不可少的一行
-
请求正文:可选部分,如:get就没有请求正文
http响应报文
主要由状态行、响应头、空行、响应正文四部分组成
-
状态行
包括协议版本,状态码,状态码描述
-
响应头
为响应报文添加附加信息
-
空行
-
响应正文
http状态码的含义
-
200 OK 服务器已成功处理了请求并提供了请求的网页。
-
202 Accepted 已经接受请求,但处理尚未完成。
-
204 No Content 没有新文档,浏览器应该继续显示原来的文档。
-
206 Partial Content 客户端进行了范围请求。响应报文中由Content-Range 指定实体
-
301 Moved Permanently 永久性重定向。请求的网页已永久移动到新位置。
-
302(或307) Moved Temporatily 临时性重定向。请求的网页临时移动到新位置。
-
304 Not Modified 未修改。自从上次请求后,请求的内容未修改过。
-
401 Unauthorized 客户试图未经授权访问受密码保护的页面。应答中会包含一个WWW-Authenticate 头,浏览器据此显示用户名字/密码对话框, 然后在填写合适的Authorization 头后再次发出请求。
-
403 Forbidden 服务器拒绝请求。
-
403.6- IP address rejected
-
404 Not Found 服务器上不存在客户机所请求的资源。
-
500 Internal Server Error 服务器遇到一个错误,使其无法为请求提供服务
http1.1新特性
-
默认持久连接和流水线
HTTP/1.1 默认使用持久连接,只要客户端服务端任意一端没有明确提出断开TCP 连接,就一直保持连接,在同一个TCP 连接下,可以发送多次HTTP 请求。同时,默认采用流水线的方式发送求,即客户端每遇到一个对象引用就立即发出一个请求,而不必等到收到前一个响应之后才能发出一个请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容,这样也显著地减少了整个下载过程所需要的时间
-
分块传输数据
HTTP/1.1 引入了分块(chunked)的传输方法。该方法使发送方能将消息实体分割为任意大小的组块(chunk),并单独地发送他们。在每个组块前面,都加上了该组块的长度,使接收方可确保自己能够完整地接收到这个组块。更重要的是,在最末尾的地方,发送方生成了长度为零的块,接收方可据此判断整条消息都已安全地传输完毕。这样也避免了在服务器端占用大量的缓存。Transfer-Encoding:chunked 向接收方指出:响应将被分组块,对响应分析时,应采取不同于非分组块的方式。
-
状态码100 Continue
Continue,用于客户端在发送POST 数据给服务器前,征询服务器的情况,看服务器是否处理POST 的数据
-
Host 域
常用的HTTP 方法
-
GET: 从服务器中获取一份文档,即用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL 传参给服务器。
-
POST:用于传输信息给服务器,主要功能与GET 方法类似,但一般推荐使用POST方式。
-
PUT: 传输文件,报文主体中包含文件内容,保存到对应URI 位置。
-
HEAD: 获得报文首部,与GET 方法类似,只是不返回报文主体。
-
DELETE:删除文件,与PUT 方法相反,删除对应URI 位置的文件。
-
OPTIONS:查询相应URL 支持的HTTP 方法。
-
trace:对可能经过代理服务器传送到服务器上去的报文进行追踪
HTTP 的特点
-
支持客户端/服务器端通信模式。
-
简单方便快速:当客户端向服务器端发送请求时,只是简单的填写请求路径和请求方法即可,然后就可以通过浏览器或其他方式将该请求发送就行了。HTTP 协议比较简单,所以HTTP 服务器的程序规模相对比较小,从而使得
-
通信的速度非常快。
-
灵活:Http 协议允许客户端和服务器端传输任意类型任意格式的数据对象。这些不同的类型Content-Type 标记。
-
无连接:无连接的含义是每次建立的连接只处理一个客户端请求。当服务器处理完
-
客户端的请求之后,并且收到客户的反馈应答后,服务器端立即断开连接,节省传输时间。
-
无状态:指协议对于请求的处理没有记忆功能。无状态意味着如果要再次处理先前的信息,则这些先前的信息必须要重传,这就导致了数据量传输的增加。但是从另一方面来说,当先前的信息服务器不在使用的时候,则服务器的响应将会非常的快。
http 的安全问题
-
通信使用明文不加密,内容可能被窃听
-
不验证通信方身份,可能遭到伪装
-
无法验证报文完整性,可能被篡改
HTTPS 就是HTTP 加上加密处理(通常是SSL 安全通信线路)+认证+完整性保护
HTTPS
作用
-
内容加密:建立一个信息安全通道,来保证数据传输的安全
-
身份认证:确认网站的真实性
-
数据完整性:防止内容被第三方冒充或者篡改
基于https请求的数据传输中用到的技术
-
对称加密算法
-
非对称加密算法
-
散列算法
-
数字证书
HTTP 协议运行在TCP 之上,HTTPS 是运行在SSL/TLS 之上的HTTP 协议,SSL/TLS 运行在TCP 之上
session 什么时候被创建
直到某server端程序(如Servlet)调用HttpServletRequest.getSession(true)这样的语句时才会被创建。
session 何时被删除
-
程序调用HttpSession.invalidate()
-
距离上一次收到客户端发送的session id 时间间隔超过了session 的最大有效时间
-
服务器进程被停止
Cookie 与Session 的区别
-
cookie 数据存放在客户端,用来记录用户信息的,session 数据放在服务器上。
-
正是由于Cookie 存储在客户端中,对客户端是可见的,客户端的一些程序可能会窥探、复制甚至修改Cookie 中的内容。而Session 存储在服务器上,对客户端是透明的,不存在敏感信息泄露的危险。
-
Session 是保存在服务器端的,每个用户都会产生一个Session。如果并发访问的用户非常多,会产生非常多的Session,消耗大量的服务器内存。因此并发访问量极高的网站,是不太可能使用Session 来追踪客户会话的。
-
cookie 的容量和个数都有限制。单个cookie 的容量不能超过4KB,很多浏览器都限制一个站点最多保存20 个cookie,而session 没有此问题。