`

Http详解(转:真心不错)

 
阅读更多

相关链接:http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html

 

一、TCP/IP 协议介绍

  在介绍 HTTP 协议之前,先简单说一下TCP/IP协议的相关内容。TCP/IP协议是分层的,从底层至应用层分别为:物理层、链路层、网络层、传输层和应用层,如下图所示:

 

 

TCP/IP基础--层次图

 

  从应用层至物理层,数据是一层层封装,封装的方式一般都是在原有数据的前面加一个数据控制头,数据封装格式如下:

 

TCP/IP基础--数据封装

 

  其中,对于TCP传输协议,客户端在于服务器建立连接前需要经过TCP三层握手,过程如下:

 

TCP/IP基础--TCP三次握手

 

二、HTTP协议

2.1 简介

  超文本传输协议(Hypertext Transfer Protocol,简称HTTP)是应用层协议,自 1990 年起,HTTP 就已经被应用于 WWW 全球信息服务系统。
  HTTP 是一种请求/响应式的协议。一个客户机与服务器建立连接后,发送一个请求给服务器;服务器接到请求后,给予相应的响应信息。
  HTTP 的第一版本 HTTP/0.9是一种简单的用于网络间原始数据传输的协议;
  HTTP/1.0由 RFC 1945 定义 ,在原 HTTP/0.9 的基础上,有了进一步的改进,允许消息以类 MIME 信息格式存 在,包括请求/响应范式中的已传输数据和修饰符等方面的信息;
  HTTP/1.1(RFC2616) 的要求更加严格以确保服务的可靠性,增强了在HTTP/1.0 没有充分考虑到分层代理服务器、高速缓冲存储器、持久连接需求或虚拟主机等方面的效能;
  安全增强版的 HTTP (即S-HTTP或HTTPS),则是HTTP协议与安全套接口层(SSL)的结合,使HTTP的协议数据在传输过程中更加安全。

 

2.2 协议结构

  HTTP协议格式也比较简单,格式如下:

 

HTTP协议--协议结构

 

2.3 HTTP 协议举例

  下面是一个HTTP请求及响应的例子:

 

2.4 请求头格式

a) 通用头(general-header):
Cache-Control:客户端希望服务端如何缓存自己的请求数据,如"Cache-Control: no-cache","Cache-Control: max-age=0";
Connection:客户端是否希望与服务端之间保持长连接,如"Connection: close", "Connection: keep-alive";
Date:只有当请求方法为POST或PUT方法时客户端才可能会有些字段;
Pragma:包含了客户端一些特殊请求信息,如 "Pragma: no-cache" 客户端希望代理或应用服务器不应缓存与该请求相关的结果数据;
Via:一般用在代理网关向应用服务器发送的请求头中,表明该来自客户端的请求经过了网关代理,
     格式为:"Via: 请求协议版本  网关标识   [其它信息] ",
     如 :" Via: 1.1  webcache_250_199.hexun.com:80 (squid)"

 

b) 请求头(request-header):
Accept: 表明客户同端可接受的请求回应的媒体类型范围列表。星号“*”用于按范围将类型分组,用“*/*”指示可接受全部类型;用“type/*”指示可接受 type类型的所有子类型,如“ Accept: image/gif, image/jpeg, */*”;
Accept-Charset:客户端所能识别的字符集编码格式,格式:“Accept-Charset: 字符集1[:权重],字符集2[:权重]”,如:“ Accept-Charset: iso-8859-5, unicode-1-1;q=0.8”;
Accept-Language:客户端所能识别的语言,格式:“Accept-Language: 语言1[:权重],语言2[:权重]”,如:” Accept-Language: zh, en;q=0.7”;
Host:客户请求的主机域名或主机IP,格式:“Host: 域名或IP[:端口号]”,如:“Host: www.hexun.com:80“,请求行中若有HTTP/1.1则必须有该请求头;
User-Agent:表明用户所使用的浏览器标识,主要用于统计的目的;
Referer:指明该请求是从哪个关联连接而来;

Accept-Encoding:客户端所能识别的编码压缩格式,如:“Accept-Encoding: gzip, deflate”;
If- Modified-Since:该字段与客户端缓存相关,客户端所访问的URL自该指定日期以来在服务端是否被修改过,如果修改过则服务端返回新的修改后 的信息,如果未修改过则服务器返回304表明此请求所指URL未曾修改过,如:“If-Modified-Since: Fri, 2 Sep 2006 19:37:36 GMT”;
If-None-Match:该字段与客户端缓存相关,客户端发送URL请求的同时发送该字段及标识,如 果服务端的标识与客户端的标识一致,则返回304表明此URL未修改过,如果不一致则服务端返回完整的数据信息,如:“If-None-Match: 0f0a893aad8c61:253, 0f0a893aad8c61:252, 0f0a893aad8c61:251”;
Cookie:为扩展字段,存储于客户端,向同一域名的服务端发送属于该域的cookie,如:“Cookie: MailUserName=whouse”;

 

c) 实体头(entity-header): (此类头存在时要求有数据体)
Content-Encoding:客户端所能识别的编码压缩格式,如:“Content-Encoding: gzip, deflate”;
Content-Length:客户端以POST方法上传数据时数据体部分的内容长度,如:“ Content-Length: 24”;
Content- Type:客户端发送的数据体的内容类型,如:“Content-Type: application/x-www-form-urlencoded”为以普通的POST方法发送的数据;“Content-Type: multipart/form-data; boundary=---------------------------5169208281820”,则表明数据体由多部分组成,分隔符为 “-----------------------------5169208281820”;

 

2.5)响应格式

a) 通用头(general-header):
Cache- Control:服务端要求中间代理及客户端如何缓存自己响应的数据,如“Cache-Control: no-cache”,如:“Cache-Control: private” 不希望被缓存,“Cache-Control: public” 可以被缓存;
Connection:服务端是否希望与客户端之间保持长连接,如“Connection: close”, “Connection: keep-alive”;
Date:只有当请求方法为POST或PUT方法时客户端才可能会有些字段;
Pragma:包含了服务端一些特殊响应信息,如 “Pragma: no-cache” 服务端希望代理或客户端不应缓存结果数据;
Transfer-Encoding:服务端向客户端传输数据所采用的传输模式(仅在HTTP1.1中出现),如:“Transfer-Encoding: chunked”,注:该字段的优先级要高于“Content-Length” 字段的优先级;

 

b)响应头(response-header):
Accept-Ranges:表明服务端接收的数据单位,如:“Accept-Ranges: bytes”, ;
Location:服务端向客户端返回此信息以使客户端进行重定向,如:“Location: http://www.hexun.com”;
Server:服务端返回的用于标识自己的一些信息,如:“ Server: Microsoft-IIS/6.0”;
ETag:服务端返回的响应数据的标识字段,客户端可根据此字段的值向服务器发送某URL是否更新的信息;

 

c)实体头(entity-header): (此类头存在时要求有数据体)
Content-Encoding:服务端所响应数据的编码格式,如:“Content-Encoding: gzip”;
Content-Length:服务端所返回数据的数据体部分的内容长度,如:“ Content-Length: 24”;
Content-Type:服务端所返回的数据体的内容类型,如:“Content-Type: text/html; charset=gb2312” ;
Set-Cookie:服务端返回给客户端的cookie数据,如:“ Set-Cookie: ASP.NET_SessionId=icnh2ku2dqlmkciyobgvzl55; path=/”

 

2.6)服务器返回状态码

1xx:表明服务端接收了客户端请求,客户端继续发送请求;
2xx:客户端发送的请求被服务端成功接收并成功进行了处理;
3xx:服务端给客户端返回用于重定向的信息;
4xx:客户端的请求有非法内容;
5xx:服务端未能正常处理客户端的请求而出现意外错误。

 

举例:

“100”  ; 服务端希望客户端继续;
“200”  ; 服务端成功接收并处理了客户端的请求;
“301”  ; 客户端所请求的URL已经移走,需要客户端重定向到其它的URL;
“304”  ; 客户端所请求的URL未发生变化;
“400”  ; 客户端请求错误;
“403”  ; 客户端请求被服务端所禁止;
“404”  ; 客户端所请求的URL在服务端不存在;
“500”  ; 服务端在处理客户端请求时出现异常;
“501”  ; 服务端未实现客户端请求的方法或内容;
“502”  ; 此为中间代理返回给客户端的出错信息,表明服务端返回给代理时出错;
“503”  ; 服务端由于负载过高或其它错误而无法正常响应客户端请求;
“504”  ; 此为中间代理返回给客户端的出错信息,表明代理连接服务端出现超时。

 

2.7)chunked 传输

   编码使用若干个Chunk组成,由一个标明长度为0的chunk结束,每个Chunk有两部分组成,第一部分是该Chunk的长度(以十六进制表示)和 长度单位(一般不写),第二部分就是指定长度的内容,每个部分用CRLF隔开。在最后一个长度为0的Chunk中的内容是称为footer的内容,是一些 没有写的头部内容。另外,在HTTP头里必须含有:” Transfer-Encoding: chunked” 通用头字段。格式如下:

chunked 传输

 

2.8)HTTP 请求方法

GET、POST、HEAD、CONNECT、PUT、DELETE、TRACE、OPTIONS

 

2.9)HTTP 断点续传

a)HTTP 请求头

格式:Range: bytes={range_from}-{range_to}

该头表示从后端 HTTP 服务器取数据,开始偏移位置为 {range_from},结束偏移位置为 {range_to},其中偏移位置下标从 0 开始;如果省略了 {range_to} 则表示从指定的开始位置 {range_from} 至数据结尾。

如:Range: bytes=1024-2048  其表示读取从偏移位置 1024 至 2028 的数据,而 Range: bytes=1024- 则表示读取从偏移位置 1024 至数据结尾的数据。

b)HTTP 响应头

格式:Content-Range: bytes {range_from}-{range_to}/{total_length}

其中 {range_from} 和 {range_to} 分别代表当前从服务端返回的数据的起始偏移位置(下标从 0 开始),这是一个双向闭区间范围,而 total_length 则指定了整个数据的总长度,此时 HTTP 响应头中的 Content-Length 如果存在,则其值表示当前返回的数据块(由 {range_from} 和 {range_to} 指定的数据区间)的长度。该长度内的数据包括 {range_from} 和 {range_to} 两个位置的数据。

 

3.0)举例

a)GET请求

Html代码  收藏代码
  1. GET http://photo.test.com/inc/global.js HTTP/1.1  
  2. Host: photo.test.com  
  3. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.8.1) Gecko/20061010 Firefox/2.0  
  4. Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5  
  5. Accept-Language: en-us,zh-cn;q=0.7,zh;q=0.3  
  6. Accept-Encoding: gzip,deflate  
  7. Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7  
  8. Keep-Alive: 300  
  9. Proxy-Connection: keep-alive  
  10. Cookie: ASP.NET_SessionId=ey5drq45lsomio55hoydzc45  
  11. Cache-Control: max-age=0  

 

b)POST请求

Html代码  收藏代码
  1. POST / HTTP/1.1  
  2. Accept: image/gif, image/x-xbitmap, image/jpeg, application/vnd.ms-powerpoint, application/msword, */*  
  3. Accept-Language: zh-cn  
  4. Content-Type: application/x-www-form-urlencoded  
  5. Accept-Encoding: gzip, deflate  
  6. User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)  
  7. Host: www.test.com  
  8. Content-Length: 24  
  9. Connection: Keep-Alive  
  10. Cache-Control: no-cache  
  11.   
  12. name=value&submitsubmit=submit  

 

c)通过HTTP代理发送GET请求

Html代码  收藏代码
  1. GET http://mail.test.com/ HTTP/1.1  
  2. Host: mail.test.com  
  3. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.8.1) Gecko/20061010 Firefox/2.0  
  4. Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5  
  5. Accept-Language: en-us,zh-cn;q=0.7,zh;q=0.3  
  6. Accept-Encoding: gzip,deflate  
  7. Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7  
  8. Keep-Alive: 300  
  9. Proxy-Connection: keep-alive  

 

d)POST方式上传文件

Html代码  收藏代码
  1. POST http://www.test.comt/upload_attach?uidl=%3C HTTP/1.1  
  2. Host: www.test.com  
  3. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.8.1) Gecko/20061010 Firefox/2.0  
  4. Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5  
  5. Accept-Language: en-us,zh-cn;q=0.7,zh;q=0.3  
  6. Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7  
  7. Content-Type: multipart/form-data; boundary=---------------------------5169208281820  
  8. Content-Length: 449  
  9.   
  10. -----------------------------5169208281820  
  11. Content-Disposition: form-data; name="file_1"filename=""  
  12. Content-Type: application/octet-stream  
  13.   
  14.   
  15. -----------------------------5169208281820  
  16. Content-Disposition: form-data; name="file_0"filename="test.txt"  
  17. Content-Type: text/plain  
  18.   
  19. hello world!  
  20.   
  21. -----------------------------5169208281820  
  22. Content-Disposition: form-data; name="oper"  
  23.   
  24. upload  
  25. -----------------------------5169208281820--  

 

e)CONNECT举例

Html代码  收藏代码
  1. CONNECT mail.test.com:80 HTTP/1.1  
  2. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.8.1) Gecko/20061010 Firefox/2.0  
  3. Proxy-Connection: keep-alive  
  4. Host: mail.test.com:80  

 

3.1)在终端以 telnet 方式测试

a)打开回显功能(针对windows)
  Windows 2000:进入DOS模式->输入 telnet->set LOCAL_ECHO->退出:quit->telnet ip 80
  Windows xp:进入DOS模式->输入telnet->set local echo->open ip 80
b) 按HTTP协议格式输入GET请求、HEAD请求、POST请求。

 

 

分享到:
评论

相关推荐

    单片机POV趣味制作详解

    单片机POV趣味制作详解 真心很不错的一本书

    jquery简单的真心话大冒险游戏文字随机抽取大冒险

    【jQuery 真心话大冒险游戏开发详解】 在网页游戏中,真心话大冒险是一种深受玩家喜爱的互动方式。利用JavaScript库jQuery,我们可以轻松创建一个简单而有趣的文字随机抽取大冒险游戏。本教程将深入讲解如何利用...

    事业单位结构化面试五大题型详解分享.docx

    【事业单位结构化面试五大题型详解】 在事业单位的招聘过程中,结构化面试是一种常见的考核方式,旨在全面评估应聘者的综合素质和岗位匹配度。本篇主要分析的是“求职动机与拟任职位匹配类”这一题型,它是面试的...

    我的真心话作文.doc

    【知识点详解】 这篇文档标题为“我的真心话作文.doc”,从描述和标签中我们可以推测,这是一篇关于表达对老师敬爱之情的作文,属于个人情感的抒发,特别是学生对教师角色的理解和感激。在内容的部分,作者通过比喻...

    简历制作技巧详解.pptx

    要做到这一点,你需要站在面试官的角度思考:他们关心的是你是什么样的人,你是否真心希望加入他们的公司,以及你是否有能力完成工作。因此,简历应清晰地展现你的个人特质、求职意愿和专业能力。 简历的内容通常...

    七年级政治上册 第四课第二课时怪吗 不怪 人民版.doc

    【知识点详解】 1. **人际关系的重要性**:课程中提到的人际交往能力是青少年成长过程中的重要一环。学会接受不同,意味着我们需要理解每个人都是独一无二的,具有不同的性格、习惯和观点,这有助于建立和谐的人际...

    有一种美,叫静默如初.doc

    5. **爱情中的迁就与真心**:爱情中的包容和理解是建立在自愿的基础上,真心的付出往往能够带来意想不到的幸福。 6. **放下期望,收获惊喜**:避免对他人抱有过高期待,保持真诚的交往,往往能得到意想不到的回报。 ...

    2010年7月日语能力测试N1真题+听力原文+读解部分详细解答(免费下载)

    【日语能力测试N1真题详解】 日语能力测试N1是衡量非母语者日语水平的最高级别考试,对于希望在日本工作或学习的人来说至关重要。2010年7月的日语能力测试N1真题包含了听力、读解和词汇三个部分,旨在测试考生在...

    简单好学的四类动画微课制作软件-真心好用到爆!.docx

    四类动画微课制作软件详解 随着互联网技术的发展,微课作为一种教学工具,变得越来越流行。微课的制作方法多种多样,其中动画微课制作方法尤其受到欢迎。动画微课制作方法可以制作出专业、效果新颖、表现力强的微课...

    学校老师述职报告.doc

    2. **情感教育**: 教师认为建立良好的师生关系至关重要,以真心关爱每一位学生为基础,通过谈心和鼓励激发学生的学习热情和信心,关注学生的情感需求。 3. **教学方法**: 采用"小步子,多成功"的教学策略,关注个体...

    Python安装与基本数据类型教程详解

    Python比其他的语言来说真的简洁多了,很多时候想做的东西都有对应的模块可以导入,平时玩点小东西真心不错。 首先讲一下安装,其实没什么好讲的,点点点点点,完事。 这里的AddPython 3.7to PATH记得勾上,这样你就...

    大学新生的简短寄语.docx

    【大学新生寄语详解】 大学生活是人生的重要阶段,它不仅是知识积累的时期,更是个人成长和性格塑造的关键时期。以下是对大学新生的一些重要寄语的详细解释: 1. 学习投入:大学应将大部分时间用于学习,这有助于...

    基于51单片机开发的排球计时器,附有详细注释讲解,为大家提供最真心的帮助

    【51单片机开发详解】 51单片机是微控制器领域中非常经典的一款芯片,由Intel公司推出,广泛应用于各种电子设备的控制中心。它的内部集成了CPU、RAM、ROM、定时器/计数器以及串行通信接口等核心功能,非常适合初学者...

    教官带军训的心得体会简短范文.docx

    【内容详解】: 军训,作为大学新生的第一堂课,不仅是体能和纪律的锻炼,更是集体意识和精神风貌的塑造。在这个过程中,教官的角色至关重要。教官不仅要严格要求,更要懂得用情感去引导和激励学生,这是教官带军训...

    七年级政治上:第一课(第一次 握手 )教案人民版 教案.doc

    【知识点详解】 1. **人际关系的重要性**:七年级的政治课程关注的是学生的人际交往技能,强调与同学和老师的相处之道,以及如何建立健康的人际关系和集体观念。这表明人际交往是青少年成长的重要组成部分,有助于...

    2022年互动学习主题班级活动策划书.docx

    4. **游戏环节:**真心话大冒险,旨在增加团队凝聚力,同时也是一种轻松愉快的交流方式。 **游戏规则详解:** - **游戏准备:**游戏分为三组进行,从第一组开始,按顺序报数。 - **规则说明:**遇到含3或3的倍数的...

    树虎团建_团建活动小游戏大全.docx

    2. **真心话和大冒险**:参与者通过随机方式决定接受真心话挑战(回答任何问题)还是大冒险任务(执行指定任务)。此游戏考验诚实和勇气。 3. **傻瓜拳**:玩家同时出拳(剪刀、石头、布),根据特定规则喊出对方是...

    地产品牌七夕主题开盘活动策划方案.pptx

    20:50-21:10,真心话游戏,加深参与者间的联系。 21:10-21:20,深情告白表演,为活动增添情感元素。 21:20-21:40,公布优惠政策,邀请参与者参加9月1日的开盘活动,并进行抽奖。 【活动目的】 此次活动的主要目的...

    详解ECharts使用心得总结

    本来打算用谷歌的地图,但是,做出来之后,整体的效果看起来太差了,最后就在网上搜相关的地图呈现的控件,然后就找到了这个ECharts报表呈现组件,挺不错的一个组件,而且地图数据都是离线的,真心很赞。但是,使用...

    七年级政治上册第二单元第四课第3框怪吗?不怪!习人民版道德与法治.doc

    【知识点详解】 1. **人际关系的重要性**:人际关系是生活中不可或缺的一部分,它影响着我们的幸福感、心理健康和生活质量。学会建立和维护良好的人际关系是个人成长的重要环节。 2. **接纳差异**:每个人都有自己...

Global site tag (gtag.js) - Google Analytics