-
超文本传输协议HTTP的主要特点
- 应用层协议
- 常基于TCP的连接方式
- 支持server/client模式
- 简单快速
- 客户端向服务端发送请求的时候,只需传输请求的方法(常用方法:get、post)与路径
- 每种方法规定了客户与服务器联系的类型不同
- 由于http简单,使得http程序规模小,因而通信速度很快
- 灵活
- http允许传输任意类型的数据,以content-type加以标记
- 无连接
- 每次连接只处理一个请求,服务器收到客户的请求并收到客户的应答之后就断开连接。
- 无状态
- HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。
-
HTTP报文结构
- 开始行:用于区分是请求报文还是响应报文。在请求报文中,开始行叫做请求行,而在响应报文中叫做状态行。开始行的三个字段之间都以空格间隔开、最后的"CR"和"LF"分别代表“回车”和“换行”。
- 首部行: 用来说明浏览器、服务器或者报文主体的一些信息。首部可以有好几行,但也可以不使用。在每一个首部行中都有首部字段和它的值,每一行在结束的地方都要有“回车”和“换行”。整个首部行结束时,还有一空行将首部行和后边的实体主体分开。
- 请求报文
- 请求行中方法,请求资源的URL,HTTP的版本号
- 方法 就是对所请求的对象进行的操作,实际上也是一些命令,因此,请求报文的类型是由他所采用的方法决定的
- 方法 就是对所请求的对象进行的操作,实际上也是一些命令,因此,请求报文的类型是由他所采用的方法决定的
- 请求行中方法,请求资源的URL,HTTP的版本号
Http请求行
GET后边有一个空格,接着是完整的URL,其后边又有一个空格,最后是HTTP/1.1
GET http://www.xyz.edu.cn/dir/index.htm HTTP/1.1
GET /dir/index.htm HTTP/1.1 请求行使用了相对URL
Host: www.xyz.edu.cn 此行是首部行的开始,这行给出了主机的域名
Connection: close 告诉服务器发送完请求的文档后就可以释放连接
User-Agent: Mozilla/5.0 表明用户代理是使用火狐浏览器
Accept-Languag: cn 表明用户优先得到中文版本的文档
请求报文的最后还有一个空行
-
响应报文
响应报文的第一行就是状态行
- 状态行包括三项内容,Http的版本,状态码,以及解释状态码的简单短语
-
状态码
- 1xx 表示通知消息,如请求受到了或正在处理
- 2xx 表示请求已被成功接收、理解、接受
- 3xx 表示重定向,如要完成请求还必须采取进一步的行动
- 4xx 表示客户端的差错,如请求中有错误的语法不能完成或者请求无法完成
- 5xx 表示服务器的差错,如服务器失效无法完成请求或服务器未能实现合法的请求 -
常见的状态码
200 成功
400 错误请求(请求中有语法错误)
401 请求需要身份验证、状态码必须和WWW-Authenticate报头域一起使用
403 服务器收到请求,但是拒绝提供服务
404 请求资源不存在,如输入了错误的URL
408 请求超时
415 不支持的媒体类型
500 服务器内部错误
503 服务器目前无法使用,一段时间后可能恢复正常
505 HTTP版本不受支持
-
- 状态行包括三项内容,Http的版本,状态码,以及解释状态码的简单短语
请求响应的步骤
- 客户端连接web服务器
- 发送HTTP请求
- 服务器接收请求并返回HTTP响应
- 释放TCP连接
- 客户端浏览器解析HTML内容
在浏览器地址栏键入URL,按下回车之后经历的流程
- 浏览器向DNS服务器请求解析该URL中的域名所对应的IP地址。
- 查找浏览器缓存,因为浏览器一般会缓存DNS记录一段时间,不同浏览器的时间可能不一样,一般2-30分钟不等,浏览器去查找这些缓存,如果有缓存,直接返回IP,否则下一步。
- 查找系统缓存:浏览器缓存中找不到IP之后,浏览器会进行系统调用(windows中是gethostbyname),查找本机的hosts文件,如果找到,直接返回IP,否则下一步。
- 查找路由器缓存:如果1,2步都查询无果,则需要借助网络,路由器一般都有自己的DNS缓存,将前面的请求发给路由器,查找ISP 服务商缓存 DNS的服务器,如果查找到IP则直接返回,没有的话继续查找。
- 查找IPS服务器缓存:如果以上步骤还找不到,则IPS的DNS服务器就会进行递归查询,所谓递归查询就是如果主机所询问的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其他根域名服务器继续发出查询请求报文,而不是让该主机自己进行下一步查询。(本地域名服务器地址是通过DHPC协议获取地址,DHPC是负责分配IP地址的)
- 查找域名服务器缓存和顶级域名服务器缓存:本地域名服务器采用迭代查询,它先向一个根域名服务器查询。本地域名服务器向根域名服务器的查询一般都是采用迭代查询。所谓迭代查询就是当根域名服务器收到本地域名服务器发出的查询请求报文后,要么告诉本地域名服务器下一步应该查询哪一个域名服务器,然后本地域名服务器自己进行后续的查询。(而不是替代本地域名服务器进行后续查询)。
-
浏览器与目标服务器建立TCP连接
TCP的三次握手(计算机网络(一)TCP的三次握手以及四次挥手)
-
发送HTTP请求
浏览器向主机发起一个HTTP-GET方法报文请求。请求中包含访问的URL,长连接,还有User-Agent用户浏览器操作系统信息,编码等。值得一提的是Accep-Encoding和Cookies项。Accept-Encoding一般采用gzip,压缩之后传输html文件。Cookies如果是首次访问,会提示服务器建立用户缓存信息,如果不是,可以利用Cookies对应键值,找到相应缓存,缓存里面存放着用户名,密码和一些用户设置项。
-
服务器处理请求并返回HTTP报文
-
浏览器解析响应报文并渲染界面
-
浏览器释放TCP链接
TCP的四次挥手(计算机网络(一)TCP的三次握手以及四次挥手)
可认为第五步和第六步同时发生
GET和POST的区别:
- HTTP报文层面:GET将请求信息放在URL之后,以"?“分割URL和传输数据,参数之间以”&"相连,POST放在报文体中,想获取信息必须解析报文。
- GET提交的数据大小有限制,最多只能有1024字节(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限
制。- GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码。
- 数据库层面:GET符合幂等性和安全性,POST不符合
- 幂等性:对数据库的一次操作和多次操作获得的结果是一致的则说明具有幂等性
- 安全性:对数据库的操作没有改变数据库中的数据,这说明具有安全性
- GET一般用于查询操作,一般不会改变数据库中的值
- 其他层面:GET请求获得的数据可以被浏览器缓存、被储存、而POST不行
- 如GET请求的URL可以作为书签、POST不具备这个功能,缓存也是GET请求被广泛应用的根本
Cookie和Session的区别
-
Cookie
- Cookie是由服务器发给客户端的特殊信息,以文本的形式存放在客户端
- 客户端再次请求的时候,会把Cookie回发
- 服务器接收到后,会解析Cookie并动态生成与客户端相对应的内容
-Cookie的设置以及发送过程
- 客户端发送HTTP请求到服务端
- 服务端做出响应,其中包括Set-Cookie的头部
- 客户端第二次向服务端发送HTTP请求时,将带有Cookie的头部一并发送
- 服务端发送一个HTTP响应到客户端
-
Session
- 服务器端的机制,在服务器上保存的信息
- 解析客户端请求并操作session id,按需求保存状态信息,如果此客户端没有session信息,则为此客户端创建一个与session相关的Session id
-
Cookie和Session的使用
用户第一次请求服务器的时候,
服务器根据用户提交的相关信息,
创建对应的Session,
请求返回时将此Session的唯一标识信息SessionID 返回给浏览器浏览器接收到服务器返回的SessionID信息后
会将此信息存入到Cookie中
同时Cookie记录此SessionID属于哪个域名。当用户第二次访问服务器的时候
请求会自动判断此域名下是否存在Cookie信息
如果存在自动将Cookie信息也发送给服务端
服务端会从Cookie中获取SessionID
再根据SessionID查找对应的Session信息
如果没有找到
说明用户没有登录或者登录失效
如果找到Session
证明用户已经登录可执行后面的操作。 -
Cookie和Session的区别
- Cookie存放在客户端的浏览器上,Session数据存放在服务器上
- Session相对于Cookie更安全
- 若考虑减轻服务器负担,应当使用Cookie
-
HTTP和HTTPS的区别
- SSL(Security Socket Layer,安全嵌套层)
- 为网络通信提供安全及数据完整性的一种安全协议
- 是操作系统对外的API,SSL3.0后更名为TLS
- 采用身份验证和数据加密保证网络通信的安全和数据的完整性
加密的方式
- 对称加密:加密和解密都使用同一个密钥
- 非对称加密:加密使用的密钥和解密使用的密钥是不同的
- 哈希加密:将任意长度的信息转换为固定长度的值,算法不可逆(MD5)
- 数字签名:证明某个消息或者文件是某人发出/认同的
-
HTTPS数据传输流程
- 浏览器将支持的加密算法信息发送给服务器
- 服务器选择一套浏览器支持的加密算法,以证书的形式回发浏览器
- 浏览器验证证书合法性,并结合证书公钥加密信息发送给服务器
- 服务器使用私钥解密信息,验证哈希,加密响应信息回发浏览器
- 浏览器解密响应消息,并对消息进行验真,之后进行加密交互数据
-
HTTP和HTTPS的区别
- HTTPS需要到CA申请证书,HTTP不需要
- HTTPS密文传输,HTTP明文传输
- 连接方式不同,HTTPS默认使用443端口,HTTP使用80端口
- HTTPS = HTTP + 加密 + 认证 + 完整性保护,较HTTP安全
-
HTTPS不是绝对安全
- 浏览器默认填充http://,请求需要跳转,有被劫持的风险
- 可以使用HSTS优化
- SSL(Security Socket Layer,安全嵌套层)