zoukankan      html  css  js  c++  java
  • HTTP

    http
    web服务,是目前最重要的服务应用

    平台
    LNMP
    HTTP服务程序

    Linux:
        Apache
        Nginx
        LAMP LNMP
    Windows:    
        IIS
        从Linux平台移植的Apache,Nginx

    HTTP协议,超文本传输协议,Hyper Text Transfer Protocol
    1.什么是超文本?
    包含有超链接(Link)和各种多媒体元素标记的文本.这些超文本文件彼此链接,形成网状(Web),因此又被称为网页(
    Web Page)。这些链接使用URL表示。最常见的超文本格式是超文本标记语言HTML。
    2.什么是URL,统一资源定位符
    一般首页,都会使用index.html index.php index.jsp

    3.超文本传输http协议是什么?
    是一种按照URL指示,将超文本文档从一台主机(Web服务器)传输到另一台主机(浏览器)的应用层协议,以实现超链接的功能

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

    http的短连接:建立一次tcp的连接,发起一次http的请求,结束,tcp断开。
    http的长连接:建立一次tcp的连接,发起多次http的请求,结束,tcp断开。

    1.http请求报文的方法

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

    2.http返回状态码(Status-Code),以3位数字组成

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

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

    //1.General概况
    Request URL: https://www.baidu.com/  # 请求的URL
    Request Method: GET                  # 请求的方法
    Status Code: 200 OK                  # 当前的状态
    Remote Address: 180.101.49.12:443    # 远程的主机
    
    //2.request headers客户端请求的头部信息
    Accept: text/html,                      # 请求的类型
    Accept-Encoding: gzip, deflate, br   # 是否进行压缩
    Accept-Language: zh-CN,zh;q=0.9      # 请求的语言
    Cache-Control: max-age=0              # 缓存
    Connection: keep-alive               # TCP长连接
    Host: www.baidu.com                     # 请求的域名
    If-Modified-Since: Fri, 04 May 2019  # 修改的时间       
    If-None-Match: "a49-56b5ce607fe00"   # 标记
    Upgrade-Insecure-Requests: 1         # 在http和https之间起一个过渡作用
    User-Agent: Mozilla/5.0              # 请求浏览器工具
    "=== 请求一个空行 ==="
    "=== 请求内容主体 ==="
    
    //3.response headers服务器端响应的头部信息
    HTTP/1.1 304 Not Modified                # 返回服务器的http协议,状态码
    Date: Sun, 02 Feb 2020 10:13:18 GMT     # 返回服务器的时间
    Server: BWS/1.1                            # 返回服务器使用的软件
    Connection: keep-alive                    # TCP长连接
    Keep-Alive: timeout=5,max=100           # 长连接的超时时间
    ETag: "a49-56b5ce607fe00"               # 验证客户端标记
    "=== 返回一个空行 ==="
    "=== 返回内容主体 ==="

    4.Http相关术语pv、ip、uv
    pv: 页面浏览量
    uv:独立的客户
    ip:独立IP

    例子:假设公司有100人,每个人有一台电脑和一部手机,都是通过公式的宽带接入上网,上网都是通过nat转换出口,
    每个人点击网站两次,请问对应的pv,uv,ip分别是多少
    pv:400 uv:200 ip:1

    Http访问流程

     

    http协议原理

    1.用户输入域名->浏览器跳转->app缓存->DNS解析(递归查询|迭代查询)
        客户端向服务端发起查询->递归查询
        服务端向服务端发起查询->迭代查询
    2.由浏览器向服务端发起TCP连接(三次握手)
        客户端  -->请求包连接-syn=1 seq=1
        服务端  -->响应客户端syn=1 ack=x+1 seq=y
        客户端  -->建立连接ack=y+1 seq=x+1
        重置:rst
    3.客户端发起http请求:
        1.请求的方法是什么:Get获取 Post上传
        2.请求的Host主机是:www.oldboyedu.com
        3.请求的资源是什么:/index.html(index.php index.jsp index.asp)
        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.客户端发起http请求,请求会先抵达前端的防火墙
    2.防火墙识别用户身份,通过内部交换机将正常的请求通过tcp连接负载均衡,建立三次握手,传递用户的http请求
    3.负载接受到请求,会根据请求的内容进行下发任务,通过tcp连接web服务器,发送用户的http请求
    4.web接受到用户的http请求后,会根据用户请求内容进行解析,解析分为如下:
        静态请求:由web服务器向nfs建立tcp连接,获取对应的图片,最后返回给负衡(负载均衡->防火墙->用户)
        动态请求:由web向后端的动态程序建立TCP连接,将用户的动态http请求传递动态程序->由动态程序进行解析
    5.动态程序在解析的过程中,如果碰到查询数据库的请求,则优先和缓存建立tcp连接,然后焕春服务器发起http的查询
    6.如果缓存没有对应的数据,动态程序再次向数据库建立tcp的连接,然后发起查找.
    7.由数据库返回->动态程序->缓存->Web服务->负载均衡->防火墙->用户。

    用户访问网站流程面试时需注意:

    按照五层架构模型回答 CDN层->负载层->WEB层->存储层->缓存层->数据库层
    同时需要注意,每一层都有对应的缓存机制 

    DNS解析流程

    1)本地缓存
    2)本地hosts
    3)通过递归查询将DNS解析请求发送至本地DNS
        ISP DNS
        网关
        自己搭建的Cache DNS    
            看自己的缓存
    4)通过迭代查询将dns解析请求发送至互联网 DNS
        13台根域服务器
            域名解析的记录指针
                NS记录 name server,负责解析的DNS服务器信息
                MX记录 mail server,负责收发邮件服务器信息
                A记录 主机记录,正向解析,域名->IP
                PTR记录 方向解析,IP->域名
  • 相关阅读:
    js设计模式 -- 装饰模式
    前端项目开发(持续补充中)
    URL地址解析
    line-height有无单位区别
    HTTP请求Response Headers
    HTTP请求Request headers
    docker快速入门
    关于layui动态生成文件上传按钮后点击无效的解决办法
    未证实的一个BUG
    实现一个简单的概率发奖问题
  • 原文地址:https://www.cnblogs.com/xmtxh/p/12254162.html
Copyright © 2011-2022 走看看