关于Http的那点事

从输入网址到显示网页的过程分析

1、应用层DNS解析域名:客户端先检查本地是否有对应的IP地址,若找到则返回响应的IP地址。若没找到则请求上级DNS服务器,直至找到或到根节点。【(DNS 查询:浏览器缓存->系统缓存->路由器缓存->ISP(Internet Service Provider) DNS 缓存->根域名服务器)】
2、浏览器与服务器建立TCP连
为了准确无误地把数据送达目标处,TCP(Transmission Control Protocol )协议采用了三次握手策略。用TCP协议把数据包送出去后,TCP不会对传送后的情况置之不理,它一定会向对方确认是否成功送达。握手过程中使用了TCP的标志:SYN【同步序列编号(Synchronize Sequence Numbers】和ACK【ACK (Acknowledgement)即是确认字符】
发送端首先发送一个带SYN标志的数据包给对方。接收端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息。 最后,发送端再回传一个带ACK标志的数据包,代表“握手”结束。 若在握手过程中某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的数据包
3、应用层客户端发送HTTP请求。
4、服务器响应请求:查找客户端请求的资源,并返回响应报文,响应报文中包括一个重要的信息——状态码(200-300,成功;304使用缓存)。
5、服务器返回相应文件给浏览器。
6、Tcp连接释放(可以说下四次挥手的过程)。
第一次挥手:主动关闭方发送一个FIN【FIN是用来扫描保留的端口】,用来关闭主动方到被动关闭方的数据传送
第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)
第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了
第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手
7、浏览器对HTML文件进行解析构建DOM树 ,构建渲染树 ,js根据DomAPI操作执行绑定事件等,页面显示完成。


HTTP最常见的响应头如下所示

Allow:服务器支持哪些请求方法(如GET、POST等);
Content-Encoding: 文档的编码(Encode)方法;
Content-Length: 表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。
Content-Type: 表 示后面的文档属于什么MIME类型。
Date:当前的GMT时间。
Expires:指明应该在什么时候认为文档已经过期,从而不再缓存它。
Last-Modified:文档的最后改动时间。
Location:表示客户应当到哪里去提取文档。
Refresh:表示浏览器应该在多少时间之后刷新文档,以秒计。


http状态码

  • 1xx :1开头的状态码表示临时的响应,服务器收到请求,需要请求者继续执行操作
  • 2xx :请求成功
  • 3xx :请求被重定向
  • 4xx :请求错误,表明客户端发送的请求有问题
  • 5xx :服务器错误,表明服务端在处理请求时发生了错误
    100:Continue 继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息
    200:OK 正常返回信息
    201:Created 请求成功并且服务器创建了新的资源
    202:Accepted 服务器已接受请求,但尚未处理
    301:Moved Permanently 客户端请求的文档在其他地方,新的URL在location头中给出
    302:Found 临时性重定向。
    303:See Other 临时性重定向,且总是使用 GET 请求新的 URI。
    304 : Not Modified 客户端有缓存的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户端只想到指定日期后再更新文档)。服务器告诉客户,原来缓存的文档还可以继续使用。
    400 : Bad Request 请求出现语法错误
    401 : Unauthorized 访问被拒绝,客户端试图胃镜授权访问受密码保护的页面
    403 : Forbidden 资源不可用。服务器理解客户的请求,但拒绝处理它。通常由于服务器文件或目录的权限设置导致。
    404 : Not Found 无法找到指定位置的资源。
    405 : Method Not Allowed 请求方法(GET、POST、PUT等)对指定的资源不适用,用来访问本资源的HTTP方法不被允许。
    500 : Internal Server Error 服务器遇到了意料之外的情况,不能完成客户端的请求。
    502 : Bad Gateway 服务器作为网管或者代理时收到了无效的响应。
    503 : Service Unavailable 服务不可用,服务器由于维护或者负载过中未能应答。
    504 : Gateway Timeout 网关超时, 作为代理或网关的服务器不能及时的应答。

讲讲304缓存的原理

  • 304是HTTP状态码,服务器用来标识这个文件没修改,不返回内容,浏览器在接收到个状态码后,会使用浏览器已缓存的文件
  • 客户端请求一个页面(A), 服务器返回页面A,并在给A加上一个ETag。 客户端展现该页面,并将页面连同ETag一起缓存。 客户再次请求页面A,并将上次请求时服务器返回的ETag一起传递给服务器。 服务器检查该ETag,并判断出该页面自上次客户端请求之后还未被修改,直接返回响应304(未修改——Not Modified)和一个空的响应体

TCP和UDP的区别

  • TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来
  • UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去! UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境

HTTP和HTTPS

