- 浏览: 554540 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
hdblocal_:
为什么messageReceived之后,再encode,有点 ...
MINA框架使用总结 -
andey007518:
MINA框架使用总结 -
ymm8505:
我自己的理解 CopyOnWriteArrayList 这个 ...
ArrayList遍历的同时删除 -
spring_springmvc:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
Eclipse快捷键-方便查找 -
netwelfare:
文章讲解的不够详细,ArrayList在遍历的同时如果去删除或 ...
ArrayList遍历的同时删除
一、TCP/IP 协议介绍
在介绍 HTTP 协议之前,先简单说一下TCP/IP协议的相关内容。TCP/IP协议是分层的,从底层至应用层分别为:物理层、链路层、网络层、传输层和应用层,如下图所示:
从应用层至物理层,数据是一层层封装,封装的方式一般都是在原有数据的前面加一个数据控制头,数据封装格式如下:
其中,对于TCP传输协议,客户端在于服务器建立连接前需要经过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协议格式也比较简单,格式如下:
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” 通用头字段。格式如下:
2.8)HTTP 请求方法
GET、POST、HEAD、CONNECT、PUT、DELETE、TRACE
2.9)举例
a)GET请求
- 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
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请求
- 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 =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请求
- 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
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方式上传文件
- 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--
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举例
- 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请求。
发表评论
-
java访问apache server
2011-11-04 10:11 1417URL connUrl = new U ... -
正则表达式
2011-04-14 20:33 1000(touch|wap20|wap10)(\s*)=(\s*)& ... -
正则表达式
2011-04-14 20:33 1066(touch|wap20|wap10)(\s*)=(\s*)& ... -
验证码打击外挂
2010-09-19 11:08 14701.下载图片验证码 a.恶意用户不停的拉验证码图片,等待验证 ... -
NIO实现的几种模型
2010-09-17 09:40 16861.单个长连接模型 客户端(读异步,写同步) 服务端(读异 ... -
技术语录
2010-09-10 20:29 1177tcp连接池:一定要让连接池自己创建连接,而不是让业务去创建连 ... -
jvm监控分析总结与分析
2010-07-21 20:32 10596参考文献: http://www.51testing.com ... -
VMware记录
2010-06-12 17:46 11061.桥接就是直接模拟一台pc和本机对等,nat就是通过本机代理 ... -
IT名词术语总汇
2010-04-02 18:14 1504正向控制 子类调用父类,晚辈调用长辈,这中调用方 ... -
MyEclipse搭建环境遇到的问题汇总
2010-04-02 15:57 11131.jar包中的源代码字体乱码 window/prefere ... -
java GC
2009-07-02 22:36 19531,out of memory 只发生在jv ... -
ArrayList遍历的同时删除
2009-06-06 01:05 30374方法一 ArrayList<String> l ... -
[导入]并发程序设计需要掌握的知识点
2009-05-31 18:11 1704转载地址:http://www.blogjav ... -
CAS与乐观锁思想来解决并发问题
2009-05-15 00:08 1593CAS(compare and set)留个标题,是个思考的方 ... -
UltraEdit高级教程
2009-04-14 13:22 17034UltraEdit 是一套功能强 ... -
Eclipse快捷键-方便查找
2009-01-14 14:58 115740【Ct rl+T】 搜索当 ... -
读风云bolg后,随便记录
2008-10-19 02:30 1085你需要面向对象吗?你需要 GC 吗?你需要所有的类都有一个共同 ... -
Element与Node区别
2008-08-09 13:01 3884<url-mapping url="chan ... -
UDP和TCP的选择
2008-08-06 15:13 2594一直在思考一个我问题,http协议为什么用TCP而不用UDP。 ... -
Java生成UUID
2007-09-28 01:51 59023UUID(Universally Unique Iden ...
相关推荐
tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议tcp/ip协议...
《TCP/IP协议详解-卷1-协议》是网络通信领域的一本权威著作,它深入浅出地阐述了TCP/IP协议族的基本概念、原理和实现。这本书对于理解互联网背后的工作机制至关重要,无论是网络工程师、程序员还是对网络技术感兴趣...
《TCP/IP协议详解-卷2 实现》是网络通信领域的一部权威著作,它深入剖析了TCP/IP协议栈的实现细节。本文件包含了该书的高清PDF版本,旨在帮助读者全面理解TCP/IP协议在实际系统中的工作原理和操作流程。 TCP/IP协议...
Windows 环境下 TCP/IP 协议的配置和诊断 本资源摘要信息主要涉及到 Windows 环境下的 TCP/IP 协议配置和诊断。该资源包括了 TCP/IP 协议的配置、 Ping 命令工具的使用、Ipconfig 工具的使用等内容。 知识点一:...
5. **文件“基于ARM的嵌入式TCP/IP协议的实现.kdh”**:这个文件可能是某种特定格式的文档或源代码,详细介绍了如何在ARM平台上构建和实现TCP/IP协议栈,可能包含编程示例、配置指导和问题解决策略。 6. **文件...
TCP/IP 协议在 Windows 环境下的配置和诊断 本文主要讲述了在 Windows 环境下 TCP/IP 协议的配置和诊断,包括网络配置、TCP/IP 协议配置、Ping 命令工具的使用、Ipconfig 工具的使用等内容。 一、网络配置 在 ...
标题中的“TCP/IP源代码”指的是TCP/IP协议族的源代码,这是一组用于网络通信的核心协议,包括传输控制协议TCP(Transmission Control Protocol)和网际协议IP(Internet Protocol)。TCP/IP是互联网的基础,它定义...
《microchip TCP/IP协议栈应用笔记V3.6》是一份深入探讨Microchip公司TCP/IP协议栈实现与应用的重要文档,特别适合嵌入式系统开发者和网络通信工程师参考。Microchip TCP/IP协议栈是该公司为微控制器提供的完整网络...
全硬件TCP/IP协议栈是一种将TCP/IP协议栈集成到硬件中的解决方案,极大地简化了网络通信的实现过程。下面详细介绍其四层结构: **1. 应用层**:主要处理用户级别的应用程序需求,例如HTTP、FTP等服务。 **2. 传输层...
TCP/IP协议是网络通信协议的基础,它规定了网络上的所有通信设备,尤其是一个主机与另一个主机之间的数据传输格式以及传送方式。TCP/IP协议的基本传输单位是数据包(datagram),TCP协议负责把数据分成若干个...
### S7-300的TCP/IP协议通讯 #### 概述 SIMATIC S7-300系列的CPU集成了PROFINET接口,不仅支持PROFINET总线通信,还可以用于标准的TCP/IP通信。这使得S7-300能够通过组态TCP连接以及使用开放式通信的功能块与其他...
一、TCP/IP 协议简介 TCP/IP 协议是计算机网络的通信协议的基础,包括两种协议:TCP(Transmission Control Protocol,传输控制协议)和 IP(Internet Protocol,网际协议)。TCP 负责确保数据的可靠传输,IP 负责...
TCP/IP协议是互联网的核心协议,它定义了网络设备如何交换信息。本文主要涵盖了TCP/IP协议的基础知识,包括计算机网络体系结构的分层、TCP/IP协议的含义及其组件、数据包的构成、数据处理流程等内容。 计算机网络...
tcp/ip协议实验是计算机网络领域中的一项重要实验,旨在让学生和从业者深入了解tcp/ip协议的原理和实现。下面是实验的详细介绍: 实验一 以太网数据帧的构成 以太网数据帧是tcp/ip协议中最基本的数据单元,它由目的...
**一、安装/卸载TCP/IP协议** - **安装TCP/IP协议**: 1. 打开“控制面板” -> “网络和互联网” -> “网络和共享中心” -> “更改适配器设置”。 2. 右键点击“本地连接”或“无线网络连接”,选择“属性”。 3. ...
TCP/IP协议族是互联网通信的基础,它是一组协议的集合,包括了网络接口层、网际层、传输层以及应用层等多个层次。这份"TCP/IP协议族(第四版)习题答案"涵盖了这个领域的核心概念和实践应用,对于学习者来说,是一个...
《TCP/IP协议族》由编程与网络权威专家BehrouzA.Forouzan撰写,是一本关于TCP/IP协议族的经典教材《TCP/IP协议族》图文并茂,重点概念突出。除了讲解一些基本概念和底层技术外,还介绍了TCP/IP协议族中的核心协议IP...
包含3部分:TCP/IP协议基础、TCP/IP协议实现、TCP事务协议,非常全而清晰的讲解。