`

HTTP请求流程简介

阅读更多

HTTP请求流程

      首先,http属于Tcp/Ip模型中的应用层协议,而两个应用程序(我们这里指的就是浏览器与服务器)之间要进行互相通信,首先得建立Tcp连接,然后浏览器才能向服务器发送请求信息,服务器在接受到请求信息后,返回相应的应答信息,浏览器接收到来自服务器的应答信息后,对这些数据进行解释执行。

      在http 1.0的版本中,浏览器的每次请求(也就是对每一个页面的访问)都要求建立一次单独的连接,在处理完每一次的请求后,就自动释放连接。(这点我们应该都有感觉,比如我们访问一个页面,当该页面在浏览器中显示出来的时候,我们可以拔掉网线,此时该页面上的信息并不会丢失。)而当我们请求的网页文件中有很多图片、音乐、电影等信息时,服务器返回的信息中并不直接包含图片数据,而只是保存该图片的链接,当浏览器进行解释的时候,遇到图片的url时,才向服务器发出对图片的请求信息。可见如果一个网页中包含多个图片数据时,将会频繁的与服务器建立连接,与释放连接,这无疑会造成资源的浪费。

                                                                                        http 1.0 请求模式

      而http 1.1则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。

      ·HTTP请求消息

      1次完整的http请求消息包括:一个请求行、若干消息头以及实体内容,而消息头和实体内容可以没有,消息头和实体内容间有一个空行。
      我们来看一个例子(为了便于说明,我在每行前加了序号):
            1 Get /mattmarg/ HTTP/1.0
            2 User-Agent: Mozilla/2.0 (Macintosh; I; PPC)
            3 Accept: text/html; */*
            4 Cookie: name = value
            5 Referer: http://www.XXX.com/a.html
      其中,第1行就是请求行:请求方式为Get(除了Get之外,还有Post、Put、Delete方式),请求的文件位于"根目录/mattmarg/"下,当然也可以直接给出需要的页面(如:/mattmarg/index.asp,也可以加上一些其它字段 如:/mattmarg/index.asp?id=1&uid=xxx。当我们通过Get请求时,提交给服务器的请求行长度不能超过1K,而如果利用Post方式,则是把所提交的信息以实体内容形式发送给服务器,所以如果服务器没有限制的话,原则上讲可以传输无限大的内容),HTTP/1.0 表示了http的版本为1.0。其余几行就是消息头了,消息头主要是用来向服务器传达某种信息或指示。如告诉服务器自己的终端(User-Agent)是什么(如果是浏览器则返回相应的浏览器型号),终端所可以解释的类型(Accept)是什么,是从哪个页面提交的请求(Referer),以及浏览器所能解释的语言(Accept-Language)等等。我们这里拿Accept-Language来举个例子,大家都知道google在中国大陆显示的是简体中文,而在其它的国家则显示对应的语言,这个是怎么做到的呢?其实就是浏览器向服务器递交的请求信息中包含了Accept-Language,而我们的浏览器默认是zh-cn,然后服务器在接受到该信息时返回对应的页面。
      我们可以通过以下方法来验证一下:
      1、打开浏览器->工具->internet选项->常规选项卡
      2、选择"语言",可见默认的语言是中文
      3、选择"添加",选择一种语言,然后调节一下优先顺序

      4、确定之后,我们再访问一下http://www.google.com/,是不是发现原来的简体中文全都成了繁体字了。

      ·HTTP响应消息

      
Http响应消息的格式为:一个状态行、若干消息头和实体内容,其中消息头和实体内容可以没有,消息头和实体内容间有一个空行。
      我们依旧先来看一个例子:
            01 HTTP/1.1 200 OK
            02 Server: Microsoft-IIS/5.1
            03 X-Powered-By: ASP.NET
            04 Date: Sun, 06 Jul 2008 11:01:21 GMT
            05 Content-Type: text/html
            06 Accept-Ranges: bytes
            07 Last-Modified: Wed, 02 Jul 2008 01:01:26 GMT
            08 ETag: "0f71527dfdbc81:ade"
            09 Content-Length: 46
            10
            11 <html><head></head><body>adfasfa</body></html>
      其中,01行是状态行,用于显示服务器响应的状态,HTTP/1.1显示了对应的http协议版本,200为状态数字,OK为状态信息用于解释状态数字(这里OK对应200,表示请求正常);02~09是消息头部分,10为空行,11为实体内容(也就是服务器返回的网页内容)。

      好了,相信大家应该已经对这个http请求的流程有了一个大概的了解了吧,那么我们反过来回答下最初留下的问题:当我们在浏览器的地址栏中输入 "http://www.baidu.com/ " ,然后按"回车",这之后发生了什么事?

      首先,浏览器找到该网址所指向的IP,然后与其建立TCP连接,接着向百度服务器提出Get请求,当服务器接收到我们的请求后,向我们传送应答信息--百度的页面,然后断开连接。

      [补充]以上文章中主要是描述HTTP请求的大致流程,至于HTTP之前所建立的一系列连接,只用了"浏览器找到该网址所指向的IP,然后与其建立TCP连接"这句话或类似的话来带过。根据朋友们的回复显得这个说法不是很恰当。所以我在这里再补充些东西。
       1、获取IP。浏览器地址栏中输入"http://www.xxx.edu.cn/"并提交之后,首先它会在DNS本地缓存表中查找,如果有则直接告诉IP地址。如果没有则要求网关DNS进行查找,如此下去,当找到对应的ip后,则返回给浏览器。
       2、建立TCP连接。当获取到IP之后,就开始与所请求的服务器建立TCP连接,你可以在下图中发现syn,ack,这些标识符就是用来同步用的。
       3、连接建立后,就向服务器发出http请求(大家可以从图中看出来)。如果是HTTP1.0的版本则,每一次请求结束后,就释放TCP连接。

 

(上图中,由于是第一次访问网站,无法在本地找到对应IP)


(短时间内,第二次访问同一网站)
分享到:
评论

相关推荐

    Java EE常用框架.xmind

    它使用Web(HTTP)方式,接收和响应外部系统的某种请求。从而实现远程调用 术语 XML. Extensible Markup Language -扩展性标记语言 WSDL – WebService Description Language – Web服务描述语言。 ...

    go web编程

    1.5 HTTP请求 9 1.5.1 请求方法 10 1.5.2 安全的请求方法 11 1.5.3 幂等的请求方法 11 1.5.4 浏览器对请求方法的支持 11 1.5.5 请求首部 12 1.6 HTTP响应 13 1.6.1 响应状态码 13 ...

    免费超全面的Java基础类型,容器,并发,IO流,面向对象,Web编程等代码总结

    java基础 一、仓库说明 Java基础类型,容器,并发,IO流,面向对象,Web编程等代码总结。...Http请求详解,握手挥手流程简介 会话跟踪技术,Session和Cookie详解 过滤器、监听器、拦截器,应用详解 Servlet 集成 C3P0

    百度百科网络爬虫,爬取python词条相关页面的标题和简介。.zip

    这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本...

    基于django+hitcount的网页计数器

    写在前面 ...2. 视图(View):视图是处理用户请求的核心部分,根据接收到的HTTP请求决定展示哪些数据或执行何种操作,并将结果组织成响应返回给客户端。 3. 模板(Template):提供了一种强大的模板……

    python全栈开发基础+前端+web框架+项目实战视频.zip

    http协议之请求协议 http协议之响应协议1 http协议之响应协议2 css的四种引入方式 css的基本选择器 css的属性选择器和伪类 css的属性操作(一) css的属性操作(二) 外边距和内边距 ....... 3 python全栈开发web框架篇...

    oauth-python-sdk:小米帐号开放平台python SDK

    XMOAuthClient.py -- 针对OAuth授权流程相关http请求封装 XMApiClient.py -- 针对api请求相关http请求封装 DEMO 1. 获取授权URL DEMO 按照稳定说明构造授权url:...

    postman使用教程

    postman界面简介 使用方法 1.Get请求: ... ...如图示: ...“http://httpbin.org/post”:请求的URL。...接口请求流程参考链接: ①https://blog.csdn.net/fxbin123/article/details/80428216 ②https://blog.csdn.n

    oauth-php-sdk:小米帐号开放平台PHP SDK

    小米帐号开放平台OAuth PHP SDK使用说明小米OAuth简介小米帐号开放平台文档PHP SDK说明php-sdk/httpclient/XMApiClient.php -- 基础Http请求封装php-sdk/httpclient/XMOAuthClient.php -- 针对OAuth授权流程相关http...

    python基础教程head-Python爬虫基础入门,这是我看到最简单易懂的教程.pdf

    发送请求request 使⽤http库向⽬标站点发起请求,即发送⼀个Request Request包含:请求头、请求体等 Request模块缺陷:不能执⾏JS 和CSS 代码 2.获取响应内容 response 如果服务器能正常响应,则会得到⼀个Response ...

    Bilibili视频数据爬虫 精确爬取完整的b站视频数据.zip

    这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本...

    HCIP-Datacom-Network Automation Developer培训V1.0视频.rar

    3.2.5 HTTP-1.1请求报文格式.mp4 3.2.6 HTTP-1.1响应报文格式.mp4 3.2.7 HTTPS和HTTP-2简介.mp4 3.2.8 iMaster NCE北向RESTful调用简介.mp4 3.3 iMaster NCE RESTful API调用实践.mp4 3.4.1 CloudCampus解决方案开放...

    Python程序设计:使用requests库下载页面.pptx

    数据采集和爬虫基础 房屋信息抓取 知识点:使用requests库 爬虫程序编写流程 ...在python内置模块的基础上进行了高度的封装,从而使得python进行网络请求时,变得人性化,使用Requests可以轻而易举的完

    安卓专项测试 - Python篇实战视频(Android)

    5-2 持续集成的概念、流程和意义 5-3 讲解持续集成工具Jenkins3 5-4 Jenkins工具密码的修改 5-5 Jenkins工具的配置说明 5-6 Jenkins工具系统配置和Job配置 5-7 Jenkins工具手动持续集成实战 5-8 Jenkins工具自动化...

    WAP业务应用程序接口规范.rar

    3.1.4 Http请求..15 3.1.5 Http响应..16 3.1.6 约定..........16 卓望数码技术(深圳)有限公司版权所有 WAP 业务应用程序接口规范 3.2 单点认证接口......17 3.2.1 单点认证的流程示意图....17 3.2.2 页面...

    浅析前端路由简介以及vue-router实现原理

    大致流程可以看成这样: 浏览器发出请求 服务器监听到80端口(或443)有请求过来,并解析url路径 根据服务器的路由配置,返回相应信息(可以是 html 字串,也可以是 json 数据,图片等) 浏览器根据数据包的 ...

    Web安全深度剖析(张柄帅)

    第2章 深入HTTP请求流程 6 2.1 HTTP协议解析 6 2.1.1 发起HTTP请求 6 2.1.2 HTTP协议详解 7 2.1.3 模拟HTTP请求 13 2.1.4 HTTP协议与HTTPS协议的区别 14 2.2 截取HTTP请求 15 2.2.1 Burp Suite Proxy 初体验 15 ...

    Java-Web程序设计(PPT).pptx

    1.2 HTTP协议 URL 简介 HTTP 协议概述 HTTP 处理流程 HTTP 请求方式 使用网络抓包查看网络状态 20 25 Java-Web程序设计(PPT)全文共389页,当前为第11页。 1.2.1 URL简介 URL 是 UniformResource Locator 的缩写,...

    react-starter:React 入门脚手架,按照官网文档搭建,附带个人搭建步骤说明

    API 接口创建http请求调用http请求使用Reudx(可选)说明创建Actions创建ActionTypes创建Reduce发起Actions获取Store发布介绍本项目是基于 create-react-app(3.0.1) & webpack(4) & redux(4) & react-router(5) 按照...

Global site tag (gtag.js) - Google Analytics