从输入网址到获得页面的过程
- 浏览器解析URL,查询 DNS,检查域名是否在缓存中(浏览器自身的DNS缓存、操作系统的DNS缓存、本地的hosts文件和向本地DNS服务器进行查询)。如果 DNS 服务器和主机在同一个子网内,系统会按照 ARP 过程对 DNS 服务器进行 ARP查询,如果在不同的子网,系统会按照 ARP 过程对默认网关进行查询;
- 浏览器获得域名对应的IP地址以后,向服务器请求建立链接,发起三次握手;
- TCP/IP链接建立起来后,浏览器向服务器发送HTTP请求;
- 服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理结果及相应的视图返回给浏览器;
- 浏览器对HTML、CSS、JS进行解析,构建DOM树,渲染视图;
- 浏览器根据其请求到的资源、数据渲染页面,最终向用户呈现一个完整的页面。
Session与Cookie
Cookie:
Cookie是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。Cookie 使基于无状态的 HTTP 协议记录稳定的状态信息成为了可能。
Session:
Session 代表着服务器和客户端一次会话的过程。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当客户端关闭会话,或者 Session 超时失效时会话结束。
区别:
- 作用范围不同,Cookie 保存在客户端(浏览器),Session 保存在服务器端;
- 存取方式不同,Cookie 只能保存 ASCII,Session 可以存任意数据类型;
- 有效期不同,Cookie 可设置为长时间保持,Session 一般失效时间较短,客户端关闭或者 Session 超时都会失效;
- 隐私策略不同,Cookie 存储在客户端,比较容易遭到不法获取,Session 存储在服务端,安全性相对 Cookie 要好一些;
- 存储大小不同, 单个 Cookie 保存的数据不能超过 4K,Session 可存储数据远高于 Cookie。
HTTP状态码
- 2xx状态码:操作成功。200 OK;
- 3xx状态码:重定向。301 永久重定向;302暂时重定向;
- 4xx状态码:客户端错误。400 Bad Request;401 Unauthorized;403 Forbidden;404 Not Found;
- 5xx状态码:服务端错误。500服务器内部错误;501服务不可用;
HTTP报文
HTTP报文有请求报文和响应报文两种,请求报文:从客户向服务器发送请求报文;响应报文:从服务端到客户的回答。HTTP报文都由开始行、首部行、实体主体三部分组成。
开始行
请求报文
- 由 方法、[空格]、URL、[空格]、HTTP版本 组成。
响应报文
- 由 HTTP 版本、[空格]、状态码组成。
首部行
- 是用来说明浏览器、服务器或报文主体的一些信息。
- 可以有好几行,也可以不使用
- 每个首部行都是由 首部字段名、[空格] 和 值 组成
- 每个首部行在结束地方都有
CRLF
(『回车』和『换行』符)
实体主体
- 在请求报文中,一般是 post/put 提交的表单信息。与首部行之间有
CRLF
即空行。
- 在请求报文中,一般是 post/put 提交的表单信息。与首部行之间有
HTTP与HTTPS的区别
HTTP
- 互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
HTTPS
- 以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
工作原理:
- 客户使用HTTPS的URL访问Web服务器,要求与Web服务器建立SSL连接。
- Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
- 客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
- 客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
- Web服务器利用自己的私钥解密出会话密钥。
- Web服务器利用会话密钥加密与客户端之间的通信。
区别:
- HTTPS协议需要到ca申请证书,一般免费证书较少,因而需要一定费用;
- HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议;
- HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443;
- HTTP的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全。
对称加密和非对称加密在HTTPS的应用
对称加密算法:发送方和接收方需要持有同一把密钥,发送消息和接收消息均使用该密钥。相对于非对称加密,对称加密具有更高的加解密速度,但双方都需要事先知道密钥,密钥在传输过程中可能会被窃取,因此安全性没有非对称加密高。
非对称加密算法:接收方在发送消息前需要事先生成公钥和私钥,然后将公钥发送给发送方。发送放收到公钥后,将待发送数据用公钥加密,发送给接收方。接收到收到数据后,用私钥解密。在这个过程中,公钥负责加密,私钥负责解密,数据在传输过程中即使被截获,攻击者由于没有私钥,因此也无法破解。非对称加密算法的加解密速度低于对称加密算法,但是安全性更高。
HTTPS中同时使用了对称加密算法和非对称加密算法。对于一个完整的HTTPS请求过程:
1.首先,浏览器请求一个URL,找到服务器,向服务器发起一个请求。服务器将自己的证书(包含服务器公钥S_PuKey)、对称加密算法种类及其他相关信息返回客户端;
2.浏览器检查CA证书是不是由可以信赖的CA机构颁发的,确认证书有效和此证书是此网站的。如果不是,给客户端发一个警告,询问是否继续访问;
3.如果是,客户端使用公钥加密了一个随机对称密钥,包括加密的URL一起发送到服务器;
4.服务器用自己的私匙解密你发送的钥匙,然后用这把对称加密的钥匙给你请求的URL链接解密;
5.服务器用你发的对称钥匙给你请求的网页加密,你也有相同的钥匙就可以解密发回来的网页了。