HTTP协议通常承载于TCP协议之上,在HTTP和TCP之间添加一个安全协议层(SSL或TSL),这个时候,就成了我们常说的HTTPS。默认HTTP的端口号为80,HTTPS的端口号为443


为什么HTTPS安全

因为网络请求需要中间有很多的服务器路由器的转发。中间的节点都可能篡改信息,而如果使用HTTPS,密钥在你和终点站才有。https之所以比http安全,是因为他利用ssl【Secure Sockets Layer 安全套接层】/tls【安全传输层协议】协议传输。它包含证书,卸载,流量转发,负载均衡,页面适配,浏览器适配,refer传递等,保障了传输过程的安全性。


http 2.0对于http 1.x有哪些优点?

多路复用:多路复用允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。由于http 1.x的时代中,浏览器向同一域名下发送的http请求数量是受限的,当超出数量限制时,请求会被阻塞,大大降低了用户体验。而HTTP/2 的多路复用允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。
**二进制分帧:**HTTP/2在应用层和传输层之间追加了一个二进制分帧层,最终使得多个数据流共用一个连接,更加高效的使用tcp连接。从而使得服务器的连接压力减轻,降低了内存的消耗,增大了网络的吞吐量。
**首部压缩:**HTTP/2引入了HPACK算法对头部进行压缩,大大减小了数据发送的字节数。


cookie有哪些属性:

name:一个cookie的名称
value:一个cookie的值
domain:可以访问此cookie的域名
path:可以访问此cookie的页面路径
expires/max-age:此cookie的超时时间
size:此cookie的大小
httpOnly:cookie的httponly属性。若此属性为true,则只有在http请求头中会带有此cookie的信息,而不能通过document.cookie来访问此cookie。
secure:设置是否只能通过https来传递此条cookie。


XSS原理及防范

Xss(cross-site scripting)攻击指的是攻击者往Web页面里插入恶意html标签或者javascript代码。比如:攻击者在论坛中放一个看似安全的链接,骗取用户点击后,窃取cookie中的用户私密信息;或者攻击者在论坛中加一个恶意表单,当用户提交表单的时候,却把信息传送到攻击者的服务器中,而不是用户原本以为的信任站点。
XSS防范方法
首先代码里对用户输入的地方和变量都需要仔细检查长度和对”<”,”>”,”;”,”’”等字符做过滤;
其次任何内容写到页面之前都必须加以encode,避免不小心把html tag 弄出来。这一个层面做好,至少可以堵住超过一半的XSS 攻击。


XSS与CSRF有什么区别吗?

XSS是获取信息,不需要提前知道其他用户页面的代码和数据包。CSRF是代替用户完成指定的动作,需要知道其他用户页面的代码和数据包。要完成一次CSRF攻击,受害者必须依次完成两个步骤:
- 登录受信任网站A,并在本地生成Cookie
- 在不登出A的情况下,访问危险网站B


CSRF的防御

  1. 检查报头中的Referer参数确保请求发自正确的网站(但XHR请求可调用setRequestHeader方法来修改Referer报头);
  2. 对于任何重要的请求都需要重新验证用户的身份;
  3. 创建一个唯一的令牌(Token),将其存在服务端的session中及客户端的cookie中,对任何请求,都检查二者是否一致。

是否了解 Web 注入攻击(最常见 XSS 和 CSRF)?

SQL注入:把SQL命令插入到表单或输入URL查询字符串提交,欺骗服务器达到执行恶意的SQL目的
XSS(Cross Site Script),跨站脚本攻击:攻击者在页面里插入恶意代码,当用户浏览该页之时,执行嵌入的恶意代码达到攻击目的
CSRF(Cross Site Request Forgery),跨站点伪造请求:伪造合法请求,让用户在不知情的情况下以登录的身份访问,利用用户信任达到攻击目的


如何防范 Web 前端攻击?

  • 不要信任任何外部传入的数据:针对用户输入做相关的格式检查、过滤等操作。
  • 不要信任任何传入的第三方数据:使用 CORS,设置 Access-Control-Allow-Origin
  • 更安全地使用 Cookie:设置Cookie的HttpOnly属性为true,禁止了JavaScript操作Cookie
  • 防止网页被其他网站内嵌为iframe:服务器端设置 X-Frame-Options 响应头,防止页面被内嵌。X-Frame-Options HTTP 响应头是用来给浏览器指示允许一个页面可否在 <frame>, <iframe> 或者 <object> 中展现的标记。
    使用X-Frame-Options 有两种可能的值:
    DENY :该页无法显示在一个框架中.
    SAMEORIGHT :页面只能显示在页面本网站的框架中。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值