zoukankan      html  css  js  c++  java
  • nginx学习一:http协议

    概述

    HTTP (HyperText Transfer Protocol) 超文本传输协议

    什么是超文本?

    • 包含有超链接(Link)和各种多媒体元素标记的文本。

    • 这些超文本文件彼此链接,形成网状(Web),因此又被称为网页(Web Page),这些链接用 URL 表示

      • 什么是 URL?统一资源定位

    • 最常见的超文本格式 HTML(超文本标记语言)

    什么是超文本协议?

    • 按照URL指示,将超文本文档从一台主机(web服务器),传输到另一台主机( 浏览器)的应用层协议。

    http

    简单说http工作原理:

    1. 用户通过浏览器输入URL,http://www.baidu.com
    2. DNS解析,将域名解析为IP
    3. 用户通过IP和web服务器建立TCP连接
    4. 通过 HTTP 发送请求报文
    5. 服务器解析请求,响应报文
    6. 浏览器收到响应报文,将代码解析为我们能看懂的页面
    7. TCP断开

    http短连接、长连接

    # http是建立在tcp之上的,tcp连接成功才有http
    短连接:建立一次tcp连接,发起一次http请求,结束,tcp断开
    长连接:建立一次tcp连接,发起多次http请求,结束,tcp断开
    

    http请求报文的方法

    get  # 获得请求文件信息的数据内容(下载)
    post  # 用户提交数据到服务器端存储(上传)
    

    http返回状态码

    200  成功
    301  永久重定向(redirect),不支持修改
    302,307  临时重定向(redirect),支持修改
    304  浏览器缓存
    403  请求不到首页,权限被拒绝
    404  资源找不到
    500  服务器内部错误,程序代码错误
    502  找不到后端资源
    504  请求超时
    
    重定向:
    	我们访问 http://www.baidu.com,跳转到 https://www.baidu.com,状态307
    

    用户访问网站携带的参数,以及服务端返回的参数

    # 1、概况
    Request URL: http://192.168.190.58/index.html   # 请求的URL地址
    Request Method: GET                             # 请求的方法(获取)
    Status Code: 200 OK                
    Remote Address: 192.168.190.58:80               # 请求的地址
    
    # 2、客户端请求的头部信息
    Accept: text/html                             # 请求类型
    Accept-Encoding: gzip, deflate                # 是否进行压缩
    Accept-Language: zh-CN,zh;q=0.9               # 请求的语言
    Cache-Control: max-age=0                      # 缓存
    Connection: keep-alive                        # 长连接
    Host: 192.168.190.58                          # 请求的域名
    If-None-Match: "b-5a1b8c1b8ff0e"					    # 标记
    Upgrade-Insecure-Requests: 1                  # 在 http和https之间起的一个过渡作用,浏览器加的
    User-Agent: Mozilla/5.0                       # 请求浏览器的工具
    "=== 请求一个空行 ==="     
    "=== 请求内容主体 ==="     
    
    # 3、服务端响应的头部信息
    Accept-Ranges: bytes
    Connection: Keep-Alive                         # TCP长连接
    Content-Length: 11      
    Content-Type: text/html; charset=UTF-8
    Date: Thu, 26 Mar 2020 03:03:40 GMT            # 返回服务器的时间
    ETag: "b-5a1b8c1b8ff0e"                        # 验证客户端标记
    Keep-Alive: timeout=5, max=100
    Last-Modified: Thu, 26 Mar 2020 02:29:39 GMT
    Server: Apache/2.4.6 (CentOS)                  # 返回服务器使用的软件
    "=== 返回一个空行 ==="     
    "=== 返回内容主体 ==="     
    

    http相关术语 pv、ip、uv

    假设公司有一座大厦,大厦100人,每个人有一台电脑和一部手机,都是通过公司的宽带接入上网,上网都是通过 nat 转换(网络地址转换)出口,每个人点击网站 2 次,请问对应的 pv 、uv 、ip 分别是多少?
    PV:页面浏览量  400
    uv:独立的客户端  200
    ip:独立ip(公网地址)  1个
    

    步骤

    步骤一:DNS解析过程

    1. 本地缓存
    2. 本地 hosts
    3. 通过递归查询,将DNS解析请求发送至本地DNS
      1. ISP DNS
      2. 网关(本身能上网,实现缓存)
      3. 自己搭建的 Cache DNS
        1. 看自己的缓存
    4. 通过迭代查询,将 DNS 解析请求发送至互联网,DNS服务器
      • 13台根域服务器
      • 域名解析的记录指针
        • NS记录 name server ,负责解析的DNS服务器信息
        • MX记录 mail server,负责收发邮件服务器信息
        • A记录 主机记录,正向解析,域名->IP
        • PTR记录 反向解析 IP->域名

    • 域名结构

    步骤二:客户端请求

    步骤三:服务器响应

    http协议原理

    1、用户输入域名 -> 浏览器跳转 -> app缓存 -> DNS解析(递归查询 | 迭代查询)

    客户端向运营商域名服务端发起查询 -> 递归查询
    运营商域名服务端向internet域名服务端(根域名等)发起查询 -> 迭代查询
    
    Cache DNS: 规模较大公司会配一个,缓存 DNS 记录
    

    2、由浏览器向服务端发起 TCP 连接(三次握手)

    客户端  --> 请求包连接 syn=1 seq=x(序列号)                          服务端
    服务端  --> 响应客户端 syn=1 ack=x+1(确认号=序列号+1) seq=y(序列号)  客户端
    客户端  --> 建立连接   ack=y+1 seq=x+1                             服务端
    

    3、客户端发起 http 请求

     1、请求的方法是什么:get
     2、请求的Host主机是:www.baidu.com     (其实是:www.baidu.com.)
     3、请求的资源是什么:/index.html
     4、请求的端口是是什么:默认http是80  https是443
     5、请求携带的参数是:属性(请求类型、压缩、认证...)
     6、请求最后的空行
    

    4、服务端响应的内容是

    1、服务端响应使用的 WEB 服务软件
    2、服务器响应请求文件的类型
    3、服务端响应请求的文件是否进行压缩
    4、服务端响应请求的主机是否进行长连接
    

    5、客户端向服务端发起tcp断开(四次挥手)

    客户端  -->  断开请求 fin=1 seq=x          --> 服务端
    服务端  -->  响应断开 fin=1 ack=x+1 seq=y  --> 客户端
    服务端  -->  断开连接 fin=1 ack=x+1 seq=z  --> 客户端
    客户端  -->  确认断开 fin=1 ack=z+1 seq=n  --> 服务端
    

    用户访问网站整体流程

    1. 用户打开浏览器 -> 输入URL
    2. 查找浏览器缓存,没有缓存,开始正常流程
    3. 通过 DNS 解析 URL 对应的 ip 地址
    4. 通过 ip 地址向 web 服务器发送 tcp 连接请求
      1. 网络设备(交换机、路由器),转发数据
      2. 网站所在平台的私网防火墙,访问控制(用户识别,什么能进什么不能进)
      3. 负载均衡调度器,实际上是和调度器建立三次握手后,将http请求发送给调度器
    5. 调度器将 http 请求发送给 web 服务器
    6. http 的工作原理
    7. http 服务器响应数据的过程
      1. 静态
        1. nfs
      2. 动态
        1. mysql
        2. redis
    8. 返回数据 数据库 -> redis -> web -> LB(负载,高可用HA)-> network -> 浏览器
  • 相关阅读:
    is(C# 参考)
    索引器(C# 编程指南)
    修改IIS文件上传大小限制
    Sql Server判断某列字段是否为空或判断某列字段长度
    Linq分页查询
    H5网页播放器播不了服务器上的mp4视频文件
    [你必须知道的.NET] 第八回:品味类型---值类型与引用类型(上)-内存有理
    如何通过ildasm/ilasm修改assembly的IL代码
    Python实战之set学习笔记及简单练习
    Python实战之int学习笔记及简单练习
  • 原文地址:https://www.cnblogs.com/KbMan/p/14338964.html
Copyright © 2011-2022 走看看