-
一、HTTP协议 1、什么是HTTP
2、HTTP请求内容-
"http" ,又被称为超文本传输协议,是互联网上应用最为广泛的一种网络协议。
-
是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。
-
是用于从万维网服务器传输超文本到本地浏览器的传送协会。
-
基于TCP的应用层协议,它不关心数据传输的细节,HTTP是一个基于 请求 与 响应模式的、无状态的、应用层协议,只有遵循统一的HTTP请求格式,服务器才能正确解析客户端发的请求,同样地,服务器遵循统一的响应格式,服务器才得以正确解析不同网站发过来的响应
HTTP 请求由请求行、请求头、空行、请求体组成
- **请求行:**请求方法 + URL ++ 协议版本
HTTP响应格式与请求的格式相似,也是由响应行、响应头、空行、响应体组成
- **响应行:**HTTP 版本号 + 响应状态码 + 状态说明
- **响应头:**响应头与请求头对应,是服务器对该响应的一些附加说明
- **响应体:**他才是真正的响应数据,这些数据其实就是网页的HTML源代码
缺少安全性,http协议信息传输是通过明文的方式传输,不做任何加密,容易被中间人恶意篡改
二、HTTPS协议 1、什么是HTTPS协议- HTTPS 的全称是(Hypertext Transfer Protocol Secure),它是用来在计算机网络上的两个端系统之间进行 安全的交换信息 ,它相当于在HTTP的基础上加了一个Secure安全的字眼
- HTTPS是在一个计算机世界里专门在两点之间安全的传输文字、图片、音频、视频等超文本数据的约定和规范
- HTTPS是HTTP协议的一种扩展,它本身并不保证传输的安全性,在HTTPS中,使用 传输层安全性(TLS)或 安全套接字层(SSL)对通信协议进行加密
- HTTP + SSL(TLS) = HTTPS
- 加密,HTTPS通过对数据加密来使其免受窃听者对数据的监听
- 数据一致性,数据在传输的过程中不会被窃听者锁修改,用户发送的数据会完整的传输到服务端
- 身份认证,是指确认对方的真是身份
三、HTTPS解决了HTTP的什么问题除了协议名和默认端口号外,HTTPS协议在语法,语义上和HTTP一样,关键在于这个s也就是SSL/TLS
由于HTTP天生明文传输的特性,在HTTP的传输过程中,任何人都可能从中截取、修改或者伪造请求发送,所以可以认为HTTP是不安全的;
-
在HTTP的传输过程中不会验证通信方的身份,因此HTTP信息交换的双方可能会遭到伪装,也就是没有用户验证;
-
在HTTP的传输过程中,接收方和发送方并不会验证报文的完整性
TLS 是 SSL 的后续版本,他们是用于在互联网两台计算机之间用于身份验证和加密的一种协议
SSL 是一个独立的协议,不只有 HTTP 可以使用,其他应用层协议也可以使用,比如 SMTP(电子邮件协议)、Telnet(远程登录协议) 等都可以使用。
TLS 用于两个通信应用程序之间提供保密性和数据完整性。TLS 由记录协议、握手协议、警告协议、变更密码规范协议、扩展协议等几个子协议组成,综合使用了对称加密、非对称加密、身份认证等许多密码学前沿技术
-
-
状态码是由3位数组成,第一个数字定义了响应的类别,且有五种可能取值:
- 1xx:指示信息——般表示请求已接收,继续处理。
- 2xx:成功——表示已经成功被接收、理解、接收。
- 3xx:重定向——要完成请求必须进行更进一步的操作。
- 4xx:客户端错误——请求有语法错误或请求无法实现。
- 5xx:服务器端错误——服务器未能实现合法的请求。
-
200(成功):请求成功,通常服务器提供了需要的资源
-
204(无内容):服务器成功处理了请求,但没有返回任何内容
-
301(永久移动):请求的网页已经移动到新的位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新的位置。
-
302(临时移动):服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
-
304(未修改):自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容
-
400(错误请求):服务器不理解请求的语法(一般为参数错误)。
-
401(未授权):请求要求身份验证。对于需要登录的网页,服务器可能返回此响应。
-
403(禁止):服务器拒绝请求。(一般为客户端的用户权限不够)
-
404(未找到):服务器找不到请求的网页
-
422(无法处理):请求格式正确,但是由于含有语义错误,无法响应
-
500(服务器内部错误):服务器遇到错误,无法完成请求
-
- 浏览器地址输入URL并回车
- 浏览器查找当前URL是否存在缓存,并比较缓存是否过期
- DNS解析URL对应的IP
- 根据ip建立TCP连接(三次握手)
- 发送http请求
- 服务器处理请求,浏览器接收HTTP响应
- 浏览器解析并渲染页面
- 关闭TCP连接
-
这里主要展示 POST 和GET 的区别
- GET在浏览器回退时是无害的,而POST会再次提交请求。
- GET产生的URL地址可以被Bookmark,而POST不可以。
- GET请求会被浏览器主动cache,而POST不会,除非手动设置
- GET请求只能进行url编码,而POST支持多种编码方式。
- GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
- GET请求在URL中传送的参数是有长度限制的,而POST没有
- 对参数的数据类型,GET只接收ASCII字符,而POST没有限制
- GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
- GET参数通过URL传递,POST放在Request body中
重点区别: GET 会产生一个TCP数据包,而POST会产生两个TCP数据包。
- 对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200
- 而对于POST,浏览器先发送header,服务器响应100 continue,浏览器在发送data,服务器响应200
-
在AJAX实际运行当中,对于访问XMLHttpRequest(XHR)时并不是一次完成的,而是分别经历了多种状态后取得的结果,对于这种状态在AJAX中共有5种,分别是:
0 - (未初始化)还没有调用send()方法
1 - (载入)已调用send()方法,正在发送请求
2 - (载入完成)send()方法执行完成,
3 - (交互)正在解析响应内容
4 - (完成)响应内容解析完成,可以在客户端调用了
对于上面的状态,其中“0”状态是在定义后自动具有的状态值,而对于成功访问的状态(得到信息)我们大多数采用“4”进行判断
-
cookie和session的区别 cookie
cookie是访问某些网站以后在本地存储的一些网站相关的信息
cookie中一般包括如下主要内容:
- key:设置的cookie的key
- value:key对应的value
- max_age/expire_time:设置cookie的过期时间
- domain:该cookie在哪个域名中有效。一般设置子域名,比如cms.example.com。
- path:该cookie在哪个路径下有效
例如:我们登录某一个网站时需要输入用户名和密码,如果用户名和密码保存为cookie,则下次我们登录该网站的时候就不需要在输入用户密码了
sessionsession是存在服务器的一种李永来存放用户数据的类HashTable结构。
浏览器第一次发送请求时,服务器自动生成了—HashTable和—SessionID来唯一标识这个HashTabe,并将其通过响应发送到浏览器。浏览器第二次发送请求会将前一次服务器响应中的SessionID放在请求中一并发送到浏览器上,服务器从请求中提取出sessionID,并和保存的所有sessionID进行对比,找到这个用户对应的HashTable。
例如:我们浏览一个购物网站,用户将部分商品添加到购物车中,许久以前许多网站都是用服务端session存储购物车内容(现在基本都是用数据库了),就用到了session存储这部分信息。
区别: 1. 存储位置不同- cookie的数据信息存放在本地。
- session的数据信息存放在服务器上
- cookie存储的容量较小,一般 <= 4kb
- session存储容量大小没有限制(但是为了服务器性能考虑,一般不能存放太多数据)。
- cookie可以长期存储,只要不超过设置的过期时间,可以一直存储
- session在超过一定的操作时间(通常为30分钟)后会失效,但是当关闭浏览器时,为了保护用户信息,会自动调用session.invalidate()方法,该方法会清除掉session中的信息
- cookie存储在客户端,所以可以分析存放在本地的cookie并进行cookie欺骗,安全性较低。
- session存储在服务器上,不存在敏感信息泄露的风险,安全性比较高。
- cookie支持跨域名访问。例如:所有a.com的cookie在a.com下都能用。
- session不支持跨域访问。例如:www.a.com的session在api.a.com下不能用
- cookie保存在客户端,不占用服务器资源
- session是保存在服务器端,每个用户都会产生一个session,session过多的时候会消耗服务器资源,所以大型网站会有专门的session服务器
- cookie中只能保管ASCII字符串,并需要通过编码方式存储为Unicode字符或者二进制数据
- session中能够存储任何类型的数据,包括且不限于string,integer,list,map等



