zoukankan      html  css  js  c++  java
  • http协议工作原理及工作流程



    什么是url ?

    url = 协议 + 域名 + 资源路径 比如: https://www.baidu.com/index.html

    • http : 超文本传输协议
    • https: 安全套接字协议

    HTTP的工作原理

    访问https://mirrors.aliyun.com/centos-vault/readme.txt的时候发生了什么?
    1、浏览器解析url,对url进行解析域名对应的IP
    2、将域名交给DNS服务器,询问dns服务器该域名对应IP是什么
    3、DNS返回IP给浏览器
    4、浏览器与DNS返回的IP的80端口进行tcp连接
    5、请求站点目录下的centos-vault/readme.txt
    6、服务器响应返回一个状态码,浏览器就断开tcp连接
    7、如果状态码是2xx或者是3xx,就可以加载页面
    

    请求分析

    页面信息


    # 基本信息
    Request URL: https://www.baidu.com/   # 请求的主机
    Request Method: GET					# http请求方法
    Status Code: 200 OK					# 返回的状态码
    Remote Address: 14.215.177.39:443	# 目标主机的ip和端口
    Referrer Policy: no-referrer-when-downgrade	
    
    # 响应头部
    Bdpagetype: 1
    Bdqid: 0xbb77515a0073bd0f
    Cache-Control: private
    Connection: keep-alive		# 建立长连接
    Content-Encoding: gzip
    Content-Type: text/html;charset=utf-8		# 解析方式和字符集
    Date: Wed, 13 May 2020 02:23:21 GMT			# 日期
    Expires: Wed, 13 May 2020 02:22:25 GMT
    Server: BWS/1.1							# web服务器的名称
    Set-Cookie: BDSVRTM=0; path=/
    Set-Cookie: BD_HOME=1; path=/
    Set-Cookie: H_PS_PSSID=1438_21100_31595_31605_31270_31463_31228_30824_31163; path=/; domain=.baidu.com
    Strict-Transport-Security: max-age=172800
    Traceid: 1589336601022180301813508355054317583631
    Transfer-Encoding: chunked
    X-Ua-Compatible: IE=Edge,chrome=1
    
    # 请求头部
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3     			# 请求的资源类型
    Accept-Encoding: gzip, deflate, br		# 资源类型压缩
    Accept-Language: zh-CN,zh;q=0.9			# 资源类型语言
    Cache-Control: max-age=0				# 缓存控制,服务端的缓存
    Connection: keep-alive					# 长连接
    Cookie: BIDUPSID=C660B517FF8D703361BEF27A8E0B4A86; PSTM=1589100937; BAIDUID=C660B517FF8D7033A98FCF75B8449AC5:FG=1; BD_UPN=12314753; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; H_PS_PSSID=1438_21100_31595_31605_31270_31463_31228_30824_31163; delPer=0; BD_CK_SAM=1; PSINO=6; H_PS_645EC=94f7XUqf2UNuFyrpWJocENb5EtAFjG61sQS1yaq%2B9tPHYmQPOTzqO5NtnNU; COOKIE_SESSION=83388_0_8_5_1_8_1_1_8_2_0_0_1589201145_0_0_0_1589201330_0_1589335040%7C9%230_0_1589335040%7C1; __yjsv5_shitong=1.0_7_9449884d52ca169ba37dc788ecf839422ab2_300_1589336389184_106.84.9.86_0cf955f8; yjs_js_security_passport=057098de95624ead2bac92e4c7abd3e8b8e85870_1589336389_js; BD_HOME=1
    Host: www.baidu.com				# 访问的主机
    Sec-Fetch-Mode: navigate
    Sec-Fetch-Site: none
    Sec-Fetch-User: ?1
    Upgrade-Insecure-Requests: 1	# 客户端优先加密
    # 访问时浏览器和操作系统标识
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36
    

    HTTP请求方法


    方法(Method) 含义
    GET 请求读取一个Web页面
    POST 附加一个命名资(如Web页面)
    DELETE 删除Web页面
    CONNECT 用于代理服务器
    HEAD 请求读取一个Web页面的头部
    PUT 请求存储一个Web页面
    TRACE 用于测试,要求服务器送回收到的请求
    OPTION 查询特定选项

    返回状态码


    状态码 含义
    200 成功
    301 永久重定向(跳转)在本地缓存不清除的情况下,可以一直访问,即使服务器断开。
    302 临时重定向(跳转)服务器断开就看不了网页,http会自动跳转为https。
    304 本地缓存,先打开一次网页,再刷新的时候,会使用本地缓存
    307 内部重定向(跳转)
    400 客户端错误
    401 认证失败
    403 找不到主页,权限不足;站点目录没有内容,或者权限不足的情况
    404 找不到页面
    405 请求方法不被允许
    500 内部错误,比如:数据库被停掉
    502 找不到后端主机 bad gateway
    503 服务器过载,服务端请求限制,被ddos攻击的时候可以这样返回。
    504 后端主机超时

    2xx和3xx可以正常访问

    4xx都是nginx的报错

    5xx后端报错(nginx后面连接的服务报错:mysql、php、tomcat、redis)

    正常访问网页的时候基本信息里面返回的状态码:

    使用了本地缓存加载网页

    访问一个不存在的资源的时候

    没有默认站点的情况

    个人主页输入用户名和密码访问失败的时候


    referer


    HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。


    HTTP请求过程


    1.用输入域名 -> 浏览器跳转 -> 浏览器缓存 -> Hosts文件 -> DNS解析
    
    2.由浏览器向服务器发起TCP连接。
    
    3.客户端发起http请求:
        1)请求的方法是什么:     GET获取
        2)请求的Host主机是:     www.baidu.com
        3)请求的资源是什么:     /index.html
        4)请求的端端口是什么:    默认http是80 https是443
        5)请求携带的参数是什么:   属性(请求类型、压缩、认证、浏览器信息、等等)
        6)请求最后的空行
    4.服务端响应的内容是
        1)服务端响应使用WEB服务软件
        2)服务端响应请求文件类型
        3)服务端响应请求的文件是否进行压缩
        4)服务端响应请求的主机是否进行长连接
    5.客户端向服务端发起TCP断开
    


  • 相关阅读:
    没有被实例化的类 中的 非static成员函数竟然也可以被调用。。。前提是该成员函数没有用到成员变量
    c++注意
    关于类大小的小试验
    C语言|博客作业02
    在C#中进行时间和时间戳的转换
    正则表达式中匹配中括号 [ ]
    在C#中将对象序列化成Json格式
    在MSSQL中的简单数据类型递归
    HTML中padding和margin的区别和用法
    C#中的对称加密
  • 原文地址:https://www.cnblogs.com/gshelldon/p/13287959.html
Copyright © 2011-2022 走看看