首页 > 其他分享 >一次完整的HTTP请求过程

一次完整的HTTP请求过程

时间:2023-02-15 20:15:10浏览次数:52  
标签:Web 浏览器 请求 TCP 完整 服务器 HTTP 连接

HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤:

1、建立TCP连接

  在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet, 即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之 后才能,才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。

2、Web浏览器想Web服务器发送请求命令

  一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令。

3、Web浏览器发送请求头信息

  浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。

4、Web服务器应答

  客户机向服务器发出请求后,服务器会客户机回送应答, HTTP/1.1 200 OK ,应答的第一部分是协议的版本号和应答状态码。

5、Web服务器发送应答头信息

  正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。

6、Web服务器向浏览器发送数据

  Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。

7、Web服务器关闭TCP连接

  一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,但是如果浏览器或者服务器在其头信息加入了这行代码:Connection:keep-alive 

  TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

TCP连接的过程

在浏览器地址输入栏输入了一段地址之后会有如下操作依次发生:

在浏览器的地址栏输入 www.linux178.com ,然后回车,回车这一瞬间到看到页面到底发生了什么呢?

域名解析 --> 发起TCP的3次握手 --> 建立TCP连接 --> 发起http请求 --> 服务器响应http请求 --> 浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户。

1、域名解析

首先Chrome浏览器会解析 www.linux178.com 这个域名(准确的叫法应该是主机名)对应的IP地址。怎么解析到对应的IP地址?

① Chrome浏览器会首先搜索浏览器自身的DNS缓存(缓存时间比较短,大概只有1分钟,且只能容纳1000条缓存),看自身的缓存中是否有www.linux178.com 对应的条目,而且没有过期,即如果有且没有过期则解析到此结束。

 注:我们怎么查看Chrome自身的缓存:可以在浏览器上输入 chrome://net-internals/#dns 来进行查看。

② 如果浏览器自身的缓存里面没有找到对应的条目,那么Chrome会搜索操作系统自身的DNS缓存,如果找到且没有过期则停止搜索解析到此结束。

注:怎么查看操作系统自身的DNS缓存:Windows操作系统(可以终端使用 ipconfig /displaydns 命令行方式来进行查看);

 

 

 

关于HTTP协议可以参考以下:

HTTP协议漫谈:  http://kb.cnblogs.com/page/140611/ HTTP协议概览: http://www.cnblogs.com/vamei/archive/2013/05/11/3069788.html HTTP Headers讲解:http://kb.cnblogs.com/page/55442/ TCP连接讲解:https://blog.csdn.net/weixin_51338848/article/details/127691543

 

 

标签:Web,浏览器,请求,TCP,完整,服务器,HTTP,连接
From: https://www.cnblogs.com/hls-code/p/17124479.html

相关文章

  • Java开发工具IntelliJ IDEA 2020.2完整授权流程
    最近几年,Java的技术栈发展的非常快,Java作为一门十分流行的面向对象编程语言,其开发工具也是非常多的,当然因为接触时间长短以及个人喜好,每个人都有自己的选择。对此,我对目前......
  • 异步请求池的实现
    今天分享一个异步请求池的例子。首先我们先看一个正常的阻塞的DNS解析的例子。#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#inc......
  • 真正“搞”懂HTTPS协议17之TLS握手
    经过前两章的学习,我们知道了通信安全的定义以及TLS对其的实现~有了这些知识作为基础,我们现在可以正式的开始研究HTTPS和TLS协议了。嗯……现在才真正开始。我记得......
  • 无法加载源 https://api.nuget.org/v3/index.json 的服务索引
    .net6之后,不会随项目生成packages文件夹,将项目拷贝到无联网的电脑上用VS打开时,会出现nuget还原失败的情况,只需要把原电脑中的用户文件夹下的.nuget文件夹拷贝过去,放到对应......
  • 【git】解决git clone时fatal: unable to access ‘https://gitee.com/XXX.git/‘: Th
    一、前言我的电脑一直录入的是我的gitee账号,平常和同事协作开发,gitpull、gitclone等git操作都没有报错过。但是,今天要gitclone另一个gitee账号的项目代码,出现报错403(如......
  • nginx限制ip请求次数 以及并发次数
      如何设置能限制某个IP某一时间段的访问次数是一个让人头疼的问题,特别面对恶意的ddos攻击的时候。其中CC攻击(ChallengeCollapsar)是DDOS(分布式拒绝服务)的一种,也是一种常......
  • django解决跨域请求
    安装django-cors-headerspython-mpipinstalldjango-cors-headers在#setting.py下添加如下代码INSTALLED_APPS=[...,"corsheaders",...,]MIDDL......
  • 前台post请求数据过长,后台接收的为null
    最近在传图片的过程中,post传送序列化的数据,少量图片可以传送,多了后,后台接收的就为null,经过查找,发现是tomcat有对POST请求的大小的限制,是通过参数maxPostSize来进行限制的,......
  • HttpServlet源码分析
    HttpServlet源码分析概念HttpServlet类是专门为Http协议准备的在哪个包下:jakarta.servlet.http.HttpServlet到目前为止我们接触了servlet规范中的哪些接口?jakart......
  • tcp与http的区别和关系
    一、区别TCP协议是传输层协议,主要解决数据如何在网络中传输。HTTP是应用层协议,主要解决如何包装数据。TCP/IP和HTTP协议的关系,从本质上来说,二者没有可比性,我们在传输数......