HTTP基本原理(简介)-程序员宅基地

技术标签: 面试  网络基础  

原文:http://blog.csdn.net/hguisu/article/details/8680808

1. HTTP简介

         HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。

         在了解HTTP如何工作之前,我们先了解计算机之间的通信。

2. 计算机相互之间的通信

        互联网的关键技术就是TCP/IP协议。两台计算机之间的通信是通过TCP/IP协议在因特网上进行的。实际上这个是两个协议:

        TCP : Transmission Control Protocol 传输控制协议和IP: Internet Protocol  网际协议。

        IP:计算机之间的通信

        IP协议是计算机用来相互识别的通信的一种机制,每台计算机都有一个IP.用来在internet上标识这台计算机。  IP 负责在因特网上发送和接收数据包。通过 IP,消息(或者其他数据)被分割为小的独立的包,并通过因特网在计算机之间传送。IP 负责将每个包路由至它的目的地。

        IP协议仅仅是允许计算机相互发消息,但它并不检查消息是否以发送的次序到达而且没有损坏(只检查关键的头数据)。为了提供消息检验功能,直接在IP协议上设计了传输控制协议TCP.

        

       TCP : 应用程序之间的通信

       TCP确保数据包以正确的次序到达,并且尝试确认数据包的内容没有改变。TCP在IP地址之上引端口(port),它允许计算机通过网络提供各种服务。一些端口号为不同的服务保留,而且这些端口号是众所周知。

       服务或者守护进程:在提供服务的机器上,有程序监听特定端口上的通信流。例如大多数电子邮件通信流出现在端口25上,用于wwww的HTTP通信流出现在80端口上。

       当应用程序希望通过 TCP 与另一个应用程序通信时,它会发送一个通信请求。这个请求必须被送到一个确切的地址。在双方“握手”之后,TCP 将在两个应用程序之间建立一个全双工 (full-duplex) 的通信,占用两个计算机之间整个的通信线路。TCP 用于从应用程序到网络的数据传输控制。TCP 负责在数据传送之前将它们分割为 IP 包,然后在它们到达的时候将它们重组。

       TCP/IP 就是TCP 和 IP 两个协议在一起协同工作,有上下层次的关系。

       TCP 负责应用软件(比如你的浏览器)和网络软件之间的通信。IP 负责计算机之间的通信。TCP 负责将数据分割并装入 IP 包,IP 负责将包发送至接受者,传输过程要经IP路由器负责根据通信量、网络中的错误或者其他参数来进行正确地寻址,然后在它们到达的时候重新组合它们。

 关于TCP请参考《TCP三次握手及释放连接详解

3. HTTP协议所在的协议层

      HTTP是基于TCP协议之上的。在TCP/IP协议参考模型的各层对应的协议如下图,其中HTTP是应用层的协议。

      


 

4. HTTP请求响应模型   

       HTTP由请求和响应构成,是一个标准的客户端服务器模型(B/S)。HTTP协议永远都是客户端发起请求,服务器回送响应。见下图:

    

 

       HTTP是一个无状态的协议。无状态是指客户机(Web浏览器)和服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后服务器返回响应(response),连接就被关闭了,在服务器端不保留连接的有关信息.HTTP遵循请求(Request)/应答(Response)模型。客户机(浏览器)向服务器发送请求,服务器处理请求并返回适当的应答。所有HTTP连接都被构造成一套请求和应答。

 

5. HTTP工作过程      

     一次HTTP操作称为一个事务,其工作整个过程如下:

     1 ) 、地址解析,

     如用客户端浏览器请求这个页面:http://localhost.com:8080/index.htm

     从中分解出协议名、主机名、端口、对象路径等部分,对于我们的这个地址,解析得到的结果如下:
     协议名:http
     主机名:localhost.com
     端口:8080
     对象路径:/index.htm

      在这一步,需要域名系统DNS解析域名localhost.com,得主机的IP地址。


    2)、封装HTTP请求数据包

     把以上部分结合本机自己的信息,封装成一个HTTP请求数据包


     3)封装成TCP包,建立TCP连接TCP的三次握手

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

     4)客户机发送请求命令

       建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可内容。

     5)服务器响应

     服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

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

     6)服务器关闭TCP连接

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

    Connection:keep-alive

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

 

 

