五层网络模型

  • 应用层

    • 包括HTTP,FTP...

      • HTTP支持客户/服务器模式
      • 简单快速有getpost方法
      • 灵活,可以传输任意类型
      • 无连接,每次连接只处理一个请求,收到应答就关闭
      • 无状态,对于事物处理没有记忆能力
      • 1.1有个长连接技术keepalive
    • 为应用软件提供了很多服务request,get,post
    • 屏蔽了很多网络传输细节
    • 构建在TCP协议之上
  • 传输层
    • 包括TCP,UDP
    • 向用户提供可靠的端到端服务
    • 向高层屏蔽了数据通信的细节
  • 网络层
    • 为数据在节点之间传输创建逻辑链路
  • 数据链路层
    • 通信实体间建立数据链路的连接(电脑的0101类的)
  • 物理层
    • 定义物理设备如何传输数据

HTTP请求结构

抓包:

HTTP请求和响应的步骤

  • 客户端连接导Web服务器,http默认端口80,建立套接字连接。
  • 发送HTTP请求,客户端向服务器发送文本的请求报文,
  • 服务器接受请求并返回HTTP响应,Web服务器解析请求,写到tcp套接字,由客户端读取
  • 释放TCP连接
  • 客户端浏览器解析HTML内容,查明状态代码,字符集,语法,并展示

浏览器输入一个URL,会发生什么

  • DNS解析(浏览器根据URL,逐层查询DNS服务器缓存,解析URL中的域名所对应的IP地址)

    • 缓存大致有:浏览器缓存、系统缓存、路由器缓存。。等
  • IP地址和端口建立TCP连接(3次握手)
  • 发送HTTP请求
  • 服务器处理请求,并返回HTTP报文
  • 浏览器解析渲染页面
  • 连接结束(四次挥手)

HTTP状态码

  • 三位数组成,相应类别有5种

    • 1xx:指示信息--表时请求已接收,继续处理
    • 2xx:成功--表时请求已被成功接收、理解、接受
    • 3xx:重定向--要完成请求必须进行更进一步的操作
    • 4xx:客户端错误--请求由于发错误或请求无法实现
    • 5xx:服务器端错误--服务器未实现合法的请求

HTTP三次握手

三次网络传输,才能创建http连接,确认连接过程,排除网络原因浪费网络资源。

图中就是大致的传输参数。

HTTP长连接

如何理解HTTP的无连接、短连接、长连接?:https://segmentfault.com/a/1190000015821798

浏览器请求头的Connection:(http1.1)keep-alive 希望服务端保持长连接(状态为close时,每次请求之后,请求就会关闭)

信道复用(http2),一个域名一个tcp连接,速度提升很大。


--资料来源:HTTP协议原理+实践Web开发工程师必学、剑指Java面试-Offer直通车

HTTP相关知识学习的更多相关文章

  1. 客户端相关知识学习(十二)之iOS H5交互Webview实现localStorage数据存储

    前言 最近有一个需求是和在app中前端本地存储相关的,所以恶补了一下相关知识 webView开启支持H5 LocalStorage存储 有些时候我们发现写的本地存储没有起作用,那是因为默认WebVie ...

  2. 客户端相关知识学习(十一)之Android H5交互Webview实现localStorage数据存储

    前言 最近有一个需求是和在app中前端本地存储相关的,所以恶补了一下相关知识 webView开启支持H5 LocalStorage存储 有些时候我们发现写的本地存储没有起作用,那是因为默认WebVie ...

  3. 客户端相关知识学习(六)之deeplink技术

    Deeplink应用描述 Deeplink,简单讲,就是你在手机上点击一个链接之后,可以直接链接到app内部的某个页面,而不是app正常打开时显示的首页.不似web,一个链接就可以直接打开web的内页 ...

  4. Python 多线程相关知识学习

    多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理. 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进 ...

  5. 服务端相关知识学习(三)Zookeeper的配置

    前面两篇文章介绍了Zookeeper是什么和可以干什么,那么接下来我们就实际的接触一下Zookeeper这个东西,看看具体如何使用,有个大体的感受,后面再描述某些地方的时候也能在大脑中有具体的印象.本 ...

  6. View相关知识学习总结

    (一)LayoutInflater原理分析 LayoutInflater主要用于加载布局.通常情况下,加载布局的任务都是在Activity中调用setContentView()方法来完成的,该方法内部 ...

  7. 【OpenStack】network相关知识学习

    network 类型 local:通信不跨主机,必须同一网段,主要做单机测试使用: flat:统计可以跨主机,但是需要在同一网段: 每个 flat network 都会独占一个物理网卡 计算节点上 b ...

  8. Python 网络编程相关知识学习

    Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...

  9. jmeter相关知识学习记录

    基于Jmeter5.2.1 断言之响应断言 响应断言:对服务器的响应接口进行断言校验,来判断接口测试得到的接口返回值是否正确. 测试字段就是指要断言的内容的匹配处. 响应文本:就是响应的body部分: ...

  10. 客户端相关知识学习(十)之app给h5传递数据

    方法一: app可以把参数传到h5的链接里,用类似?xx=xx&xx=xx的形式拼接,js解析参数即可. 方法二: 情况一:app调用h5 原生app都可以对js的function进行触发,前 ...

随机推荐

  1. 针对Vmware打开BIOS中VT虚拟化相关后仍然报错

    安装虚拟机时报错问题现象:  通过VMware虚拟机安装Centos时提示弹出提示框,"已将该虚拟机配置为使用64位客户机操作系统,但是,无法执行64位操作."具体提示如下图所示: ...

  2. vdom diff

    其实diff的核心在于两点: 比对(diff的运算过程) 修改(diff的返回结果,输出生成的patch并操作) 树的BFS(广度优先遍历)/DFS(深度优先遍历),需要O(N)的时空复杂度 传统di ...

  3. Mysql 无法使用注释 带注释执行报错 Dbeaver

    一.场景 执行时,前面带一段注释,在dbeaver执行报语法错误 二.解决办法 在注释后面插入一个空格,识别注释后变成灰色,执行成功

  4. Java基础——IO模型详解

  5. make vscode portable together with its extensions

    0. the goal make vscode poratable together with its extensions, so that the offline pc could make us ...

  6. .Net的产品变迁

    从开始接触.Net以来,转眼过了好几年.在这许多年里,不得不感慨.Net产品线也在不断发生着变化, 下面就简单的进行一下梳理. .Net能做桌面应用程序,也就是C/S,也能做网站开发,就是通常说的B/ ...

  7. drush use dev.mentor.com | expecting statement

    在多站点的环境中, 不清楚在哪个目录下运行drush cc all, 这时可以运行 drush use dev.mentor.com然后还发现一个很搞笑的事情, 在一个文件的末尾一直现实红色报错符号, ...

  8. 阻止form表单默认跳转

    form表单提交后,会默认跳转

  9. 最简单的应用flask

    服务端 # -*- coding: utf-8 -*- from flask import Flask,request flask_app = Flask('55kai') @flask_app.ro ...

  10. pdf2docx:可将 PDF 转换成 docx 文件的 Python 库

    pdf2docx:https://github.com/dothinking/pdf2docx 可将 PDF 转换成 docx 文件的 Python 库. from pdf2docx import p ...