五层网络模型

  • 应用层

    • 包括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. wendows 批量修改文件后缀(含递归下级)

    for /r %%a in (*.jpg)do ren "%%a" "%%~na.png" //-- or :for /r %a in (*.jpg)do re ...

  2. 使用async实现多个请求并发

    // 写法一 let [cache, cache2] = await Promise.all([cachePromise, cachePromise2]); // 写法二 let Promise= c ...

  3. LAN8720 调试笔记

    因为项目需要开始研究LAN8720,还没有仔细研究芯片手册就根据网上能找到的原理图画了第一版电路 调试整整花了我2天半,期间多亏硬汉哥的耐心解答.下面是我调试过程中遇到的一些坑   1.TPTX.TO ...

  4. 判断python socket服务端有没有关闭的方法

    通过 getattr(socket, '_closed') 的返回值可以判断服务端的运行状态. True 是关闭状态,False 是运行中. import socket ip = 'localhost ...

  5. pytorch自定义RNN结构(附代码)

    pytorch自定义LSTM结构(附代码) 有时我们可能会需要修改LSTM的结构,比如用分段线性函数替代非线性函数,这篇博客主要写如何用pytorch自定义一个LSTM结构,并在IMDB数据集上搭建了 ...

  6. FTP主动模式(Port)和被动模式(Passive)的区别

    1.FTP的PORT(主动模式): PORT中文称为主动模式,工作的原理: FTP客户端(1024以上端口)连接到FTP服务器的21端口,发送用户名和密码登录, 登录成功后要list列表或者读取数据时 ...

  7. go-使用 vscore 调试 go 语言

    { // 使用 IntelliSense 了解相关属性. // 悬停以查看现有属性的描述. // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linki ...

  8. 遇到bug怎么分析,这篇文章值得一看

    博主总结的非常到位:https://mp.weixin.qq.com/s/UpaLWjix2tnfTqybx9dmoQ 为什么定位问题如此重要? 可以明确一个问题是不是真的"bug" ...

  9. 【Java学习Day08】数据类型、变量及字节

    数据类型 强类型语言 要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用 弱类型语言 要求变量的使用要符合规定,所有变量都必须先定义后才能使用 Java的两大数据类型 public clas ...

  10. MySQL时区的问题

    我这里是在application.properties文件中配置的MySQL连接信息. 开始时间显示不征程是因为没有配置时区,后来加上了setTimeZone=Asia/Shanghai,时间显示正常 ...