前端基础总结之HTTP

HTTP 是浏览器和服务器通信时所采用的协议,它的特点有:

    1,基于TCP/IP通信协议,
    2,工作过程:
        浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求
        Web服务器根据接收到的请求后,向客户端发送响应信息。
    3,无连接/无状态:(节省传输时间)
        无连接的含义是限制每次连接只处理一个请求

        服务器处理完客户的请求,并收到客户的应答后,即断开连接

HTTP三次握手:

第一次握手:
        主机A发送位码为SYN=1,随机产生seq number=a的数据包到服务器
        主机B由SYN=1知道,A要求建立联机;
第二次握手:
        主机B收到请求后要确认联机信息,向A发送 ack number=(a+1),syn=1,ack=1
        随机产生seq=b的包
第三次握手:
        主机A收到后检查ack number是否正确,即第一次发送的a+1,以及位码ack是否为1
        若正确,主机A会再发送ack number=(b+1),ack=1

        主机B收到后确认seq值与ack=1则连接建立成功。

四次挥手:

    第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不 会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可 以接受数据。
    第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)
    第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。
    第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。

HTTP请求方法:

1、GET 请求指定的页面信息,并返回实体主体。 
2、HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。
3、POST请求可能会导致新的资源的建立和/或已有资源的修改。 
4、PUT 从客户端向服务器传送的数据取代指定的文档的内容。 
5、DELETE 请求服务器删除指定的页面。 
6、CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 
7、OPTIONS 允许客户端查看服务器的性能。 

8、TRACE 回显服务器收到的请求,主要用于测试或诊断。

GET和POST的区别:

GET:

1,请求获取指定的资源。
2,安全、幂等、可缓存的
3,报文主体没有任何语义
4,提交的数据会在地址栏中显示出来

5,用于从服务器端获取数据,包括静态资源(HTML|JS|CSS|Image等等)、动态数据展示(列表数据、详情数据等等)

POST:
1,语义是根据请求负荷(报文主体)对指定的资源做出处理,具体的处理方式视资源类型而不同。,
2,不安全,不幂等,(大部分实现)不可缓存
3,提交的数据不会在地址栏显示

4,用于向服务器提交数据,修改服务器上的资源的请求,比如增删改数据,提交一个表单新建一个用户、或修改一个用户等

HTTP之状态码:

1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
    200:OK      204:No Content
3xx:重定向--要完成请求必须进行更进一步的操作
    301:永久性重定向  302:临时性重定向  304:请求未满足条件  
4xx:客户端错误--请求有语法错误或请求无法实现
    400:Bad Request   403: Forbidden    404:Not Found
5xx:服务器端错误--服务器未能实现合法的请求

500:Internal Server Error  503:Service Unvaliable

关于URI和URL

1,URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。包括URL和URN       
     URI一般由三部组成:
            ①访问资源的命名机制
            ②存放资源的主机名
            ③资源自身的名称,由路径表示,着重强调于资源。

