`
horizon0315
  • 浏览: 29810 次
  • 性别: 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
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    USB2.0协议转换模块简介

    USB2.0协议转换模块简介 USB2.0协议转换模块简介

    Modbus 通信协议详解

    一、Modbus 协议简介 Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制...

    实验2 ARP协议解码详解实验.pdf

    ARP协议简介  ARP,全称Address Resolution Protocol,中文名为地址解析协议,它工作在数据链路层,在本层和硬件接口联系,同时对上层提供服务。  IP数据包常通过以太网发送,以太网设备并不识别32位IP地址,它们...

    CoAP 协议简介

    受约束的应用协议(COAP)是一种软件协议旨在以非常简单的电子设备,使他们能够在互联网上进行交互式通信中使用。它特别针对小型低功率传感器,开关,阀门和需要被控制或监督远程,通过标准的Internet网络类似的组件...

    MODBUS通讯协议及编程1

    MODBUS通讯协议及编程:一、 Modbus 协议简介;二、两种传输方式;(二)、通讯规约:二、编程举例

    Modbus 协议简介

    Modbus 协议MODBUS规约是MODICOM公司开发的一个为很多厂商支持的开放规约 Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它...

    嵌入式系统/ARM技术中的嵌入式CANopen协议转换模块

    1 引言  在上期文章中我们了解了... 2 XGate-COP10简介  XGate-COP10嵌入式模块是广州致远电子有限公司开发的一款拥有自主知识产权的CANopen从站通信模块。内部已经集成了CANopen从站协议栈代码,不需要用户进行二

    支持ipv6以及IPV4双协议栈的串口服务器 简介.pdf

    支持ipv6以及IPV4双协议栈的串口服务器 简介pdf,支持ipv6以及IPV4双协议栈的串口服务器 简介

    宇泰 UT-8251 USB2.0转CAN BUS协议转换器操作说明书.pdf

    宇泰 UT-8251 USB2.0转CAN BUS协议转换器操作说明书pdf,提供“宇泰 UT-8251 USB2.0转CAN BUS协议转换器操作说明书”免费资料下载,主要包括产品简介、外形及接口、软件工具使用等内容,可供选型和安装调试使用。

    MG-CANEX CANopen转ModbusTCP/IP协议转换器.zip

    MG-CANEX CANopen转ModbusTCP/IP协议转换器zip,提供“MG-CANEX CANopen转ModbusTCP/IP协议转换器”免费资料下载,主要包括产品概述、功能特点、技术参数、硬件说明、产品使用、实用案例、CANopen协议简介等内容,可...

    MG-CANSX Modbus RTU/ASCII转CANopen 协议转换器.zip

    CANSX Modbus RTU/ASCII转CANopen 协议转换器zip,提供“MG-CANSX Modbus RTU/ASCII转CANopen 协议转换器”免费资料下载,主要包括产品概述、功能特点、技术参数、硬件说明、产品使用、实用案例、CANopen协议简介等...

    MODBUS通信协议详解_irexplc.com

    一、 Modbus 协议简介 Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的...

    Modbus通信协议

    一、Modbus 协议简介 Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制...

    QQ客户端全源码(使用腾讯W.QQ协议)

    本贴转自: http://www.aau.cn/thread-4216-1-1.html 程序界面请到上面的贴子中查看 【简介】 快手W.QQ2012,采用腾讯QQ之w.qq.com协议(手机网页版)。 【目的】 1、第一次尝试Web UI开发应用 2、进阶学习...

    WAP 无线应用协议

    WAP无线应用协议 英文 目 录 译者序 序 前言 第一部分 体系结构 第1章 无线应用协议体系结构规范 …1 1.1 范围 1 1.2 研究背景 1 1.2.1 研究目的 1 1.2.2 要求 2 1.3 体系结构概述 3 1.3.1 万维网模型 3 1.3.2 WAP...

    uart转wifi-串口转wifi模块简介

    WLAN协议、网络协议栈(TCP/IP)和配置功能都集成在这个模块中。他的目的是为以开放或安全加密的方式提供符合标准的无线连接,应用于如工业设备、医疗电子系统、POS设备、传感器网络系统和计量设备,M2M通信和远程...

    php语法简介.pdf

    HTTP协议:HTTP 是基于 TCP/IP 协议的应用层协议。 9.数据转存 10. navicat的使用 打开服务器,打开数据库,新建连接,密码root,新建数据库 设置表头,设置主键和递增,设置默认值要加引号,设置非null 点击...

    Swift版字典转模型框架

    以下是一个常用的Swift版字典转模型框架项目简介: 1. ObjectMapper:这是一个功能强大且易于使用的Swift框架,它提供了简单的API来实现字典到模型对象的转换。它支持将JSON数据、字典或字符串转换为自定义的Swift...

    网络互连_网桥.路由器.交换机和互连协议

    第1版是“最小化”的,因为我常只举两个例子:两种网桥,网桥与路由器,面向连接的与无连接的网络层协议,两个无连接的协议(CLNP和IP)。在本版中我增加了更多的例子,包括ATM、IPv6、IPX、AppleTalk和DECnet。这样...

    TCP_IP培训教材

    6.1 路由协议简介 6.2 RIP协议 6.2.1 路由表的建立 6.2.2 距离向量算法 6.2.3 协议中的特殊处理 7 简单网管协议(SNMP) 7.1 SNMP管理模型 7.1.1 什么是SNMP 7.1.2 网管站和代理 7.2 SMI与MIB 7.3 SNMP协议 ...

Global site tag (gtag.js) - Google Analytics