6.HTTP相关
HTTP:超文本传输协议 ,应用册层协议
6.1.HTTP的主要特点:
- 1.支持客户/服务器模式
- 2.简单快速
- 客户端向服务器请求服务时,只需传输请求方法和路径,由于http协议简单,是的http服务器的程序规模小,因此通信速度很快
- 3.灵活
- 允许传输任意类型的数据对象,由content-type标记
- 4.无连接
- 限制每次连接只处理一个请求,服务器处理完请求并收到客户端确认后,即断开连接,这种方式节省传输时间。
- 在Http1.1,后默认采用长连接,即服务器需要等待一定时间后才断开连接,以保证连接特性
- 5.无状态
- 协议对于事物处理没有记忆能力,缺少状态意味着如果后续处理需要前面的信息,则需要重传,这样可能导致每次连接传送的数据量增大。
- 简单理解为,http服务起不会记住你的登录状态,你是谁,是由另外的机制(cookie\session)解决的。
6.2.HTTP请求结构:
例:
6.3.HTTP请求结构:
6.4.请求响应的步骤:
- 客户端连接到Web服务器(建立一个TCP套接字连接)
- 发送HTTP请求(通过TCP套接字发送)
- 服务器接受请求并返回HTTP响应(将响应数据写到TCP套接字)
- 释放连接TCP连接
- 1.若连接模式为close,则服务起主动关闭TCP连接,客户端被动关闭TCP连接。
- 2.若连接模式为keep-alive,则该连接会保持一段时间,在改时间内,服务器可以继续接收请求
- 客户端浏览器解析HTML内容
6.5.(面试题)在浏览器地址栏键入RUL,按下回车后经历的流程:
- 1.DNS连接(解析url中域名对应的IP地址)
- DNS解析:浏览器缓存、系统缓存、路由器缓存、IPS服务器缓存、根域名服务器缓存、顶级域名缓存
- 2.TCP连接(三次握手)
- 3.发送HTTP请求
- 4.服务器处理请求并返回HTTP报文
- 5.浏览器解析渲染界面
- 6.连接结束(四次挥手)
6.5.(面试题)常见HTTP状态码:
- 五种可能的取值:
- 1XX:指示信息--表示请求以接收,继续处理
- 2XX:成功--表示请求已经被成功接收、理解、处理
- 3XX:重定向--要完成请求必须进行更进一步的操作
- 4XX:客户端错误--请求有语法错误或请求无法实现
- 5XX:服务端错误--服务器未能实现合法的请求
常见状态码:
- 200 OK :正常返回信息
- 400 Bad Rqquest:客户端请求有语法错误,不能被服务器理解
- 401 Unauthorized:请求未经授权,这个状态代码和WWW-Authenticate报头域一起使用
- 403 Forbidden:服务器收到请求,但是拒绝提供服务
- 404 Not Found:请求资源不存在,eg,输入了错误的URL
- 500 Internal Server Error:服务器发生了不可预期的错误
- 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常
6.6.(面试题)GET请求和POST请求的区别:
- 1.Http报文层面:
- GET请求信息放在URL,POST放在报文体中
- GET请求中一般浏览器对url长度有限制;POST请求数据长度无限制
- 2.数据库层面:GET服务幂等性和安全性,POST不符合;(幂等性:多次请求结果相同;安全性:即请求没有对数据库做修改)
- 3.其他层面:GET可以被缓存,被存储,而POST不行
- GET请求的内容会被保存在浏览器中
- 超过90%的GET请求都被CDN缓存了,大大减少web服务起的负担
6.7.(面试题)Cookie和Session的区别?(这种机制使http具备状态,eg:能记住登录信息)
参考答案:
- 1.Cookie数据存放在客户的浏览器上,Session数据存放在服务器上
- 2.Session相对Cookie更安全
- 3.若考虑减轻服务器负担,应当使用Cookie
6.7.1.cookie:
- Cookie简介:
- 是由服务器发给客户端的特殊信息,以文本的形式存放在客户端
- 客户端再次请求的时候,会把Cookie回发(存放于响应头)
- 服务器接收到后,会解析Cookie生成与客户端相对应的内容
- Cookie的设置以及发送过程:(4步)
6.7.2.session:
- Session简介:
- 服务器端的机制,在服务器上保存的信息
- 解析客户端请求并操作session id(客户端传过来的),按需保存状态信息
- 如果客户端请求中有session id,说明以为该客户创建session,就会在服务端检索用户信息。
- 如果客户端请求中无session id,则服务端为客户创建session,并生成session id
- Session的实现的两种方式(JSESSIONID)
- 1.使用Cookie来实现
- 2.使用URL回写来实现
6.8.(面试题)HTTP和HTTPS的区别
参考答案:
- HTTPS需要到CA申请证书(一般会收费),HTTP不需要
- HTTPS密文传输,HTTP明文传输
- 连接方式不同,HTTPS默认使用443端口,HTTP使用80端口
- HTTPS=HTTP+加密+认证+完整性保护,较HTTP安全
6.8.1.HTTPS简介
6.8.2.SSL(Security Sockets Layer,安全套阶层)
- 为网络通信提供安全及数据完整性的一种安全协议
- 是操作系统对外的API,SSL3.0后更名为TLS
- 采用身份验证和数据加密保证网络通信的安全和数据的安全性
6.8.3.加密的方式:
- 对称加密:加密和解密都是用同一个密钥
- 非对称加密:加密使用的密钥和解密使用的密钥是不相同的
- 哈希算法:将任意长度的信息转换为固定长度的值,算法不可逆(MD5)
- 数字签名:证明某个消息或者文件是发出/认同的
6.8.4.HTTPS数据传输流程
- 浏览器将支持的加密算法信息发送给服务器
- 服务器选择一套浏览器支持的加密算法,以证书的形式回发浏览器
- 浏览器验证证书合法性,并结合证书公钥加密信息发送给服务器
- 服务器使用私钥解密信息,验证哈希,加密响应消息回发浏览器
- 浏览器解密响应消息,并对消息进行验真,之后进行加密交互数据
6.8.5.HTTPS未必真安全:
- 浏览器默认填充http://,请求需要进行跳转,有被劫持的风险
- 可以使用HSTS(HTTP Strict Transport Security)优化