示例:[scheme:][//host:port][path][?query][#fragment]  

2,URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。
        URL一般由三部组成:
            ①协议(或称为服务方式)
            ②存有该资源的主机IP地址(有时也包括端口号)
            ③主机资源的具体地址。如目录和文件名等
示例:<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<fragment>

关于持久连接(Persistent Connections)和状态管理:

持久连接:
        只要任意一端没有明确提出断开连接,则保持TCP连接状态
        好处:较少TCP连接的重复建立和断开造成的额外开销,减轻了服务器端的负载。
状态管理:

      HTTP是无状态协议,不会对之前发生过的请求和响应进行管理,这样可以减少服务器的CPU即内存资源的消耗,因此提出了Cookie技术,通过在请求和响应报文中写入Cookie信息来控制客户端的状态。

       Cookie技术:(Cookie具有不可跨域名性)          

            1,客户端发送一个http请求到服务器端
            2,服务器端发送的响应报文内包含一个叫Set-Cookie的首部字段信息,通知客户端保存Cookie,并发送http响应给客户端
            3,下次客户端向服务器端发送请求时,会自动在请求报文中加入Cookie的值后发送出去
            4,服务器端发现客户端发送过来的Cookie后,回去检查是从哪个客户端发;来的连接请求,并对比服务器的记录,最后得到之前的状态信息。

            如果在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击对cookie信息的窃取。


HTTP和HTTPS

HTTP的特点:

    1,以明文方式发送内容,不提供任何方式的数据加密,不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。
    2,客户端和服务器端无法验证对方身份

    3,端口是80

HTTPS的特点:

    1,在HTTP的基础上加入了SSL(Secure Sockets Layer)协议和TTL协议
    2,SSL依靠ca证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
    3,加密采用对称加密,对称加密的密钥用服务器方的整数进行非对称加密,服务器也可以验证客户端身份。
    4,端口是443
    5,主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

为什么HTTPS安全

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

攻击与安全:

web注入攻击

1,以服务器为目标的主动攻击

        主动攻击(active attack)是指攻击者通过直接访问Web应用,把攻击代码传入的攻击模式。由于该模式是直接针对服务器上的资源进行攻击,因此攻击者需要能够访问到那些资源。

        主动攻击模式里具有代表性的攻击是SQL注入攻击和OS命令注入攻击

    SQL注入攻击的防范:通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。(SQL是数据库语言,针对web应用使用的数据库)

     1.永远不要信任用户的输入,要对用户的输入进行校验,可以通过正则表达式,或限制长度,对单引号和双"-"进行转换等。 

     2.不要把机密信息明文存放,请加密或者hash掉密码和敏感的信息。

   OS命令注入攻击:系统提供命令执行类函数主要方便处理相关应用场景的功能.而当不合理的使用这类函数,同时调用的变量未考虑安全因素,就会执行恶意的命令调用,被攻击利用。主要原因是服务端在调用系统命令时采用的是字符串连接的方式。

        在程序开发时OS命令注入攻击(OS Command Injection)是指通过Web应用,执行非法的操作系统命令达到攻击的目的。只要在能调用Shell函数的地方就有存在被攻击的风险

    1、少用系统命令,执行命令的参数尽量不要从外部获取。
    2,以服务器为目标的被动攻击

2,以服务器为目标的被动攻击

        被动攻击(passive attack)是指利用圈套策略执行攻击代码的攻击模式。在被动攻击过程中,攻击者不直接对目标Web应用访问发起攻击
        被动攻击通常的攻击模式如下所示
            步骤1:攻击者诱使用户触发已设置好的陷阱,而陷阱会启动发送已嵌入攻击代码的HTTP请求
            步骤2:当用户不知不觉中招之后,用户的浏览器或邮件客户端就会触发这个陷阱
            步骤3:中招后的用户浏览器会把含有攻击代码的HTTP请求发送给作为攻击目标的Web应用,运行攻击代码
            步骤4:执行完攻击代码,存在安全漏洞的Web应用会成为攻击者的跳板,可能导致用户所持的Cookie等个人信息被窃取,登录状态中的用户权限遭恶意滥用等后果

        被动攻击模式中具有代表性的攻击是跨站脚本攻击和跨站点请求伪造

        跨站脚本攻击(Cross-Site Scripting,XSS)是指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击。
        例如:攻击者在论坛中放一个看似安全的链接,骗取用户点击后,窃取cookie中的用户私密信息;或者攻击者在论坛中加一个恶意表单,当用户提交表单的时候,却把信息传送到攻击者的服务器中,而不是用户原本以为的信任站点。
  跨站脚本攻击有可能造成以下影响:利用虚假输入表单骗取用户个人信息;利用脚本窃取用户的Cookie值,被害者在不知情的情况下,帮助攻击者发送恶意请求;显示伪造的文章或图片。
        1、避免直接在cookie 中泄露用户隐私,例如email、密码等等。

        2、尽量采用POST 而非GET 提交表单

    跨站点请求伪造(Cross-Site Request Forgeries,CSRF)攻击是攻击者通过各种方法伪造一个请求,模仿用户提交表单的行为,从而达到修改用户的数据,或者执行特定任务的目的。
  跨站点请求伪造有可能会造成以下等影响:利用已通过认证的用户权限更新设定信息等;利用已通过认证的用户权限购买商品;利用已通过认证的用户权限在留言板上发表言论

        1、服务端的CSRF方式方法很多样,但总的思想都是一致的,就是在客户端页面增加伪随机数。
        2,验证码

保证表单提交的密码字段不被泄露:

    (1)使用HTTPS安全传输协议
    (2)写一个脚本对内容编码后传输
    验证码的作用:

            防止恶意注册和暴力破解,减少非正常请求,防止大量恶意注册和登陆请求,影响网络性能。

关于Etag

    ETag:是实体标签(Entity Tag)的缩写。ETag一般不以明文形式相应给客户端。在资源的各个生命周期中,它都具有不同的值,用于标识出资源的状态。当资源发生变更时,如果其头信息中一个或者多个发生变化,或者消息实体发生变化,那么ETag也随之发生变化。Etag由服务器端生成,客户端通过If-Match或者说If-None-Match这个条件判断请求来验证资源是否修改。

    当发送一个服务器请求时,浏览器首先会进行缓存过期判断。浏览器根据缓存过期时间判断缓存文件是否过期。
        情景一:若没有过期,则不向服务器发送请求,直接使用缓存中的结果,此时我们在浏览器控制台中可以看到 200 OK(from cache) ,此时的情况就是完全使用缓存,浏览器和服务器没有任何交互的。
          情景二:若已过期,则向服务器发送请求,此时请求中会带上①中设置的文件修改时间,和Etag

    然后,进行资源更新判断。服务器根据浏览器传过来的文件修改时间,判断自浏览器上一次请求之后,文件是不是没有被修改过;根据Etag,判断文件内容自上一次请求之后,有没有发生变化
        情形一:若两种判断的结论都是文件没有被修改过,则服务器就不给浏览器发index.html的内容了,直接告诉它,文件没有被修改过,你用你那边的缓存吧—— 304 Not Modified,此时浏览器就会从本地缓存中获取index.html的内容。此时的情况叫协议缓存,浏览器和服务器之间有一次请求交互。

        情形二:若修改时间和文件内容判断有任意一个没有通过,则服务器会受理此次请求,之后的操作同①

Expires和Cache-Control
        Expires要求客户端和服务端的时钟严格同步。HTTP1.1引入Cache-Control来克服Expires头的限制。如果max-age和Expires同时出现,则max-age有更高的优先级。


猜你喜欢

转载自blog.csdn.net/qq_30422457/article/details/80815822