一、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
2.9)举例
a)GET请求
Html代码
-
GET http:
-
Host: photo.test.com
-
User-Agent: Mozilla/
5.0
(Windows; U; Windows NT
5.0
; zh-CN; rv:
1.8
.
1
) Gecko/
20061010
Firefox/
2.0
-
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=
0.9
,text/plain;q=
0.8
,image/png,*/*;q=
0.5
-
Accept-Language: en-us,zh-cn;q=
0.7
,zh;q=
0.3
-
Accept-Encoding: gzip,deflate
-
Accept-Charset: gb2312,utf-
8
;q=
0.7
,*;q=
0.7
-
Keep-Alive:
300
-
Proxy-Connection: keep-alive
-
Cookie: ASP.NET_SessionId=ey5drq45lsomio55hoydzc45
-
Cache-Control: max-age=
0
GET http://photo.test.com/inc/global.js HTTP/1.1
Host: photo.test.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.8.1) Gecko/20061010 Firefox/2.0
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,zh-cn;q=0.7,zh;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Proxy-Connection: keep-alive
Cookie: ASP.NET_SessionId=ey5drq45lsomio55hoydzc45
Cache-Control: max-age=0
b)POST请求
Html代码
-
POST / HTTP/
1.1
-
Accept: image/gif, image/x-xbitmap, image/jpeg, application/vnd.ms-powerpoint, application/msword, */*
-
Accept-Language: zh-cn
-
Content-Type: application/x-www-form-urlencoded
-
Accept-Encoding: gzip, deflate
-
User-Agent: Mozilla/
4.0
(compatible; MSIE
6.0
; Windows NT
5.0
)
-
Host: www.test.com
-
Content-Length:
24
-
Connection: Keep-Alive
-
Cache-Control: no-cache
-
-
name=value&submit=submit
POST / HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Host: www.test.com
Content-Length: 24
Connection: Keep-Alive
Cache-Control: no-cache
name=value&submit=submit
c)通过HTTP代理发送GET请求
Html代码
-
GET http:
-
Host: mail.test.com
-
User-Agent: Mozilla/
5.0
(Windows; U; Windows NT
5.0
; zh-CN; rv:
1.8
.
1
) Gecko/
20061010
Firefox/
2.0
-
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=
0.9
,text/plain;q=
0.8
,image/png,*/*;q=
0.5
-
Accept-Language: en-us,zh-cn;q=
0.7
,zh;q=
0.3
-
Accept-Encoding: gzip,deflate
-
Accept-Charset: gb2312,utf-
8
;q=
0.7
,*;q=
0.7
-
Keep-Alive:
300
-
Proxy-Connection: keep-alive
GET http://mail.test.com/ HTTP/1.1
Host: mail.test.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.8.1) Gecko/20061010 Firefox/2.0
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,zh-cn;q=0.7,zh;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Proxy-Connection: keep-alive
d)POST方式上传文件
Html代码
-
POST http:
-
Host: www.test.com
-
User-Agent: Mozilla/
5.0
(Windows; U; Windows NT
5.0
; zh-CN; rv:
1.8
.
1
) Gecko/
20061010
Firefox/
2.0
-
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=
0.9
,text/plain;q=
0.8
,image/png,*/*;q=
0.5
-
Accept-Language: en-us,zh-cn;q=
0.7
,zh;q=
0.3
-
Accept-Charset: gb2312,utf-
8
;q=
0.7
,*;q=
0.7
-
Content-Type: multipart/form-data; boundary=---------------------------
5169208281820
-
Content-Length:
449
-
-
-----------------------------
5169208281820
-
Content-Disposition: form-data; name=
"file_1"
; filename=
""
-
Content-Type: application/octet-stream
-
-
-
-----------------------------
5169208281820
-
Content-Disposition: form-data; name=
"file_0"
; filename=
"test.txt"
-
Content-Type: text/plain
-
-
hello world!
-
-
-----------------------------
5169208281820
-
Content-Disposition: form-data; name=
"oper"
-
-
upload
-
-----------------------------
5169208281820
--
-
-
POST http://www.test.comt/upload_attach?uidl=%3C HTTP/1.1
Host: www.test.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.8.1) Gecko/20061010 Firefox/2.0
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,zh-cn;q=0.7,zh;q=0.3
Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7
Content-Type: multipart/form-data; boundary=---------------------------5169208281820
Content-Length: 449
-----------------------------5169208281820
Content-Disposition: form-data; name="file_1"; filename=""
Content-Type: application/octet-stream
-----------------------------5169208281820
Content-Disposition: form-data; name="file_0"; filename="test.txt"
Content-Type: text/plain
hello world!
-----------------------------5169208281820
Content-Disposition: form-data; name="oper"
upload
-----------------------------5169208281820--
e)CONNECT举例
Html代码
-
CONNECT mail.test.com:
80
HTTP/
1.1
-
User-Agent: Mozilla/
5.0
(Windows; U; Windows NT
5.0
; zh-CN; rv:
1.8
.
1
) Gecko/
20061010
Firefox/
2.0
-
Proxy-Connection: keep-alive
-
Host: mail.test.com:
80
CONNECT mail.test.com:80 HTTP/1.1
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.8.1) Gecko/20061010 Firefox/2.0
Proxy-Connection: keep-alive
Host: mail.test.com:80
3.0)在终端以 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请求。
原文:http://zsxxsz.iteye.com/blog/568250
- 大小: 57.8 KB
- 大小: 58.8 KB
- 大小: 43 KB
- 大小: 90.1 KB
- 大小: 55 KB
- 大小: 62.3 KB
分享到:
相关推荐
#### 一、ControlNet与Modbus协议简介 - **ControlNet**: 是一种工业现场总线技术标准,由Rockwell Automation开发并推广,主要用于自动化系统的高速通信,支持实时数据交换和同步操作。ControlNet能够实现分布式...
4. **转接头/线缆**:例如,从USB Type-C转换为USB Type-A,或者从USB2.0升级到USB3.0。 **与其他USB版本的区别** 虽然USB3.0和USB3.1提供了更高的数据传输速度(5Gbps和10Gbps),但USB2.0仍然在很多场景下被广泛...
#### 一、电力104协议简介 电力104协议(IEC 60870-5-104)是国际电工委员会制定的一种远程通信标准,主要用于电力系统的监控与数据采集(SCADA)。该协议基于TCP/IP网络,提供了数据传输的安全性和可靠性保障。在...
HL7(Health Level Seven)接口协议是医疗健康信息行业内广泛使用的标准,用于不同信息系统之间的数据交换。这个协议的目的是为了促进医院、诊所、实验室、药店等机构之间电子健康记录的有效共享,提高医疗服务的...
DNS(Domain Name System)协议是互联网上的一个关键组件,它为用户提供了一种通过易于记忆的域名来访问网站或服务的方法,而不是使用难以记忆的IP地址。这篇教程将深入解析DNS协议的基本原理、工作流程以及其在...
4. 应用层:应用层协议如FTP(文件传输协议)、HTTP(超文本传输协议)和SMTP(简单邮件传输协议)等,它们直接与用户交互,提供具体的服务。 5. 在这五层中,数据从上层向下层封装,添加必要的头部信息,然后从...
#### 一、HTTP协议简介 HTTP(HyperText Transfer Protocol)是一种应用层协议,用于分布式超媒体信息系统的通信。自1990年问世以来,HTTP以其简洁高效的特点,在万维网(World Wide Web, WWW)中扮演着核心角色。...
IPv6,全称为Internet Protocol Version 6,是互联网协议的第六版,是为了解决IPv4地址耗尽问题而设计的下一代互联网协议。IPv6在IPv4的基础上进行了大量的改进和扩展,提供了更大的地址空间,提高了网络效率,增强...
#### 二、产品简介 **DDMC1F通讯协议转换器**是由捷通科技有限公司生产的一款高性能模块,其主要功能是作为中间件连接西门子S7-200系列PLC与其他支持LINK通讯协议的设备,如三菱FX/A系列PLC。该模块支持多种通讯...
应用层是最高层,直接面向用户提供服务,包括HTTP、FTP、SMTP等协议。这些协议允许应用程序访问网络服务,实现特定的功能,如网页浏览、文件传输、电子邮件发送等。 ### 网络接口技术与串行线路协议 IP使用网络...
在这个“dns协议简介ppt”中,我们深入理解DNS的工作原理、历史演变以及其在现代网络中的应用。 首先,DNS协议解决了网络通讯中的一个重要问题:人与机器之间的沟通鸿沟。当我们输入像"www.google.com"这样的域名时...
**H323协议简介** H323协议是由国际电信联盟(ITU)的第15研究组SG-15于1996年制定的一种多媒体通信标准,主要用于无服务质量(QoS)保证的分组网络,如TCP/IP、IPX等以太网、快速以太网、令牌环网和FDDI技术。该协议为...
"其他应用层协议简介"这一主题,旨在介绍除了我们熟知的一些如HTTP、FTP、SMTP之外的协议。这些协议虽然可能不如主流协议那么广为人知,但它们在特定领域或场景中发挥着不可或缺的作用。 首先,我们要提到NNTP...
**TCP/IP协议栈简介** TCP/IP协议栈包括以下四个主要层次: 1. **链路层**:也称网络接口层,负责处理特定网络媒介的数据传输,如以太网、令牌环等。它包括ARP(地址解析协议),用于将IP地址转换为物理MAC地址。 ...