HTTP
HTTP
请求过程
- 建立tcp连接
- web浏览器向web服务器发送请求命令
- web浏览器发送请求头信息
- web服务器应答
- web服务器发送应答头信息
- web服务器向浏览器发送数据
- web服务器关闭tcp连接
报文
请求报文
- 请求行
- 请求头部
- 请求数据
请求行
1.方法字段(严格区分大小写)
- GET 向特定资源发出请求
- POST 向指定资源提交数据进行处理请求
- HEAD
- PUT
- DELETE
- OPTIONS
- TRACE
- CONNECT
http服务器至少应实现GET和HEAD/POST方法,其他方法都是可选的.
GET和POST的区别
- GET后退按钮/刷新无害,POST数据会被重新提交
- GET书签可收藏,POST为书签不可收藏。GET能被缓存,POST不能缓存
- GET历史参数保留在浏览器历史中。POST参数不会保存在浏览器历史中
- GET对数据长度有限制 POST无限制
- GET只允许ASCII字符,POST没有限制,也允许二进制数据
- GET安全性较差
- GET从服务器获取数据(数据查询),POST向服务器传送数据(数据的增删改)
2.URL字段
3.HTTP协议版本
响应报文
- 状态行
- 响应头部
- 实体
状态行
- 协议版本
- 状态码
- 原因短语
状态码
1XX:指示信息,表示请求已接收,继续处理
2XX:成功,表示请求已成功接收、理解、接受
- 200 响应成功
3XX:重定向,要完成请求必须进行更进一步的操作
- 302 跳转,跳转地址通过响应头中的location属性指定
4XX:客户端错误,请求有语法错误或请求无法实现
- 400 客户端请求有语法错误,不能被识别
- 403 服务器理解请求客户端的请求,但是拒绝执行此请求
- 404 服务器无法根据客户端的请求找到资源(网页)
- 405 某个请求所针对的资源不支持对应的请求方法
5XX:服务器端错误,服务器未能实现合法请求
- 500 服务器内部错误,无法完成请求
- 501 服务器不认识或不支持对应的请求方法
会话状态
HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话
cookie
- 把用户的数据写给用户的浏览器
- 应用场景:判断是否登录,不同页面的购物车添加商品,但要考虑安全性
- 会话cookie周期:如果不设置过期时间,则表示cookie生命周期为浏览器会话期间,关闭浏览器,cookie消失
- 持久cookie(存放在客户端硬盘):在设置cookie时候设置的那个保存时间
session
- 把用户的数据写到用户独占的session对象中
- 以tomcat为例,session保存在服务器的内存中/也可以保存在文件,数据库,memcache,redis
- session id保存在cookie中
- 生命周期
创建:第一次访问某个jsp或者servlet时,服务器会为当前会话创建一个sessionid
活动:除非本次会话所有页面都关闭后再重新访问,否则不会创建新会话
销毁:tomcat中session默认30分钟(可以设置),调用session invalidate方法,服务器重启;
cookie与session的区别
- session是存储服务器端,cookie是存储在客户端
- cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session
- session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
使用场景
- cookie 自动登录:Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式
- session 购物车:Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;
https
http缺点
- 通信使用明文(不加密), 内容可能会被窃听
- 不验证通信方的身份, 因此有可能遭遇伪装
- 无法证明报文的完整性, 所有有可能已遭篡改
定义
- HTTPS并非是应用层的一种新协议. 只是HTTP通信接口部分用SSL(Secure Socket Layer)和TLS (Transport Layer Security) 协议替代而已
- HTTP直接和TCP通信, 当使用SSL时, 演变成了先和SSL通信, 再由SSL和TCP通信了, 简而言之, 所谓HTTPS, 其实就是身披SSL协议的这层外壳的HTTP
HTTP和HTTPS的区别
- https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用
- http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议
- http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443
- http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全
工作流程
-
客户端发起HTTPS请求,连接到server的443端口
采用HTTPS协议的服务器必须要有一套数字证书,其实就是一对公钥和私钥
-
服务端的配置
就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等
-
传送证书
由客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题
如果证书没有问题,那么就生成一个随机值,然后用证书对该随机值进行加密,就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容
-
客户端解析证书
这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了
-
客户端向服务器传送加密信息
服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密
所谓对称加密就是,将信息和私钥通过某种算法混在一起,这样除非知道私钥,不然法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全
-
服务端解密信息
-
服务端向客户端传输加密后的信息
-
客户端解密信息