http相关内容
http基础概念和依赖协议
http,超文本传输协议,一种无状态连接协议,处于TCP/IP协议族中的应用层,和Http同处于一层的协议有DNS协议(主要负责域名解析的协议),http协议还依赖TCP(传输层),依赖IP协议(网络层)和物理设备和驱动(链路层)。
一个常见http请求的执行流程,比如浏览器输入 www.baidu.com 整个执行流程
- 首先通过DNS协议查询 www.baidu.com 地址的IP地址
- 浏览器根据 www.baidu.com ,IP地址,GET请求方式,还有一些请求头信息
- 将http封装的请求数据包,通过TCP协议发送数据包,TCP通过三次握手获取客户端-服务器连接,整个数据包有可能不是一次性发送到服务器端,可能切分成很多合适的大小的数据包进行发送,每发送一个数据包,发送方都需要接收方返回一个确认码来确保这个数据包是到达接收方的,如果在发送某一个数据包没有接收到确认码的话,会进行重发,直到断开超时断开
- 每一个TCP切分好数据包,在通过IP协议,在进行包装;主要作用是确保数据包到达目标服务器
- 服务器接收到所有IP数据包,然后拆包成TCP数据包,然后根据TCP数据包拆包解析成http数据包,然后发现客户端GET请求,获取 www.baidu.com 资源,然后将该url对应的资源进行封装成数据包,再通过TCP协议,IP协议封装然后到达客户端
- 最后客户端获取到http请求返回数据包解析成指定的文件,然后对这些文件进行渲染样式之后就变成请求的页面了
http两个重要特性
无状态
无状态指的是http每一个请求都是独立的,没有任何关联,也是因为这个特性所以http协议推出了cookie的技术来进行会话管理的实现
单向性
单向性是指的是,请求只能是客户端主动发起请求,然后服务器端进行响应,http请求无法从服务器端直接发起,客户端进行响应,也是因为这个原因所以后来才有的WebSocket的技术来补充http协议的不足
http请求方式
请求方式 | 描述 |
---|---|
GET | 请求指定的页面信息,并返回实体主体 |
HEAD | 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 |
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改 |
PUT | 从客户端向服务器传送的数据取代指定的文档的内容 |
DELETE | 请求服务器删除指定的页面 |
CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器 |
OPTIONS | 允许客户端查看服务器的性能 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断 |
http常见请求头标签
请求头 | 描述 |
---|---|
Accept | 通知服务器,目前客户端可以接受的数据类型 |
Accept-Language | 客户端,目前可以接受的字符集类型 |
Accept-Encoding | 客户端,可以接受的压缩方式 |
host | 用来区分同一IP下的,不同应用 |
Upgrade-Insecure-Requests | 指的是浏览器可以支持,http 相关的请求自动升级成 https |
Connection | http1.1之后,这个标签的值通过是keep-alive,意思多个http请求,公用一个TCP连接通道 |
Cache-Control | 缓存控制,max-age=0的时候,意思就是不缓存 |
Cookie | 服务器提供用来记录会话,或者存储一下简单数据的键值对 |
User-Agent | 客户端目前所处环境信息,比如系统信息,浏览器信息等等之类 |
Referer | 查看请求发起源 |
http常见响应头标签
响应头 | 描述 |
---|---|
Cache-Control | 控制缓存 |
Connection | 和请求头里是一样的 |
Content-Encoding | 响应报文压缩方式 |
Content-Type | 响应文件类型 |
Date | 响应报文创建时间 |
Server | 服务器类型 |
Transfer-Encoding: chunked | 分块传输标识 |
常见响应码
响应码 | 描述 |
---|---|
2xx | 成功 |
3xx | 重定向 |
4xx | 客户端错误 |
5xx | 服务器错误 |
有一个比较特殊的响应码304响应码,该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况;附带条件就比如说,GET请求的时候,请求中包含了If-Match, If-Modified-Since, If-None-Match等等是If开头的请求体的时候,然后服务器又不满足条件的时候,就返回304
Cookie与会话管理
cookie指的是服务器发送给客户端的一个键值对的数据;cookie主要有以下几个属性,有一点必须说明一下,一旦cookie被服务器发送给客户端,那么只能是客户端进行管理,服务器端是服务管理客户端的cookie内容的,唯一的办法就是通过发送相同的cookie来进行原来的cookie进行替换,来达到删除的效果
- key-value,cookie主要内容
- expires属性,设置cookie有效期时间,如果不设置的话,那么默认一般来说,就是最大生命周期是关闭浏览器的时间
- path属性,用来限制cookie发送的文件目录
- domain属性,通常来说,可以不用设置,默认就是当前域名;但是如果要达到多域名共享会话的时候,那可能需要手动设置了,比如deal.isuwang.com和personal.isuwang.com需要共享会话的,那么cookie的domain就需要设置成 .isuwang.com
- secure属性,用来限制cookie只在是https安全连接下才发送cookie,这样做的好处,就是防止cookie劫持的情况出现
- HttpOnly属性,用来限制客户端恶意修改cookie的内容,有这个属性的cookie,就无法在js中修改,只能由服务器重新进行设置值;但是实际上这样的cookie还是可以修改的,chrome的客户端有一些cookie相关的插件也是可以修改这样的cookie
会话管理指的是,记录客户端-服务器之间的通信的状态,但是由于http是一种没有没有连接状态的一种通信协议,每一次http请求都是一个全新的请求,所以两次http请求无法共享一个上下文来记录会话,但是大部分服务器都是通过cookie来进行会话管理的,比如说Tomcat是采用一个JSESSIONID的cookie来进行会话控制的,每一个浏览器在访问是Tomcat的时候,Tomcat都会给客户端提供一个JESSIONID的cookie,这个cookie每一个客户端是不会重复的,那么服务器端,可以根据JESSIONID来创建一块单属于特定客户端的内存区域,来存放客户端-服务器之间会话内容
http与https
由于http,明文传输,通信通道没有加密,等等因素,导致http是一个不安全的协议,于是就有了https
https = http + 加密通道(SSL)+ 不对称加密/解密方式 + 证书
SSL加密通道
SSL:介于http协议和TCP协议之间一个协议,是一个安全的传输协议
不对称加密/加密方式
在Https中不对称加密的做法是,通过证书中的公钥进行加密,私钥只有服务器端才有持有,也就说只有服务器端才能解密客户端的请求
证书
证书的主要内容包括三部分:1. 服务器公钥; 2. 服务器的相关信息(比如IP地址,比如认证信息等等); 3. 证书颁发机构数字签名
公钥的作用:用来加密请求信息
服务器相关信息作用:用来验证服务器信息
数字签名作用:用来验证证书的有效期
总的来说,证书的作用就是,用来建立SSL加密通道,验证服务器相关信息,加密客户端的请求
https请求流程
https主要是http中http请求,和建立TCP连接通道之间额外加上了SSL通道;主要是多了一下几个步骤
- 从服务器获取上证书
- 通过证书上的数字签名找到第三方认证机构校验证书的真实性
- 校验通过后,通过借助证书建立SSL连接通道,对需要发送的http请求进行加密
Http2.0
作为http2.0的时代,首先第一点需要说明,http2.0不兼容http1.x版本;改版之后的新特性有
- http2.0首部压缩;比如说访问 www.baidu.com 需要加载大量的资源,比如目标页面,页面样式,页面js等等,还有一些的图片;在http2.0下这些资源的加载可以复用请求头,从而达到请求头压缩的效果,减少头部数据的传输
- 所有http2.0请求都在一个TCP链接上,这样做的好处,减少服务器创建连接开销;TCP链接使用效率提高
- http2.0请求优先级设定,可以让客户端首先加载重要的资源
- http2.0服务器主动推送,由于是http1.x时代,所有的请求只能是由客户端发起,然后服务器再进行响应,这样导致在协议层面就限制了http1.x无法实现服务器主动推送数据的动作
- 等等新特性。。。