6. HTTP协议栈中各层数据流      

             首先我们看看客户端请求的时候,数据在各层协议的数据组织如下图:

         

            而服务器解析客户机请求就是反向操作的过程,如下图:

           
       

       客户机发起一次请求的时候:

       客户机会将请求封装成http数据包-->封装成Tcp数据包-->封装成Ip数据包--->封装成数据帧--->硬件将帧数据转换成bit流(二进制数据)-->最后通过物理硬件(网卡芯片)发送到指定地点。

       服务器硬件首先收到bit流....... 然后转换成ip数据包。于是通过ip协议解析Ip数据包,然后又发现里面是tcp数据包,就通过tcp协议解析Tcp数据包,接着发现是http数据包通过http协议再解析http数据包得到数据。




版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hudashi/article/details/50788595

智能推荐

Redis跳表的时间发杂度和空间复杂度的分析_redis空间复杂度-程序员宅基地

文章浏览阅读5k次,点赞4次,收藏5次。Redis跳表的时间发杂度和空间复杂度的分析:首先,每个节点肯定都有第1层指针(每个节点都在第1层链表里)。如果一个节点有第i层(i>=1)指针(即节点已经在第1层到第i层链表中),那么它有第(i+1)层指针的概率为p。节点最大的层数不允许超过一个最大值,记为MaxLevel。这个计算随机层数的伪码如下所示:randomLevel() level := 1 //..._redis空间复杂度

【软件基础】面向对象分析与设计思想总结-程序员宅基地

文章浏览阅读1.3k次。面向对象的本质:通过对象之间的协作完成功能。面向对象的特点:采用封装、继承、多态和抽象等设计方法。面向过程和面向对象开发中,在分析问题面向过程:拿到问题分析问题如何解决的步骤;面向对象:拿到问题分析问题中有哪些类,类的属性与方法,类与类之间的关系。面向对象遵循:合适的方法应该出现在合适的类中。_面向对象分析

电脑应用工具背景变为护眼绿?_电脑被护眼助手弄得背景是绿色的-程序员宅基地

文章浏览阅读424次。背景变为护眼绿?1、打开注册表--利用doc命令,即“Win+R”组合快捷键打开“运行”,输入regedit命令。2、修改路径下的值 路径:HKEY_CURRENT_USER->Control Panel->Colors->双击window 将其值改为:204 232 207 3、重启系统即可!4.若对你有所帮助请点个赞。..._电脑被护眼助手弄得背景是绿色的

双系统linux分多少内存,win+linux双系统的用户,你们的linux分了多少分区?-程序员宅基地

文章浏览阅读943次。hgywww 于 2010-02-03 22:19:15发表:挺好的调查kantiede 于 2010-01-31 14:39:50发表:学习爱唯一 于 2010-01-31 12:13:32发表:分给linux十个G,然后给他分了四个区sagawf 于 2009-11-17 21:03:54发表:win10Gfedora11 15Gyanchao1988 于 2009-11-17 11..._win+lin双系统lin配置多少储存

神经网络硕士就业前景,计算神经科学就业前景_神经网络就业-程序员宅基地

文章浏览阅读7.8k次。一、算法工程师简介(通常是月薪15k以上,年薪18万以上,只是一个概数,具体薪资可以到招聘网站如拉钩,猎聘网上看看)算法工程师目前是一个高端也是相对紧缺的职位;算法工程师包括音/视频算法工程师(通常统称为语音/视频/图形开发工程师)、图像处理算法工程师、计算机视觉算法工程师、通信基带算法工程师、信号算法工程师、射频/通信算法工程师、自然语言算法工程师、数据挖掘算法工程师、搜索算法工程师、控制算法工程师(云台算法工程师,飞控算法工程师,机器人控制算法)、导航算法工程师(@之介感谢补充)、其他【其他一切需要复杂_神经网络就业

Cocos Creator中使用对象池(官方文档摘录)_cocos creator网络请求时如何获取当前的对象-程序员宅基地

文章浏览阅读3k次。在运行时进行节点的创建(cc.instantiate)和销毁(node.destroy)操作是非常耗费性能的,因此我们在比较复杂的场景中,通常只有在场景初始化逻辑(onLoad)中才会进行节点的创建,在切换场景时才会进行节点的销毁。如果制作有大量敌人或子弹需要反复生成和被消灭的动作类游戏,我们要如何在游戏进行过程中随时创建和销毁节点呢?这里就需要对象池的帮助了。对象池的概念对象池就是一组可回收的节_cocos creator网络请求时如何获取当前的对象

