首页 > 其他分享 >Http协议

Http协议

时间:2024-03-28 21:23:46浏览次数:14  
标签:协议 HTTP 浏览器 请求 TCP Http 响应 服务器

目录


HTTP工作原理

  1. 浏览器向DNS服务器请求解析该URL中的域名所对应的IP地址

    • 当用户在浏览器地址栏输入一个URL(如www.example.com)并按下回车时,浏览器首先需要知道这个域名对应的IP地址是什么。
    • 浏览器会检查其本地缓存(如hosts文件或之前的DNS查询缓存),看看是否已经有这个域名的IP地址记录。如果没有,它会向配置的DNS服务器发送查询请求。
    • DNS服务器会逐级查询(从根域名服务器开始,到顶级域名服务器,再到权威域名服务器),最终找到www.example.com对应的IP地址,并将其返回给浏览器。
  2. 解析出IP地址后,根据该IP地址和默认端口号80(对于HTTP)或443(对于HTTPS),与服务器建立TCP连接

    • 一旦浏览器获得了目标服务器的IP地址,它就会尝试与该服务器建立TCP连接。这通常涉及到一个称为“三次握手”的过程,以确保双方都能可靠地发送和接收数据。
    • 对于HTTP协议,默认使用的端口号是80。如果网站使用HTTPS(即安全的HTTP),则默认端口号是443。
  3. 浏览器发出HTTP请求给服务器

    • 一旦TCP连接建立成功,浏览器就会通过这个连接向服务器发送一个HTTP请求。这个请求通常包括一个请求行(指定请求方法、请求的资源路径和HTTP协议版本)、一些请求头部(包含有关请求的额外信息,如浏览器类型、接受的内容类型等),以及可能的一个请求体(包含发送给服务器的数据,如在表单提交时)。
  4. 服务器对浏览器请求做出响应,并把对应的html文本发送给浏览器

    • 服务器接收到浏览器的HTTP请求后,会解析请求并根据其内容做出相应的处理。例如,如果请求是获取一个网页,服务器可能会从文件系统中读取相应的HTML文件,或者运行一些服务器端代码来动态生成HTML内容。
    • 服务器会构建一个HTTP响应来回复浏览器。这个响应通常包括一个状态行(指示请求的处理结果,如“200 OK”表示成功),一些响应头部(包含有关响应的额外信息,如内容类型、缓存策略等),以及一个响应体(包含实际的HTML内容或其他数据)。
  5. 释放TCP连接

    • 在HTTP/1.0中,每个请求/响应对之后都会关闭TCP连接。这被称为“短连接”。然而,这种方式效率较低,因为每次请求都需要重新建立连接。
    • 在HTTP/1.1及更高版本中,引入了“持久连接”(也称为“长连接”)的概念。在这种模式下,多个请求/响应对可以通过同一个TCP连接连续发送,而不需要每次都关闭和重新打开连接。这大大提高了性能,特别是在需要加载多个资源(如图片、CSS文件、JavaScript脚本等)的网页上。
  6. 浏览器将该html文本显示出来

    • 浏览器接收到服务器的HTTP响应后,会解析响应中的HTML内容,并根据其内容构建DOM树(文档对象模型)。DOM树是一个表示网页结构的节点树,它允许JavaScript等客户端脚本动态地修改网页内容。
    • 一旦DOM树构建完成,浏览器就会开始加载和解析与HTML相关联的其他资源(如CSS文件、JavaScript脚本、图片等)。这些资源可能会从服务器的不同位置(甚至不同的服务器)获取。
    • 最终,浏览器会将所有加载的资源整合到一起,并渲染出完整的网页供用户查看。

  1. 浏览器解析URL并发起DNS查询

    • 用户在浏览器地址栏输入一个URL,如 http://www.example.com
    • 浏览器首先检查本地缓存或操作系统缓存中是否已有该域名对应的IP地址记录。如果有且未过期,可以直接使用;否则,浏览器需要向DNS服务器发起查询请求。
    • 查询过程中可能经过递归或迭代的方式,经过本地DNS缓存、ISP的DNS服务器、根域名服务器、顶级域名服务器(如.com服务器),直至权威DNS服务器,最终获得域名 www.example.com 对应的IP地址。
  2. 浏览器与服务器建立TCP连接

    • 浏览器根据解析得到的IP地址,使用TCP协议与服务器建立连接。默认情况下,HTTP协议使用TCP端口80,但如果URL中指定了其他端口(如 http://www.example.com:8080/page.html),则使用指定端口。
    • 这个过程包括TCP三次握手,即SYN、SYN-ACK、ACK序列,确保客户端和服务器之间建立起可靠的数据传输通道。
  3. 浏览器发送HTTP请求

    • 建立TCP连接后,浏览器构造并发送一个HTTP请求报文给服务器。请求报文通常包含以下几个部分:
      • 请求行:包含请求方法(如GET、POST、PUT等)、请求URI(统一资源标识符,如 /page.html)以及HTTP协议版本(如HTTP/1.1)。
      • 请求头:一系列键值对,提供关于客户端环境、请求内容格式、缓存控制、认证信息等相关信息,如User-AgentAccept-EncodingCookie等。
      • 空行:用于分隔请求头和请求体。
      • 请求体:对于如POST、PUT等方法,可能包含请求的具体数据(如表单数据、JSON对象等)。对于GET请求,通常没有请求体。
  4. 服务器处理请求并返回HTTP响应

    • 服务器接收到HTTP请求后,解析请求报文,根据请求方法和URI确定要执行的操作(如读取文件、运行脚本等)。
    • 服务器生成HTTP响应报文,其结构包括:
      • 状态行:包含HTTP协议版本、状态码(如200表示成功、404表示未找到、500表示服务器内部错误等)以及状态消息(如OKNot Found)。
      • 响应头:类似于请求头,提供关于响应内容、服务器信息、缓存指示、安全设置等元数据,如Content-TypeServerSet-Cookie等。
      • 空行:同样用于分隔响应头和响应体。
      • 响应体:包含请求所请求的实际内容,如HTML文档、图片、JSON数据等。如果是请求静态网页,服务器直接返回对应的HTML文本。
  5. 关闭TCP连接

    • 一旦服务器完成响应发送,通常在响应头中通过Connection字段指示是否保持TCP连接(如Keep-Alive)。如果双方同意保持连接(或使用HTTP/2、HTTP/3等支持多路复用的协议),后续请求可以复用同一连接以提高效率。否则,按照HTTP/1.1之前的默认行为,每个请求完成后会关闭TCP连接。
  6. 浏览器解析并渲染响应

    • 浏览器接收并解析HTTP响应,尤其是响应体中的HTML文档。
    • 根据HTML的结构,浏览器构建DOM树(Document Object Model),并加载CSS样式表(如有)以构建CSSOM(CSS Object Model)。
    • 浏览器将DOM和CSSOM合并成渲染树(Render Tree),计算布局(Layout),然后进行绘制(Paint),最终将渲染结果呈现给用户。
    • 在此过程中,浏览器可能发现HTML中引用的其他资源(如JavaScript文件、图片、字体等),对这些资源发起额外的HTTP请求,并重复上述流程。

综上所述,从在浏览器地址栏键入URL到页面内容显示,涉及了DNS查询、TCP连接建立、HTTP请求与响应交换、TCP连接关闭以及浏览器的解析渲染等多个环节,共同构成了HTTP工作原理的整体过程。

标签:协议,HTTP,浏览器,请求,TCP,Http,响应,服务器
From: https://www.cnblogs.com/yubo-guan/p/18102647

相关文章

  • 说说 HTTP1.0/1.1/2.0 的区别?
     一、HTTP1.0HTTP协议的第二个版本,第一个在通讯中指定版本号的HTTP协议版本HTTP1.0 浏览器与服务器只保持短暂的连接,每次请求都需要与服务器建立一个TCP连接服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求简单来讲,每次与服务器交互,都需要新......
  • iOS系统下最佳的3款HTTP抓包工具:Thor、克魔助手和Http Catcher
     引言在苹果手机的iOS系统相对封闭的情况下,抓包工具并不是很常见。大多数人可能对这类工具并不熟悉,除了少数安全专家之外,一般用户很少会接触到这些工具。然而,在某些特定场景下,比如网络调试、安全测试等,抓包工具的作用不可忽视。本文将介绍三款在iOS系统下比较优秀的HTTP抓包App......
  • fatal: 无法访问 ‘https://github.com/pupupupupi/mysql_8.0.31.git/‘:Failed to con
    解决方法:1.更新系统:sudoaptupdatesudoaptupgrade2.安装git:sudoaptinstallgit3.验证git是否成功安装git--version//以上步骤如果已操作可以忽略此时我们发现可以clone了:如果仍不能clone,检查连接的网络状态,例如把校园网切换为手机热点或者是其他网速好的网络!!!本......
  • url = f‘http://{host}:{port}{requests_url}‘ 中 f是干嘛的
    在Python中,f前缀用于字符串格式化,它表示这是一个f-string(格式化字符串字面量)。f-string是Python3.6及更高版本中引入的一种新的字符串格式化机制,允许你在字符串中直接嵌入表达式,并且表达式的值会被直接插入到字符串中。在你提供的代码片段中:url=f'http://{host}:{port}......
  • 逻辑链路控制与适配协议(L2CAP)
    逻辑链路控制与适配协议通常简称为L2CAP(LogicalLinkControlandAdaptationProtocol),它向上连接应用层,向下连接控制器层,发挥主机与控制器之间的适配器的作用,使上层应用操作无需关心控制器的数据处理细节。经典蓝牙的L2CAP层比较复杂,它实现了协议复用、数据分段与重组、封装......
  • 五大获取免费SSL证书/https证书的方式
    SSL证书的必要性:从2018年7月1日开始,谷歌浏览器(Chrome)将显示所有未使用SSL证书的网站标记为“不安全”,而拥有SSL证书的网站的权重排名都会获得提升。现在各大浏览器都有自己的标记方式来标注网站的“不安全”。各大搜索引擎也会更加注重网站安全性来进行网站的排名。随着企业与网......
  • HTTP协议
    目录一、HTTP协议二、HTTP协议工作的过程三、HTTP协议格式1.抓包工具介绍2.抓包工具的原理3.抓包的结果四、HTTP请求1.认识URL2.关于URLencode3.认识"方法"(method)1.GET方法2.POST方法 3.其他方法4.请求"报头"(header)方法五、HTTP响应详解1.认识"状态码"2.认......
  • 【计算机网络】应用层——万维网和HTTP协议
    万维网万维网www(WorldWideWeb)是一个大规模的、联机式的信息储藏所/资料空间,是无数个网络站点和网页的集合。资源(文字、视频、音频...)统一资源定位符URL,唯一标识资源!用户通过点击超链接(http://www.baidu.com)获取资源,这些资源通过超文本传输协议(HTTP)传送给使用者。......
  • 【计算机网络】应用层——文件传输协议FTP
    文件传输协议FTPTFTP是比较简单,比较小的。文件传送协议FTP(FileTransferProtocol)提供不同种类主机系统(硬、软件体系等都可以不同)之间的文件传输能力。是一种拷贝,主要提供上传和下载。FTP服务器和用户端FTP是基于客户/服务器(C/S)的协议。用户通过一个客户机程序连接......
  • JavaWeb——HttpServletRequest获取请求头信息和请求中的参数信息用法
    HttpServletRequest接口提供了访问HTTP请求信息的方法,包括请求行和请求头。下面是一些常用的HttpServletRequest方法,用于获取请求行和请求头信息。StringgetMethod():返回请求的HTTP方法,如GET、POST等。StringgetRequestURI():返回请求的URI,不包括查询字符串。String......