zoukankan      html  css  js  c++  java
  • HTTP与HTTPS初识

    HTTP

    HTTP是一个属于应用层的协议,特点是简介、快速

     

    HTTP客户端发起请求,创建端口
    HTTP服务器在端口监听客户端请求
    HTTP服务器向客户端返回状态和内容

    网络请求,页面渲染

    1、域名解析
         以Chrome浏览器为例,域名解析过程:
    1、Chrome搜索自身的DNS缓存

    2、搜索操作系统自身的DNS缓存(浏览器没有找到缓存或缓存已经过期失效):chrome://net-internals/#dns查看DNS缓存记录

    3、读取本地的HOST文件

    4、浏览器发起一个DNS的一个系统调用,一般向本地主控DNS服务器

    5、浏览器获得域名对应的IP地址后,发起HTTP "三次握手"

    6、TCP/IP连接建立起来后,浏览器就可以向服务器发送HTTP请求了,使用了比如说,用HTTP的GET方法请求一个根域里的一个域名,协议可以采用HTTP1.0的一个协议。

    7、服务器端接收到了这个请求,根据根路径参数,经过后端的一些处理之后,把处理后的一个结果的数据返回浏览器,如果是慕课网的页面就会把完整的HTML页面代码返回给浏览器。

    8、浏览器拿到了慕课网的完整的HTML页面代码,在解析和渲染这个页面的时候,里面的JS、CSS、图片静态资源,它们同样也是一个个HTTP请求,都需要经过上面的主要的七个步骤。

    9、浏览器根据拿到的资源对页面进行渲染,最终把一个完整的页面呈现给了用户。

    运营商DNS服务器

          1、宽带运营商服务器查看本身缓存

          2、运营商服务器发起一个迭代的DNS解析请求

    • 运营商服务器把结果返回操作系统内核同时缓存起来
    • 操作系统内核把结果返回浏览器
    • 最终浏览器拿到了www.imooc.com对应的IP地址
    浏览器以一个随机端口向服务器的Web程序发起一个TCP连接请求,此连接请求通过层层路由设备到达网卡,然后进入内核的TCP/IP协议栈(有可能经过防火墙过滤),最终到达Web服务端。
          
                                                                       HTTP交互过程
    1、客户端发送SYN同步报文给服务端
    2、服务端收到SYN同步报文之后,给客户端一个回复报文SYN,ACK报文
    3、客户端收到第二条报文之后,会再给服务端回复一个ACK报文
    
    连接建立完成之后,客户端和服务端就可以进行正常的HTTP网络请求
    
    4、客户端发送一个HTTP请求报文到服务端
    5、服务端收到客户端的HTTP请求报文,处理之后把数据返回给客户端,产生第五条HTTP响应报文
    
    当客户端和服务端之间结束网络请求之后,这条TCP连接通道就会关闭
    假如断开由客户端发起,流程:
    6、客户端发送FIN终止信号报文
    7、服务端收到客户端发送的终止信号之后,服务端会回复给客户端一个ACK确认报文
    
    当客户端收到第七条报文之后,有客户端向服务端方向的连接就已经断开
    
    8、过一段时间,服务端又会发送给客户端第八条FIN、ACK终止报文
    9、客户端收到第八条报文之后,会回复给服务端一条ACK确认报文,此时由服务端到客户端方向的TCP连接通道关闭。
    
    TCP 连接通道是一个全双工的通道,并不是两条通道

    Wireshark工具查看HTTP工作流程

           
                                                           HTTP消息体

            
                                                                      HTTP Request 协议格式
    HTTP Request 协议格式
    • {请求方法}{/相对路径} HTTP/{http版本}
             
     = CRLF
    • Header-Name-1:value
    
    • Header-Name-2:value
    
    • 
    
    • Optional Request Boby

    Headers:头信息

    Preview:资源预览

    Response:么有处理的响应的响应的正文

    Cookies:请求和返回的Cookies

    Timing:图形化显示每个阶段耗费的时间

    Stalled:等待时间:浏览器要发出请求到请求可以发出的等待时间,一般是代理协商以及要等到TCP连接释放的时间不包含DNS查询和建立TCP连接的时间。

    Proxy negotiation:代理协商的时间

    Request sent:请求时间:第一个字节发出前,到最后一个字节发出后的时间,可以理解为请求时间或上传时间

    Watting(TTFB):请求发出以后到收到响应的第一个字节所花费的时间,包括整个数据在路由贯穿中所延迟的时间,以及服务器端响应这个请求做的处理时间

    Content Download:收到第一个字节开始到收到最后一个字节结束所花费的时间

    charles工具:抓取HTTP请求和响应数据
    Telnet:模拟HTTP请求
    HTTPS:Hyper Text Transfer Protocol over Secure Socket Layer.基于SSL层的HTTP
    HTTP与HTTPS不同之处
    • HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费;
    • HTTP是明文传输,HTTPS则是具有安全性的SSL加密传输;
    • HTTP和HTTPS使用的端口也不一样,前者是80,后者是443;
    • HTTPS可进行加密传输,身份认证,比HTTP安全。
    HTTP最大特点是无连接无状态。
               
    • 限制每次连接只处理一个请求,服务器处理完客户的请求之后并且接收到客户端的答应后断开此连接。这种方式的最大好处是节省传输时间。HTTP1.0,早期客户端与服务端交换的间歇性较大,大部分通道处于空闲,会无端占用资源,利用这一特点设计了请求时建立连接,请求完毕后释放连接,这样可以尽快释放资源,服务其他客户端。

    • 随着时间推移,keep-alive诞生,解决效率低的问题,功能是客户端到服务端连接持续有效。当出现对服务器后续请求时,keep-alive避免了重新建立连接。也可以叫做HTTP的持久连接,可以使用同一TCP连接来发送和接受多个HTTP请求和应答。

    安全套接字层SSL & 安全传输层TLS
                  
    • SSL:Secure Sockets Layer安全套接层
    • TLS:Transport Layer Securuty 传输层安全,SSL继任者
    • TLS与SSL在传输层之上对网络连接进行加密,为网络通信提供安全及数据完整性
    SSL协议
     为了解决以下风险而设计产生:
    • 所有信息都是加密传播,第三方无法窃听
    • 具有校验机制,一旦被篡改,通信双方会立刻发现
    • 配备身份证书,防止身份被冒充

               
                                                             HTTP与HTTPS架构
                                                                                     SSL连接建立过程
    1、客户端发送握手信息给服务端,2个内容:随机数number1,协商的加密算法(或者客户端支持的加密算法)
    2、服务端给予客户端响应握手信息,随机数number2,匹配好的协商加密算法(一定是客户端传给服务器端的加密算法的一个子集)
    3、服务端给客户端第一个响应报文之后,随即又会传递给客户端第二个响应报文,即服务端的证书
    4、客户端收到服务端传递的证书之后,对证书进行验证,是否有效、合法(
                           1、客户端验证服务端证书的数字摘要和证书解密后的内容是否被篡改;
                           2、证书链。逐级验证服务端的证书,一直到根证书是否在我们的操作系统的可信任证书列表当中。根证书会被植入到浏览器中或操作系统中)
    5、客户端组装会话秘钥(组装有三个内容:通过客户端自己保留的随机数number1、随机数number2,预主秘钥组装会话秘钥)
    6、客户端将预主秘钥通过服务端传递过来的证书里面的公钥加密,然后传递给服务端
    7、服务端拿到加密过的预主秘钥,通过私钥解密域主秘钥,服务端也获取到三个随机数
    8、服务端拿到三个随机数开始组装会话密钥
    9、客户端通过组装的会话密钥去加密一条消息,把加密后的握手消息传递给服务端,主要为了验证服务端能否正常接收客户端加密过的数据消息

    预主密钥:由客户端产生,传递给服务端,在会话中起着非常重要的作用,配合随机数1和随机数2生成最终的会话密钥。传递的随机数和预主秘钥完全可以只有预主秘钥承担,为什么产生三个随机数:协议设计之初,假设客户端所产生的随机数不是真正的随机数,为了保证随机数的随机性,我们通过产生多个随机数来达到最终产生的秘钥具有非常好的随机性,防止被中间攻击人随意窃取。

    公钥、私钥:非对称加密中的专业术语。

     对称加密算法:加密所使用的秘钥和解密所使用的秘钥相同。常见的有AES、DES。安全性差,因为需要将私钥传输给服务端。
            
                        对称加密
     非对称加密:使用公钥进行加密,解密使用私密的算法。常见RSA。
         
           
                  非对称加密
    请求方法
     
    • GET:请求获取Request-URI所标识的资源
    • POST:新创建资源,在Request-URI所标识的资源后附加新的数据
    • PUT:请求服务器存储一个资源,并用Request-URI作为其标识。向指定资源位置上传最新内容
    • DELETE:请求服务器删除Request-URI所标识的资源
    • HEAD:请求获取由Request-URI所表示的资源的响应消息报头,可以不用传入全部内容
    • TRACE
    • OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
     状态码
           
    • 1xx:信息响应类,表示接收到请求并且继续处理
    • 2xx:处理成功响应类,表示动作被成功接收、理解和接受
    • 3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理
    • 4xx:客户端错误,客户请求包含语法错误或者是不能正确执行
    • 5xx:服务器端错误,服务器不能正确执行一个正确的请求
     常用状态码
            
    • 200 OK 客户端请求成功
    • 400 Bad Request 客户端请求有语法错误,不能被服务器所理解
    • 401 Unauthorized 服务器收到请求,但是拒绝提供服务
    • 404 Not Found 请求资源不存在
    • 500 Internal Server Error 服务器发生不可预期的错误
    • 503 Server Unavailable 服务器当前不能处理客户端的请求
     URL:同一资源定位符,偏重定位,说明了通过那种协议来访问一个资源。
     URI:同一资源标识符,偏重标识,一个字符串格式规范。
     URL是URI的子集。
     
    Java半颗糖
  • 相关阅读:
    在VS2008中使用WSE 3.0【转】
    .Net调用Java端带有WS-Security支持的Web Service各方案实战【转】
    Java与WCF交互(一):Java客户端调用WCF服务 【转】
    Java与WCF交互(二):WCF客户端调用Java web service【转】
    c#调用带有安全认证的java webservice
    利用Web Services开发分布式应用
    注册dll文件
    Oracle:"ORA-00942: 表或视图不存在"
    sql_server角色成员身份权限
    10013: 以一种访问权限不允许的方式做了一个访问套接字的尝试【WCF异常】
  • 原文地址:https://www.cnblogs.com/2019wxw/p/10903378.html
Copyright © 2011-2022 走看看