首先以一个问题开始:我们在日常是如何访问web网站的?
当在浏览器的地址栏输入URL时,我们就能看到需要的web页面了。(初步解释)
Web页面当然不是凭空显示出来的,根据指定的URL,浏览器从服务器那边获取内容和一些资源,像这种通过发送请求来获取服务器资源的浏览器,统称为客户端(client)
而这种web,就是建立在HTTP协议上的。
HTTP位于TCP/IP协议的应用层上(决定了向用户提供应用服务时通信的活动)
这是HTTP协议利用TCPIP协议进行通信时,所经过的分层顺序,分为接收和发送过程
这是数据包的形成过程
下面用一张图来概括各网络协议和HTTP之间的关系
图上可以看到HTTP最终的生效要依赖许多其他的协议
URI:URI就是由某个协议方案表示的资源定位标识符。
URL:就是使用浏览器地址栏输入的网址
URI格式:
HTTP协议使用URI让客户端定位到资源
HTTP协议是用于客户端和服务器之间的通信,规定请求必须是用户发出,而服务器收到则回复响应
Eg:
这个请求内容就是访问服务器上index的页面资源。
而在接收到这段请求之后,服务器会回复一个响应报文:
响应报文由协议版本、状态码,解释原因的短语、可选的响应首部字段和实体主题构成
HTTP协议是不保存状态的协议,不具备保存之前发送过的请求或响应的功能。
虽然HTTP是无状态协议,但为了实现某些功能,引入了cookie技术,这个后面介绍。
下面介绍一些告知服务器请求意图的HTTP方法
GET:获取资源
Eg:
POST:传输实体主体
Eg:
PUT:传输文件
Eg:
HEAD:获得报文首部
Eg:
DELETE:删除文件
Eg:
OPTIONS:询问支持的方法
Eg:
TRACE:追踪路径
CONNECT:要求用隧道协议进行连接
下面是一些HTTP支持的方法:
为了解决TCP连接断开的问题,在之后的HTTP版本中出现了持久连接,它使得多数请求可以以管线化的方式进行发送(能并发发送多个请求,不用一个一个来)
使用cookie的状态管理
详解HTTP报文:
结构:
两种报文的首部内容由请求行、状态行、首部字段、其他四部分构成。
报文主体和实体主体的差异:
HTTP的状态码:
用来告知客户端从服务器端返回的请求结果
2xx 成功
200 ok 表示请求被正常处理
204 No Content 请求处理成功,但返回的响应报文中没有实体的主体部分,一般在只需要客户端往服务器发送信息的情况下使用。
206 Partial Content 表示客户端进行了范围请求
3xx 重定向
301 Moved Permanently
302 Found
303 See Other
304 Not Modified
307 Temporary Redirect
临时重定向 与302有相同的含义,不会从POST变成GET
4xx客户端错误
400 Bad Request
请求错误
401 Unauthorized
请求需要认证
403 Forbidden
请求被服务器拒绝
404 Not Found
找不到资源
5xx 服务器错误
500 Internal Server Error
内部资源出错
503 Service Unavailiable
表明服务器处于停机或超负荷等状态
HTTP首部
HTTP报文由报文首部、空行和报文主题构成
在HTTP请求报文中,报文首部由方法、URI、HTTP版本、HTTP首部字段组成
在HTTP响应报文中,首部由状态码、HTTP版本、HTTP首部字段三部分组成
在这些组成部分中比较重要的是首部字段
首部字段结构:首部字段名:字段值(可以有多个)
首部字段可以分为四种类型:
通用首部字:
请求首部字段:
响应首部字段:
实体首部字段:
End-to-End首部和Hop-by-Hop首部
逐跳首部举例:
下面来展开说说不同类型首部字段
通用首部字段:
Cache-Control
通过指定这个字段的指令,就可以实现操作缓存
Connection
这个首部字段具有两个作用:
控制不再转发给代理的首部字段
管理持久连接
Date
表示创建HTTP报文的日期和时间
Pragma
Trailer
Transfer-Encoding
规定了传输报文主体时采用的编码方式
Upgrade
用于检测HTTP协议及其他协议是否可以用更高版本进行通信
Via
追踪客户端和服务器之间的请求和响应报文的传输路径
经过的各个代理服务器会在Via首部添加自己的信息
Warning
告知用户与缓存相关的问题的警告
为Cookie服务的首部字段
Set-Cookie
关于安全方面的HTTP知识
HTTP主要有以下的不足:
通信使用明文,可能会被窃听
不验证对方身份,有可能遭遇伪装
无法证明报文的完整性,可能遭到篡改
为了解决上述出现或未出现的问题,就有了HTTPS这个东西
HTTP+加密+认证+完整性保护=HTTPS
HTTPS是身披SSL外衣的HTTP
HTTP采用混合加密方式,即采用共享密钥加密和公开密钥加密两者并用的混合加密方式。在交换密钥的环节使用公开密钥加密方式,之后的建立通信交换报文则使用共享密钥加密方式
HTTPS的安全通信机制:
HTTPS这么好,为啥不一直用?
因为会造成cpu资源的占用,也会造成购买证书的开销
如果web只想让特定的人看到,那怎么办?
进行认证
认证核对的信息一般是密码、动态令牌、数字证书、生物认证、IC卡信息等
看一下Basic认证的步骤: