zoukankan      html  css  js  c++  java
  • http

    1,http过程明明白白:http://blog.51cto.com/linux5588/1351007

      1)域名解析,浏览器会解析www.xxxx.com这个域名对应的ip,

        1,查看浏览器的自身的缓存

        2,操作系统自身的缓存

        3,host文件

        4,本地配置的dns服务器,发起递归请求,dns服务器寻找自己的缓存

        5,不行就根据,com,xxxx.com,www.xxxx.com这样dns服务器寻找

        6,结果运营商的dns服务器,windows系统内核,浏览器

      捉包的时候会看到一个ARP请求,因为局域网通信靠MAC地址,需要网关我们才能和外围的ip通信

      有时也会看到期望得到ipv6弟子,但是有时候没有

      2)发起tcp3次握手,user-Agent会以一个随机端口(1024~65535)向服务器的web程序(nginx)的80端口发起连接请求,这个连接请求经过tcp/ip模型层层封包,通过各种路由设备,进入网卡,然后层层解封包,最终到达web程序,最终建立了tcp/ip的链接。

      

      简单描述下过程:

        1,前两个操作需要SYN=1,后面两个操作需要ACK=1,前一个搞个ACK=0代表没有开始

        2,一开始发出seq=x,x代表序列,如果一开始x就是0

        3,server也发出seq=y,同理上面,还有ack=x+1表示收到x和期望收到下一个是x+1

        4,client这边也受到ack=y+1,seq是刚刚的seq=x+1

       为什么要三次握手

        两次的话,不知道client能否收到server

        4次的话,太多了

      3)那么好了Nginx在收到 浏览器 GET / 请求时,会读取http请求里面的头部信息,根据Host来匹配 自己的所有的虚拟主机的配置文件的server_name,看看有没有匹配的,有匹配那么就读取该虚拟主机的配置

      4)拿到index.html文件后,就开始解析,遇到了js/css/image等静态资源时候,就向服务器区请求下载,(静态资源在上一次没有修改的时候会返回304状态码(表示没有修改,浏览器直接读取本地的资源缓存文件)。

    2,http1.1新特性

    默认持久连接节省通信量,只要客户端服务端任意一端没有明确提出断开TCP连接,就一直保持连接,可以发送多次HTTP请求

    3,http优化

    • TCP复用:TCP连接复用是将多个客户端的HTTP请求复用到一个服务器端TCP连接上,而HTTP复用则是一个客户端的多个HTTP请求通过一个TCP连接进行处理。前者是负载均衡设备的独特功能;而后者是HTTP 1.1协议所支持的新功能,目前被大多数浏览器所支持。
    • 内容缓存:将经常用到的内容进行缓存起来,那么客户端就可以直接在内存中获取相应的数据了。
    • SSL加速(SSL Acceleration):使用SSL协议对HTTP协议进行加密,在通道内加密并加速

    相关的状态码查询:https://segmentfault.com/a/1190000013271378#articleHeader9

    4,get和post

       1)根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。.所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。

      2  )GET对数据长度有限制,当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。POST无限制。与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。在发送密码或其他敏感信息时绝不要使用 GET !参数保留在浏览器历史中。  

      3)比如一个网页地址是:

    http://www.taobao.com?itemId=123 

    你把它发给朋友,说这个东西很酷!这就是用get来获取数据最正确的方式,它有利于传播。

    但如果你用post请求获取到一个商品页面,url还是
    http://www.taobao.com

    那你把这个url分享给朋友是没有意义的。

    反过来说,如果你用
    http://www.weibo.com?uid=1&content=haha&token=xxxxxxxxxx

    来发一条内容为haha的微博,并且这个url被其他人看到了。

    那他直接把url在他那儿复制一下就可以帮你发微博了,是不是也很不合理?

    比如在微博这个场景里,GET的语义会被用在「看看我的Timeline上最新的20条微博」这样的场景,而POST的语义会被用在「发微博、评论、点赞」这样的场景中。

    参考:https://www.zhihu.com/question/28586791

    5,https

    也就是在HTTP上又加了一层处理加密信息的模块

    SSL协议主要确保几件事情:

    1. 服务器认证:客户端知道他们是在和真正的服务器通话;3

    2. 客户端认证:服务器知道他在和真正的客户端通话;5

    3. 完整性:客户端和服务器之间传输的信息不会被篡改;

    4. 加密:客户端和服务器之间的对话是私密的,无需担心被窃听;7

       1,客户端发出https请求

      2,采用https协议的服务器有有一套数字证书,可以自己制作,也可以申请,有一套公钥和私钥

      3,传递证书,就是公钥,包括证书的颁发机构,过期时间,

      4,客户端解析证书,验证公钥是否有效,没有问题的话生成一个随机值(后面用来对称加密),用证书(公钥)把他加密

      5,传递加密信息

      6,服务端用私钥解密后,得到客户端传过来的随机值,用随机值使用对称加密

      7,传输加密后的信息

      8,客户端用随机数加密信息

    6,加密和签名

      对称加密中有私钥和公钥,公钥和私钥是成对的,它们互相解密。签名的时候,用私钥加密,

      公钥解密,就能保证我是“我”发出的

    7,jwt

      https保证了传输中的安全,jwt是在应用层面的安全

    资料:https://www.cnkirito.moe/jwt-learn-3/

  • 相关阅读:
    markdown模式的一些语法
    markdown模式的一些语法
    微信小游戏跳一跳外挂教程(安卓版)
    微信小游戏跳一跳外挂教程(安卓版)
    仿百度地图上拉下滑抽屉盒
    仿百度地图上拉下滑抽屉盒
    验证码倒计时的注册页面
    验证码倒计时的注册页面
    1430 素数判定
    2834 斐波那契数
  • 原文地址:https://www.cnblogs.com/vhyc/p/9446473.html
Copyright © 2011-2022 走看看