`
minchina91
  • 浏览: 9293 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
社区版块
存档分类
最新评论

学习HTTP之我见

 
阅读更多

一.HTTP什么?

 字面上的意思就是HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写,请注意这这是字面上的意思!

二.HTTP用在哪里?

 http协议最常用的地方就是在我们的浏览器中,你可能会说?谁说的http在浏览器中,我怎么没看见。
 其实,http协议最常用的也就是浏览器与服务器之间的通信啦!在哪里呢?就在我们的浏览器地址栏中,因为浏览器最常用的协议就是http,只不过它被我们的浏览器隐藏了。
 自从http1.1版本发布之后,还有一个用得多的地方就是我们的多线程下载,你可能听说过IDM下载软件,它就是一个典型的http多线程下载软件

三.当我们输入URL之后,这其中的过程是怎样的?

 首先,当我们输入URL之后,浏览器会先查找我们本地的hosts文件,如果是windows系统,则是C:\Windows\System32\drivers\hosts,如果是linux系统,则是在/etc/hosts中。当浏览器发现我们的域名存在hosts中时,就会指向我们hosts中相对于的IP,这种用法常常用于在本地调试。
 当我们的域名不存在hosts中的时候,我们的浏览器就会根据我们计算机的网络配置,通过DNS地址,去查询相应的IP,查询成功后,域名服务器就会返回我们需要的IP。
 得到IP之后,浏览器会根据我们默认的端口号去查找到对应的主机。http默认端口号为80端口,浏览器也将其省略了!
 地址组成

        (http://)hostname(:80)/URL

OSI七层模型和TCP/IP五层模型



3.1客户端是如何找到服务器主机的?

首先,http协议是一个应用层的协议,其他的应用层协议还有smtp,ftp,telnet等等。http会被封装成TCP报文,会被添加上源端口和目的端口,然后进一步被封装成IP报文,加上目的IP地址,然后会被数据链路成封装成帧,并加上相应的序号,进一步到物理层,物理层会将帧编程字节流,这样,就能够在物理线路中传播了。当我们所以的帧到达目的网络后。通过由下到上的解包。注意,这里不是主机,而是目的网络,然后会根据我们的ARP协议,结合主机的MAC地址找到相应的主机。

3.2客户端和服务器之间的具体过程是怎样的?

 首先,浏览器会发送http请求。http请求内容由三部分组成:
1,请求行;一般包含有请求的方法,请求的URL地址以及HTTP协议版本号。常用的请求方法有,POST,GET,DELETE,HEAD,PUT,这5个是我们平时使用的最常用的,POST用于增加数据,GET用于请求获取数据,DELETE用于删除数据,PUT用于更新数据。
2.请求头,也叫消息报头,请求头一般会包含需要告知服务器我客户端的状态等等,比如客户端能够解析的文件类型Accept能够解析的字符编码Accept-Charset,支持的语言Accept-Language,以及是否支持压缩等等。
3,请求正文,通常请求正文为一个空白行。
            之后,通过3.1中提到的寻找服务器的方法找到服务器的位置。
            服务器通常也由好几个部分组成:负载均衡,LVS(Linux虚拟服务器),反向代理服务器,WEB服务器。
1.负载均衡的作用是将到达服务器的请求进行合理的分配,将他们分别转到不同的服务器上,以减轻服务器的压力。
2.LVS则是一个服务器集群,由于每一种服务器能够处理的请求有限,所以我们要使用集群来解决访问量过大的问题,比如国内的百度,新浪,网易等门户网站都使用了LVS。
3.反向代理,则是在服务器端建立一个代理服务器,由代理服务器去WEB服务器上代替我们寻找资源,然后将资源返回给我们。常常用于防攻击策略、放抓取、SSL、gzip、自动性能优化以及高速缓存等。

4.WEB服务器则是我们网站的实际存在位置,web服务器将我们的网站部署,向请求的浏览器提供请求的。常用的又Apache,Tomcat以及nodejs。
资源。
          当我们的WEB服务器监听到我们的HTTP请求时,会对http请求的信息进行解析,得到相应的URL路径和请求的方法。因为我最近在使用nodejs做开发,这里就使用nodejs来举例
nodejs实际上是一个javascript的运行环境,node通过http模块来提供http服务。nodejs有一个名叫路由控制器的中间件,当URL地址和方法传到node的时候,路由控制器会进行解读,
将得到的URL地址和index.js路由文件进行匹配,当匹配到相同的路径是,就会调用模板引擎对静态文件,模型进行加工,得到需要返回的数据。
         这时候,WEB服务器就会对返回的信息按照http协议进行封装。
        消息响应,即返回给浏览器的数据,通常也有三部分组成:状态行,消息报头,响应正文。
1.状态行。状态行中主要包含了HTTP协议版本,以及返回的状态码。常用的状态码有2XX,3XX,4XX。点击这里查看具体
2.消息报头。主要包含有返回的数据类型,内容长度等信息
3.响应正文,这里就包含我们服务器返回的正文数据。
        当响应体到达浏览器的时候,浏览器引擎会对响应内容进行渲染,渲染成功后,就可以在浏览器中显示了!

分享到:
评论

相关推荐

    机器学习(一):一维线性回归模型.rar

    STANFORD公开课,Andrew Ng机器学习第1、2讲算法。 附件中包含待拟合的数据,还有MATLAB实现的三种拟合算法:最小二乘法、批梯度... 详情见我的配套博客:http://blog.csdn.net/hujingshuang/article/details/46124607

    Qt for android打开原生系统相机和相册

    由于java包的依赖,废了我相当长时间去解决,所以资源分相对高点,但学习的价值很高,对于搞qt开发安卓的是一个晋级性的demo,详情细见我的博客http://blog.csdn.net/clinuxf/article/details/78720374

    NeHe OpenGL教程中文版

    NeHe OpenGL教程的中文版 整个教程由nehe制作 课程内容由dancingwind(周炜)以及gamedev和csdn的志愿者翻译 ...她甚至把买衣服的钱都用来给我买书了,她真的是我见过的最好的女孩, 希望我能带给她幸福。

    NeHe OpenGL教程中文版(Utopia典藏版)

    NeHe OpenGL教程中文版PDF [教程说明] 整个教程由nehe制作 课程内容由dancingwind(周炜)以及gamedev和csdn的志愿者翻译 ...她甚至把买衣服的钱都用来给我买书了,她真的是我见过的最好的女孩, 希望我能带给她幸福。

    网易云uniapp社区交友,最全注释. 我估计官方视频里的源码都没我注释全面,结构目录每一个模块全部在md文件中

    我估计官方视频里的源码都没我注释全面,结构目录每一个模块全部在md文件中,遍不出来了,反正就是很不错,可以下载代码,打开绝对是你们见过最全面的注释,不过聊天池是真的难,封装好了一直学不会。

    rar文件MFC 图像处理之图像增强 图像平滑、高斯平滑、中值滤波、拉普拉斯锐化、Sobel锐化(源码)

    该资源主要参考我的博客【【数字图像处理】七.MFC图像增强之图像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt锐化详解,博客地址http://blog.csdn.net/eastmount/article/details/46378783 主要讲述基于VC++6.0 ...

    Python关于爬虫(主要)及一些Python基础的学习.rar

    入门python爬虫,10分钟就够了,这可能是我见过最简单的基础教学 1发起请求 使用http库向目标站点发起请求,即发送一个Request Request包含:请求头、请求体等 Request模块缺陷:不能执行JS 和CSS 代码 2获取...

    Zend Framework入门教程(getting-started-with-zend-framework).pdf

    这个教程算是我见过最适合初学者的教程。 本教程详细地介绍了使用Zend Framework来开发数据库驱动的MVC架构应用程序的过程。 注意:本教程在Zend Framework 1.8 和1.9两个版本中测试通过。在以后的1.x系列版本中,...

    android应用开发MVC框架(二)

    很多时候都在找适合自己应用的一种框架,便于应用的更为合理开发,也易于应用功能的扩展,但其实并没有说哪一种架构就是对所有应用都是适应的,所以我们只能在学习摸索之中找到适合我们自己应用的架构,在这里我就写...

    日语N2学习资料N2考试复习资料大全日语N2模拟试题含答案资料合集.zip

    日语写作易见错误[1].doc 日语报刊useful文选词语.rtf 日语报刊复习资料.doc 日语报刊复习资料二——词语_词组.txt 日语报刊文选.doc 日语新闻视听核心词汇(政治_经济_教育_天气方面)-----.doc 日语日常用语一.doc ...

    Wireshark基本介绍和学习TCP三次握手

    记得大学的时候就学习过TCP的三次握手协议,那时候只是知道,虽然在书上看过很多TCP和UDP的资料,但是从来没有真正见过这些数据包, 老是感觉在云上飘一样,学得不踏实。有了wireshark就能截获这些网络数据包,可以...

    C语言资料大全.rar

    适合所有层次的C语言学习者。本资料大全免费下载,如您手头也有C语言相关资料,敬请分享,另外如您对本资料大全有任何建议或者意见希望能告诉我,以便以后继续改进。本人联系方式见下: Email: yaoz@163.com QQ:...

    Zend Framework入门教程(适于ZF1.8和1.9)-getting-started-with-zend-framework-1.6.3.pdf

    这个教程算是我见过最适合初学者的教程。 本教程详细地介绍了使用Zend Framework来开发数据库驱动的MVC架构应用程序的过程。 注意:本教程在Zend Framework 1.8 和1.9两个版本中测试通过。在以后的1.x系列版本中,...

    MFC 图像处理之几何运算 图像平移旋转缩放镜像(源码)

    该资源主要参考我的博客【数字图像处理】六.MFC空间几何变换之图像平移、镜像、旋转、缩放详解,博客地址http://blog.csdn.net/eastmount/article/details/46345299 主要讲述基于VC++6.0 MFC图像处理的应用知识,要...

    WEBRTC运行流程.pptx

    因此我用的是火狐44版本,且需要删掉安装目录下的两个update文件阻止其自动更新 火狐44版本下载地址见附件 HTTP模块的学习 http://javascript.ruanyifeng.com/nodejs/http.html SOCKET.IO模块的学习 ...

    跟我学JavaSwing之游戏设计.doc

    此外,还可以到我的主页http://www.ismyway.com上下载这个游戏 的单机版以及手机版进行试玩(见图1)。 Java咖啡馆以前介绍过AWT的知识,那么Swing和AWT究竟有什么区别呢?学习Java的 人都可能听到或看到过重量级控件...

    蜘蛛侠论坛2.0 源代码

    而我之所以不断和大家分享我的这个论坛是因为我觉得它很适合初学者学习,它非常干净,我估计可能是你见过的中国最干净的论坛。它提供了以下一些你可能感兴趣的设计供你学习参考: 1)配置简单,使用更简单的ROM框架...

    小学语文生字记忆训练系统正式版 V4.5G

    方法见软件中或软件目录下的《生字库编辑方法说明》。 ▲生字朗读功能:本软件从4.5A开始支持生字的读音功能。读音库是开放的,用户可以自己按软件中的说明编辑添加生字的读音。由于生字读音库文件较大,软件目前只...

    用Python做科学计算.pdf 文字版-高清彩色-带详细书签

    我上传的一些商业电子书是供学习研究之用,如用于商业用途,请购买正版。 更多内容见: Python学习资料篇 - 趣思行的博客 - CSDN博客 http://blog.csdn.net/bjarnecpp/article/details/78702210

Global site tag (gtag.js) - Google Analytics