HTTP/HTTPS
HTTP简介
- HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种应用层的网络传输协议,所有的WWW文件都必须遵守这个标准。
- HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
- http协议无状态,无连接。无连接的含义就是限制每次连接只处理一个请求,收到应答后即断开。但据说这个是http1.0。
- 1.1相比1.0 引入 keep-alive:长链接。
- 2.0 升级成本太高,推广难。
HTTP协议概述
HTTP协议:超文本传输协议
,是基于TCP
的协议,默认为80端口
。它的作用是用来规定客户端和服务器的数据传输格式。是一种用于请求与响应
模式的、无状态
、无连接
的应用层协议。由于HTTP协议是一种请求-响应模式,所以一般需要关注HTTP请求
和HTTP响应
。
超文本传输协议HTTP主要特点
- 支持客户/服务器模式
- 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
- 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
- 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
- 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
HTTP请求结构
HTTP请求的报文分为四部分:请求行
、请求头
、空一行
、请求体
,其中前三个是所有HTTP请求都有的部分,请求体不是所有的HTTP请求都有(例如GET请求没有请求体
)。下图为一个HTTP请求的报文信息(Fiddler抓包):
请求行:请求行由 请求方法
、统一资源定位符(URL)
、HTTP协议及版本
。
请求方法
:HTTP请求中,有八种请求方式,分别为GET、POST 、HEAD、OPTIONS、PUT、DELETE、TRACE 、CONNECT
。其中最后常用的就是GET、POST请求方法。统一资源定位符(URL):统一资源定位符用于描述网上的资源,格式如下:协议://host[:port#]/path/../[?query-string]
HTTP协议及版本
请求头:包含若干个属性,格式为“属性名:属性值”,服务端根据此获取客户端的信息。下图为常见的请求头及作用,还可以自定义请求头。
空一行:发送回车符和换行符,
通知服务器以下不再有请求头
。请求体:即为请求参数,通常为以键值对的形式数据。一般在POST请求中才有请求体。
HTTP响应结构
HTTP响应的报文分为四部分:状态行
、响应头
、空一行
、响应体
,其中前三个是所有HTTP响应都有的部分,响应体不是所有的HTTP响应都有。下图为一个HTTP响应的报文信息(Fiddler抓包):
状态行:状态行由 协议及版本
、状态码
、状态码解释
协议及版本
:通常为HTTP/1.1。状态码
:常用状态码根据数字大小可以分为以下几大类。常用的响应状态码为:200:请求成功、302:重定向、403:服务器拒绝请求、404:服务器找不到请求的网页、503:服务不可用
。描述
:即为响应信息的描述。响应头:响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。
空一行:发送回车符和换行符,代表后面不再有响应头。
响应体:响应的消息体。
请求/响应的步骤
- 客户端连接到Web服务器
- 发送HTTP请求
- 服务器接受请求并返回HTTP响应
- 释放连接TCP连接
- 客户端浏览器解析HTML内容
在浏览器地址栏键入URL,按下回车之后经历的流程
- DNS解析
- TCP连接
- 发送HTTP请求
- 服务器处理请求并返回HTTP报文
- 浏览器解析渲染页面
- 连接结束
HTTP状态码
五种可能的取值:
- 1xx:指示信息–表示请求已接收,继续处理
- 2xx:成功–表示请求已被成功接收、理解、接受
- 3xx:重定向–要完成请求必须进行更进一步的操作
- 4xx:客户端错误–请求有语法错误或请求无法实现
- 5xx:服务器端错误–服务器未能实现合法的请求
常见状态码
- 200 OK:正常返回信息
- 400 Bad Request:客户端请求有语法错误,不能被服务器所理解
- 401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
- 403 Forbidden:服务器收到请求,但是拒绝提供服务
- 404 Not Found:请求资源不窜在,eg,输入了错误的URL
- 500 Internal Server Error:服务器发送不可预期的错误
- 503 Server Unabailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常
GET请求和POST请求的区别
从三个层面来解答:
HTTP报文层面:GET将请求信息放在URL(有长度限制),POST放在报文体重
数据库层面:GET符合幂等性和安全性,POST不符合
其他层面:GET可以被缓存、被存储,而POST不行
Cookie和Session的区别
Cookie简介
- 由服务器发给客户端的特殊信息,以文本的形式存放在客户端
- 客户端再次请求的时候,会把Cookie回发
- 服务器接收到后,会解析Cookie生成与客户端相对的内容
Cookie的设置以及发送过程
Session简介
- 服务器端的机制,在服务器上保存的信息
- 解析客户端请求并操作session id,按需保存状态信息
Session的实现方式
- 使用Cookie来实现
- 使用URL回写来实现
区别
- Cookie数据存放在客户的浏览器上,Session数据放在服务器上
- Session相对于Cookie更安全
- 若考虑减轻服务器负担,应当使用Cookie
HTTP协议 无状态、无连接特点及解决方案
HTTP协议是一个无状态
、无连接
的协议。那么何为无状态、无连接,以及该特点的优势及所带来的问题。
无状态:
含义
:- 对事务处理没有记忆能力,服务器不知道客户端是什么状态,给服务器发送HTTP请求之后,服务器回应之后,不会有任何记录
- 每个请求都是独立的;
优点
:释放服务器压力
。缺点
:服务器处理后续请求,需要重传。例如登录系统后,如果不记录登录的相关信息,后续进行添加购物车操作的时候,需要登录的相关信息。解决方案
:Cookie
:将前面的请求信息保存在一个临时位置。cookies值存在浏览器
里,关闭浏览器后被删除,也可以手动去删除。Session
:可以理解为永久的cookie值,保存在服务器
上,并传递给客户端,并保存在内存中。问题:资源占用,session超时时间,清除session ID。
无连接:
含义
:- 限制每次连接只处理一个请求;
- 服务器处理客户端的请求、并接受客户端的应答后,即断开连接;
初衷
:用户量(十万、上百万)页面请求、单个用户间歇性大(很长时间上没有交互),有突发性、瞬时性。数据没有关联,导致资源浪费,从而服务器压力很大。设计
:从而设计为处理完请求后,释放连接。问题
:网页越来越复杂了,页面中有很多图片,如果每次都要建立一次TCP连接,效率就会很低。解决方案
:connection响应头字段值 Keep-Alive 表示保持tcp连接不关闭,不会永久保持连接,服务器可设置
HTTPS协议详解
HTTP协议存在的问题:发送的数据都是明文的,存在第三方窃听,截取数据包、伪装客户端的情况,存在安全隐患。
HTTPS协议:超文本传输安全协议
,是以网络安全为目标的HTTP通道,简单来讲就是HTTP的安全版。它加密数据并确保其机密性,可保护用户在网站交互时免于窃取个人信息及计费数据。
可以理解为:(1)HTTPS=HTTP+SSL
(2)HTTPS=HTTP+加密+身份认证+完整性
。其中加密:密钥;身份认证
: 证书(申请)双向认证
; 完整性保护:哈希算法
计算一个hash值,验证消息的完整性 摘要=摘要 保证数据没有被篡改 ;
HTTP+SSL
HTTPS之SSL连接详解
HTTP和HTTPS的区别及协议区别
SSL(Security Sockets Layer,安全套接层)
- 为网络通信提供安全及数据完整性的一种安全协议
- 是操作系统对外的API,SSL3.0后更名为TLS
- 采用身份验证和数据加密保证网络通信的安全和数据的完整性
扩展:
- SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议。
- TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议。
加密方式
- 对称加密:加密和解密都是用同一种密钥;同一个密钥,效率高,不安全
- 非对称加密:加密使用的密钥和解密使用的密钥是不相同的;加密和解密密钥不同,效率低,安全。密钥分为公钥(Public Key)和私钥(Private Key)。区块链技术
- 非对称加密算法的密匙是通过一系列算法获取到的一长串随机数,通常随机数的长度越长,加密信息越安全。通过私钥经过一系列算法是可以推导出公钥的,也就是说,公钥是基于私钥而存在的。但是无法通过公钥反向推倒出私钥,这个过程的单向的。
- 私钥主要用于接收方推算公钥,解密发送方的信息。
- 哈希算法:将任意长度的信息转换为固定长度的值,算法不可逆;MD5、SHA加密
- 数字签名:证明某个消息或者文件是某人发出/认同的;CA 颁发证书
HTTPS数据传输流程
- 浏览器将支持的加密算法信息发送给服务器
- 服务器选择一套浏览器支持的加密算法,以证书的形式回发浏览器
- 浏览器验证证书合法性,并结合证书公钥加密信息发送给服务器
- 服务器使用私钥解密信息,验证哈希,加密响应消息回发浏览器
- 浏览器解密响应消息,并对消息进行验证,之后进行加密交互数据
区别
- HTTPS需要到CA申请证书,HTTP不需要
- HTTPS密文传输,HTTP明文传输
- 连接方式不同,HTTPS默认使用443端口,HTTP使用80端口
- HTTPS=HTTP+加密+认证+完整性保护,较HTTP安全
HTTPS真的很安全吗?
那倒未必:
- 浏览器默认填充http://,请求需要进行跳转,有被劫持的风险
- 可以使用HSTS(HTTP Strict Transport Security)优化
常见面试题
在面试中常见的问题有:
- HTTP请求响应报文
- HTTP与HTTPS的区别
- TCP三次握手与四次挥手
- HTTP常见状态码
- HTTP八种请求方式
- 简述OSI七层网络模型
- HTTP无状态、无连接特点及解决方案
- cookie和session的区别。
浏览器输入url按回车背后经历了哪些?
- 首先,在浏览器地址栏中输入url,先解析url,检测url地址是否合法
- 浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容。若没有,则跳到第三步操作。
- 浏览器缓存:浏览器会记录DNS一段时间,因此,只是第一个地方解析DNS请求;
- 操作系统缓存:如果在浏览器缓存中不包含这个记录,则会使系统调用操作系统,获取操作系统的记录(保存最近的DNS查询缓存);
- 路由器缓存:如果上述两个步骤均不能成功获取DNS记录,继续搜索路由器缓存;
- ISP缓存:若上述均失败,继续向ISP搜索。
- 在发送http请求前,需要域名解析(DNS解析),解析获取相应的IP地址。
- 浏览器向服务器发起tcp连接,与浏览器建立tcp三次握手。
- 握手成功后,浏览器向服务器发送http请求,请求数据包。
- 服务器处理收到的请求,将数据返回至浏览器
- 浏览器收到HTTP响应
- 浏览器解码响应,如果响应可以缓存,则存入缓存。
- 浏览器发送请求获取嵌入在HTML中的资源(html,css,javascript,图片,音乐······),对于未知类型,会弹出对话框。
- 浏览器发送异步请求。
- 页面全部渲染结束。
什么是socket?简述基于tcp协议的套接字通信流程
- Socket 又称”套接字”,是系统提供的用于网络通信的方法.TCP编程的客户端一般步骤是:
- 创建一个socket,用函数socket();
- 设置socket属性,用函数setsockopt();* 可选
- 绑定IP地址、端口等信息到socket上,用函数bind();* 可选
- 设置要连接的对方的IP地址和端口等属性;
- 连接服务器,用函数connect();
- 收发数据,用函数send()和recv(),或者read()和write();
- 关闭网络连接;