随便推点

电脑显卡4种接口类型:VGA、DVI、HDMI、DP_电脑接收dp接口的图像-程序员宅基地

文章浏览阅读1.9k次。转载自:http://blog.sina.com.cn/s/blog_68274d0f01017ik2.html电脑显卡4种接口类型:VGA、DVI、HDMI、DP (2013-04-13 17:25:19)转载▼标签: 电脑显卡接口4种类型 vga、dvi/hdmi、dp it分类: IT_电脑接收dp接口的图像

Firefox插件(拓展)开发_火狐浏览器插件开发-程序员宅基地

文章浏览阅读4.8k次。JavaScript编写插件时,通常分为以下几个脚本:1.:用于操作网页内容,可以访问DOM和页面元素,可以修改页面样式和行为,与页面共享同一个JavaScript环境。2.:用于处理插件的后台任务,例如处理网络请求、管理插件状态、与其他插件通信等,与页面不共享JavaScript环境。3.:用于处理插件弹出窗口的交互逻辑,例如响应用户点击事件、发送消息给后台脚本等。4.:用于处理插件选项页面的交互逻辑,例如保存用户设置、发送消息给后台脚本等。_火狐浏览器插件开发

KindEditor 编辑器在springboot使用_springboot kindeditor-程序员宅基地

文章浏览阅读1.7k次。KindEditor 编辑器在springboot使用官网下载kindEditor解决视频上传问题官网下载kindEditor **1. **官网地址 : http://kindeditor.net/down.php****2.下载后解压;将解压文件引入到项目中由于在java中使用;去掉不用的文件 asp,asp.net jsp;3.引入js,我这里使用的是thymeleaf模板4.html页面引入 ;也可以在页面直接引入js ; 添加文本框 <th:block th:_springboot kindeditor

网络安全人才青黄不接、数字化转型迫在眉睫、你还在犹豫吗?_网安行业需要的是顶尖人才-程序员宅基地

文章浏览阅读5.3k次,点赞5次,收藏10次。网络上关于质疑大专学历进入网络安全行业的声音越来越多了,居然有很多人在质疑大专学历从事网络安全没有竞争力。很多人看到某些招聘软件上起薪12K的薪资就望而却步了,觉得自己的能力不配拥有这样的高薪,并且网络安全还是属于计算机行业的。有这样的担忧其实不是空穴来风,因为计算机行业近年来的发展速度快,行业内很多岗位已经呈现出了饱和的现象,特别是程序员这种重复性工作的岗位。由于市场人才的饱和,所以公司可以用同样的价钱找到条件更好的人才。所以就出现了近年来,网络安全行业的要求越来越高,非985、211都对很多岗位望而却步_网安行业需要的是顶尖人才

vue element远程搜索下拉框出tooltip el-autocomplete下拉框出省略号时鼠标移上去出提示_el-autocomplete 下拉太长省略-程序员宅基地

文章浏览阅读2.3k次,点赞8次,收藏13次。vue element远程搜索下拉框出tooltip el-autocomplete下拉框出省略号时鼠标移上去出提示 需求如下效果图如下对el-tooltip进行了二次封装组件使用需求如下1.element远程搜索框下 下拉框文字超出宽度后会出省略号 要求鼠标移上去能够出文字效果图如下对el-tooltip进行了二次封装<template> <el-tooltip ref="tlp" :content="text" effect="dark" _el-autocomplete 下拉太长省略

Java多线程知识点总结(思维导图+源码笔记,Java架构师成长路线-程序员宅基地

文章浏览阅读713次,点赞5次,收藏10次。又是一年求职季,在这里,我为各位准备了一套Java程序员精选高频面试笔试真题,来帮助大家攻下BAT的offer,题目范围从初级的Java基础到高级的分布式架构等等一系列的面试题和答案,用于给大家作为参考以下是部分内容截图最后又是一年求职季,在这里,我为各位准备了一套Java程序员精选高频面试笔试真题,来帮助大家攻下BAT的offer,题目范围从初级的Java基础到高级的分布式架构等等一系列的面试题和答案,用于给大家作为参考以下是部分内容截图。

推荐文章

热门文章

相关标签