http:超文本传输协议
URL:统一资源定位符,表示资源在互联网上的位置
URI:统一资源标识符(URL是URI的子集)
URI的格式:
http是不保存状态的协议,不会保存之前的请求和响应报文有关的信息。为了保存用户的状态,使用了cookies。服务端会把cookies写在响应报文中,并且发送一个set_cookies的报文,客户端会自己保存cookies,之后发送请求报文的时候会把cookies发过去。
请求报文的方法:
get:返回资源
post:传输信息
put:传输文件
head:获取报文首部
delete:删除文件
option:询问指定的URI支持的方法
trace:追踪路径
一、状态码:
200 OK:处理成功
204 No Content:请求处理成功,但是没有资源返回,用于客户端向服务端发送信息,服务端不需要向客户端发送信息
206 Patial Content:客户端进行了范围请求,服务端成功响应
301Moved Permanently:永久性重定向,请求的资源的URI被重新分配
302 Found:暂时重定向,该资源的URI可能还会发生变化
303 See Other:跟302相似,并且要求使用get方法来访问
304 Not Modified:资源被找到,但是不满足请求的要求
307 Temporary Redirect:临时重定向
400 Bad Request:请求报文存在语法错误
401 Unauthorized:请求报文需要通过http认证,若是第二次发送该报文,说明认证失败
403 Forbidden:服务器拒绝了客户端对URI的访问
404 Not Found:服务器请求的URI没有资源
500 Internal Server Error:服务器执行请求发生错误
503 Service Unavailable: 服务器处于超负荷或正在停机维护
二、web服务器:处理http请求的服务端
客户端向服务端发送请求,中间会经过代理服务器
源服务器:具有数据的服务器
代理服务器:转发客户端的请求给对应的源服务器,有两种分类方法分为缓存代理、透明代理。缓存代理在转发源服务器的响应报文的时候会将数据存在本地缓存
网关和代理类似,网关可以把http请求转成其他通信协议。
三、http首部:
首部字段由首部字段名和字段值构成,通用首部字段请求报文和响应报文都会使用。
通用首部字段:
cache control:控制缓存的行为
1)no cache:为了防止从缓存中返回过期的资源。请求报文包含no cache,表明不接受代理响应缓存的资源。响应报文包含no cache表明代理服务器不能对响应进行缓存。
2)no store:暗示请求、响应有机密信息,缓存代理不能缓存
connection
1)+指定的字段名:控制哪一个字段不用发给源服务器
2)close:表明断开连接
date:创建报文的时间
upgrade:能否使用其他的协议版本
via:记录中间代理服务器
请求首部字段:
Accept:可以接受的文件类型,可以加上权重(0~1),优先发送权重最高的
Host:请求资源的主机名和端口号,必须包含,发送报文的时候请求行中的URI会被IP替换掉,可能同一个IP下有多个主机,因此需要加入host来指明
Max-Forwards:类似TTL,每次经过一个代理服务器都会-1
响应首部字段:
Accept-Range:bytes能够接受请求范围,none不能接受请求范围;
Etag:每一个资源都会被服务器分配Etag,
实体首部字段:
四、https
http的缺点:
1)使用明文通信,可能会被窃听
2)不验证对方的身份信息
3)不验证报文的完整性,可能被篡改
HTTP+ 加密 + 认证 + 完整性保护=HTTPS
https连接建立过程:
客户端:发送SSL连接请求报文,报文中包含了客户端中的SSL版本、加密方式等
服务端:1)接收到后回传一个SSL报文,报文中包含了服务端中的SSL版本、加密方式等
2)发送公钥证数
3)发送Server Hello Done 报文表明协商阶段结束
客户端:1)接收到公钥证书后,生成一个密钥,用公钥加密该密钥,发送给服务端
2)在发送一个报文,声明使用之前发送的密钥进行加密
3)发送给FINISH报文,包含了到现在为止的所有校验和,
服务端:1)接收到密钥后,用公钥解密,发送一个报文声明使用该密钥进行加密
2)发送给FINISH报文,包含了到现在为止的所有校验和,
SSL连接建立成功,可以开始http通信
https比http慢:
1)传输慢
2)需要消耗CPU等内存资源,导致处理速度变慢
五、认证:
1)basic认证:
客户端:发送一个http请求
服务端:返回401状态码,需要用户认证
客户端:输入用户名密码进行验证
服务端:验证用户名和密码,正确则返回请求的资源,否则返回401
2)DIGEST认证:
客户端:发送一个http请求
服务端:返回401状态码以及一个质询码
客户端:根据质询码生成响应码,返回响应码和首部摘要
服务端:确认验证信息的正确性,正确则返回请求的资源,否则返回401
3)SSL客户端认证:
客户端:发送一个http请求
服务端:发送 Certificate Request 报文,要求客户端提供客户端证书和密码
客户端:将证书和密码发送给服务器
服务端:验证客户端证书,通过后发送公钥证书,
4)基于表单的认证