`
horizon0315
  • 浏览: 30746 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

HTTP 协议简介(转)

阅读更多

一、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://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




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

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://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




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与Modbus协议简介 - **ControlNet**: 是一种工业现场总线技术标准,由Rockwell Automation开发并推广,主要用于自动化系统的高速通信,支持实时数据交换和同步操作。ControlNet能够实现分布式...

    USB2.0协议转换模块简介

    4. **转接头/线缆**:例如,从USB Type-C转换为USB Type-A,或者从USB2.0升级到USB3.0。 **与其他USB版本的区别** 虽然USB3.0和USB3.1提供了更高的数据传输速度(5Gbps和10Gbps),但USB2.0仍然在很多场景下被广泛...

    电力系统104与SuiteLink、DDE、OPC等通讯协议的转换.doc编程资料x

    #### 一、电力104协议简介 电力104协议(IEC 60870-5-104)是国际电工委员会制定的一种远程通信标准,主要用于电力系统的监控与数据采集(SCADA)。该协议基于TCP/IP网络,提供了数据传输的安全性和可靠性保障。在...

    HL7接口协议简介

    HL7(Health Level Seven)接口协议是医疗健康信息行业内广泛使用的标准,用于不同信息系统之间的数据交换。这个协议的目的是为了促进医院、诊所、实验室、药店等机构之间电子健康记录的有效共享,提高医疗服务的...

    dns协议简介

    DNS(Domain Name System)协议是互联网上的一个关键组件,它为用户提供了一种通过易于记忆的域名来访问网站或服务的方法,而不是使用难以记忆的IP地址。这篇教程将深入解析DNS协议的基本原理、工作流程以及其在...

    tcp/ip协议简介

    4. 应用层:应用层协议如FTP(文件传输协议)、HTTP(超文本传输协议)和SMTP(简单邮件传输协议)等,它们直接与用户交互,提供具体的服务。 5. 在这五层中,数据从上层向下层封装,添加必要的头部信息,然后从...

    HTTP协议详解

    #### 一、HTTP协议简介 HTTP(HyperText Transfer Protocol)是一种应用层协议,用于分布式超媒体信息系统的通信。自1990年问世以来,HTTP以其简洁高效的特点,在万维网(World Wide Web, WWW)中扮演着核心角色。...

    IPv6之二:IPv6简介与协议入门(下) IPv6之二:IPv6简介与协议入门(下)

    IPv6,全称为Internet Protocol Version 6,是互联网协议的第六版,是为了解决IPv4地址耗尽问题而设计的下一代互联网协议。IPv6在IPv4的基础上进行了大量的改进和扩展,提供了更大的地址空间,提高了网络效率,增强...

    西门子S7-200通讯协议转换模块使用说明.pdf

    #### 二、产品简介 **DDMC1F通讯协议转换器**是由捷通科技有限公司生产的一款高性能模块,其主要功能是作为中间件连接西门子S7-200系列PLC与其他支持LINK通讯协议的设备,如三菱FX/A系列PLC。该模块支持多种通讯...

    TCPIP协议体系结构简介

    应用层是最高层,直接面向用户提供服务,包括HTTP、FTP、SMTP等协议。这些协议允许应用程序访问网络服务,实现特定的功能,如网页浏览、文件传输、电子邮件发送等。 ### 网络接口技术与串行线路协议 IP使用网络...

    dns协议简介ppt

    在这个“dns协议简介ppt”中,我们深入理解DNS的工作原理、历史演变以及其在现代网络中的应用。 首先,DNS协议解决了网络通讯中的一个重要问题:人与机器之间的沟通鸿沟。当我们输入像"www.google.com"这样的域名时...

    H323协议简介-李军

    **H323协议简介** H323协议是由国际电信联盟(ITU)的第15研究组SG-15于1996年制定的一种多媒体通信标准,主要用于无服务质量(QoS)保证的分组网络,如TCP/IP、IPX等以太网、快速以太网、令牌环网和FDDI技术。该协议为...

    其他应用层协议简介

    "其他应用层协议简介"这一主题,旨在介绍除了我们熟知的一些如HTTP、FTP、SMTP之外的协议。这些协议虽然可能不如主流协议那么广为人知,但它们在特定领域或场景中发挥着不可或缺的作用。 首先,我们要提到NNTP...

    TCP/IP协议简介

    **TCP/IP协议栈简介** TCP/IP协议栈包括以下四个主要层次: 1. **链路层**:也称网络接口层,负责处理特定网络媒介的数据传输,如以太网、令牌环等。它包括ARP(地址解析协议),用于将IP地址转换为物理MAC地址。 ...

Global site tag (gtag.js) - Google Analytics