http请求流程-困难户-iteye技术网站
2011年06月01日
首先,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
其中,第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,然后服务器在接受到该信息时返回对应的页面。
我们可以通过以下方法来验证一下:
3、选择"添加",选择一种语言,然后调节一下优先顺序
4、确定之后,我们再访问一下http://www.google.com/,是不是发现原来的简体中文全都成了繁体字了。??
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 adfasfa 其中,01行是状态行,用于显示服务器响应的状态,HTTP/1.1显示了对应的http协议版本,200为状态数字,OK为状态信息用于解释状态数字(这里OK对应200,表示请求正常);02~09是消息头部分,10为空行,11为实体内容(也就是服务器返回的网页内容)。 好了,相信大家应该已经对这个http请求的流程有了一个大概的了解了吧,那么我们反过来回答下最初留下的问题:当我们在浏览器的地址栏中输入 " http://www.baidu.com/ " ,然后按"回车",这之后发生了什么事?。 首先,浏览器找到该网址所指向的IP,然后与其建立TCP连接,接着向百度服务器提出Get请求,当服务器接收到我们的请求后,向我们传送应答信息--百度的页面,然后断开连接。
上一部分"流程简介",我们大致了解了下HTTP请求的流程,这一篇我向大家介绍下如何利用Telnet来模拟Http请求---访问百度。 我们直接开始吧! 1、打开"运行"->cmd进入命令环境; 2、输入"telnet www.baidu.com 80",回车后 ,屏幕为全黑,此时我们利用快捷键"Ctrl+](右中括号)"来打开本地回显功能,这样我们就可以看见我们所打的东西了,如图:(注本阶段执行过程和以下的过程均要求操作时间尽可能短,因为时间一长,便会被认为断开连接。)
3、单击回车,进行编辑状态。 4、输入:"GET / HTTP/1.1"后回车,在第二段接着输入:"HOST:"然后按回车,这样一个简单的HTTP请求就完成了,接着我人只要再按下回车,便向服务器递交这个请求了。如图:(我们来看一下这个是什么意思:GET表示请求方式,/表示请求的根目录下的文件,HTTP/1.1表示HTTP协议版本,HOST就是一个消息头,据某些朋友说1.1的版本一定要加一个"HOST:"可是我实验后发现"HOST :"不加仍旧可以正常发送请求,但是GET HTTP这个必须大写,否则就该请求无法发送)
5、接收服务器返回,这步其实不需要我们来做,因为当我们发送请求后,只需几秒钟,我们便会收到来自服务器反应.
6、这样,请求就算完成了。下面我们在百度中搜一下"1",浏览器中的地址应该是:http://www.baidu.com/s?wd=1.看看请求是怎么样的
怎么样,大家会了吗?以上只是用GET方式进行请求,当然还可以用POST方式进行请求,只是POST我这不方便做实验,所以就不写了。大概的格式给大家参考下: POST /localhost/login.aspx HTTP/1.1 HOST: Content-Type:application/x-www-form-urlencoded Content-Length:10 uid=xxxxxx
发表评论
-
控件美化
2012-01-20 00:58 1259控件美化 2010年11月16日 2010-03-25 ... -
DataGridView概述
2012-01-20 00:58 1121DataGridView概述 2011年05月18日 通 ... -
comboBox下拉后鼠标移动到子项时出现对应的提示
2012-01-20 00:58 1792comboBox下拉后鼠标移动到子项时出现对应的提示 201 ... -
集成了自动完成、tooltip提示和自动加宽listbox的ComboBox
2012-01-20 00:57 847集成了自动完成、tooltip提示和自动加宽listbox的C ... -
ComboBox的ToolTip显示
2012-01-20 00:57 991ComboBox的ToolTip显示 2010年06月17日 ... -
如何加强幼儿园安全管理
2012-01-19 08:46 906如何加强幼儿园安全管 ... -
3年后广东入园贵入园难基本解决 因地制宜制订各地幼儿园收费标准
2012-01-19 08:46 5233年后广东入园贵入园难基本解决 因地制宜制订各地幼儿园收费标准 ... -
园长联谊会发言稿
2012-01-19 08:46 623园长联谊会发言稿 2011年12月19日 园长联谊会发言 ... -
幼儿园园长以及教师的职责
2012-01-19 08:46 849幼儿园园长以及教师的职责 2010年07月25日 幼儿园 ... -
马湖乡中心幼稚园教师奖惩制度
2012-01-19 08:46 602马湖乡中心幼稚园教师奖惩制度 2011年06月17日 ... -
sdsadsadas
2012-01-17 01:15 563sdsadsadas 2010年11月22日 XV67 ... -
5230
2012-01-17 01:15 5445230 2010年10月03日 1、屏幕保护:一定要买 ... -
电脑天书(九)
2012-01-17 01:15 565电脑天书(九) 2011年04月 ... -
VISTA系统常识技巧集锦
2012-01-17 01:15 562VISTA系统常识技巧集锦 ... -
MAX三百问(珍藏版)上
2012-01-17 01:14 618MAX三百问(珍藏版)上 2011年06月13日 安装篇 ... -
yum install lamp
2012-01-15 19:55 680yum install lamp 2011年12月11日 ... -
Ubuntu下各网络服务器配置小结
2012-01-15 19:55 647Ubuntu下各网络服务器配置小结 2011年12月10日 ... -
LAMNP 编译安装参数(一)---Apache 安装编译参数
2012-01-15 19:55 574LAMNP 编译安装参数(一)---Apache 安装编译参数 ... -
惠普 康柏 510 笔记本电脑
2012-01-15 19:55 713惠普 康柏 510 笔记本电脑 2011年12月17日 ... -
俺的电脑配置
2012-01-15 19:55 562俺的电脑配置 2011年12月21日 电脑型号 微星 ...
相关推荐
javaMD5加密及登录验证(备忘) - Hibernate - Java - ITeye论坛.mhtjavaMD5加密及登录验证(备忘) - Hibernate - Java - ITeye论坛.mhtjavaMD5加密及登录验证(备忘
从零开始学Spring Boot,没有积分的可以看博客:http://412887952-qq-com.iteye.com/ 【Spring Boot 系列博客】 0)前言【从零开始学Spring Boot】 : http://412887952-qq-com.iteye.com/blog/2291496 (1...
NULL 博文链接:https://yuemeiqing2008-163-com.iteye.com/blog/1912881
eclipse开发环境(支持tomcat、maven、jetty、JBoss) - - ITeye技术网站
Spring的JdbcTemplate插入操作返回主键ID的方法 - - ITeye技术网站
VMware-Horizon-Agent-x86_64-7.6.0-9539447
tomcat6使用DBCP和blob出现ClassCastException解决方法
rd-screen-recorder-8
sonar-l10n-zh-plugin-1.10 sonar-l10n-zh-plugin-1.10
js中escape对应的C#解码函数 - Corrinejtt - ITeye
Charles是一款抓包修改工具,相比起burp,charles具有界面简单直观,易于上手,数据请求控制容易,修改简单,抓取数据的开始暂停方便等等优势!此版本是3.11.5正式版.不购买也可使用及正常升级,但每隔30分钟软件会...
TortoiseSVN-1.8.9.26117-x64-svn-1.8.11英文64位中文语言包
jmeter 用例 案例 http://knight-black-bob.iteye.com/blog/2401372 jmeter 用例 案例 http://knight-black-bob.iteye.com/blog/2401287 jmeter 用例 案例 http://knight-black-bob.iteye.com/blog/2401284
免费网络抓包工具Wireshark,支持WIN7与XP,最新官方原版。
SpringBoot Demo http://knight-black-bob.iteye.com/blog/2338320 springboot 详解 (一) helloworld http://knight-black-bob.iteye.com/blog/2338606 springboot 详解 (二) crud ...
关闭win7升级win10提示
微信 开发 接受 普通 消息 http://knight-black-bob.iteye.com/blog/2244830 http://knight-black-bob.iteye.com/blog/2244839
例如,对于网络请求,可能使用了Retrofit或Volley这样的库来简化HTTP通信;对于数据缓存,可能利用了OkHttp的缓存机制或者本地数据库如Room;对于异步任务,可能运用了Android的AsyncTask或者LiveData配合ViewModel...
jpeg解码总结文档,快速了解jpeg解码,对jpeg标准进行归纳
NULL 博文链接:https://676744379-qq-com.iteye.com/blog/790414