HTTP协议初步解析

一、什么是HTTP协议

HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,定义了Web客户端向Web服务器请求Web页面的方式,以及服务器向客户端传送Web页面的方式。

定义中的名词解释:

什么是超文本?

超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本。

什么是应用层协议?

网络的设计者使用分层的方式组织网络协议以及实现这些协议的硬件和软件,历史上比较重要的一个协议组织模型是五层因特网协议栈,从顶层到底层,分别为应用层、运输层、网络层、链路层、物理层。其中应用层常见的协议有HTTP、SMTP、FTP等,运输层协议有TCP、UDP等,网络层有IP等。

二、HTTP协议特点

1. HTTP使用TCP作为它的运输层协议,TCP为HTTP提供可靠数据传输服务。使用了分层结构,HTTP协议不用担心数据丢失,也不用关注TCP从网络的数据丢失和乱序故障中恢复的细节。

2. HTTP是一个无状态协议,服务器向客户端发送被请求的文件,而不保存任何关于该客户的信息,(需要保存则应当使用cookie)。

3. HTTP/1.0使用非持续连接,HTTP/1.1使用持续连接。使用持续连接,在客户和服务器中不用多次分配TCP的缓冲区和保持TCP变量,同时避免了每一个传输对象的两倍RTT交付时延。HTTP的默认模式是使用带流水线的持续连接。

三、HTTP报文格式

1. 请求报文

举例如下:

GET  /somedir/page.html  HTTP/1.1

Host:  www.someschool.edu

Connection: close

User-agent: Mozilla/5.0

Accept-language: fr

-------------------------------------------------------

First line: request line

Other lines: header line

请求行: 方法字段 - URL字段 - HTTP版本字段

其中,方法字段可取GET, POST, HEAD, PUT, DELETE等

默认为GET请求,在URL后附带参数,有大小限制,不超过1K

表单提交中指明用POST时用POST,在实体中传递,无大小限制

HEAD方法常用于调试,只返回HTTP报文,不返回请求对象

Connection: close表示不使用持续连接

常见的请求头:

Accept: text/html,image/*   客户可接受的数据类型

Accept-Charset: ISO-8859-1  接受数据需要使用的字符集编码

Accept-Encoding: gzip,compress  接受的数据压缩格式

Accept-Language: en-us,zh-cn  接受的语言环境

Host: www.it315.org:80  虚拟主机名

If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT  缓存资源的最后获取时间

Referer: http://www.it315.org/index.jsp  当前的请求来自哪个链接

User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)  客户端的信息

Cookie

Connection: close/Keep-Alive  指定是否保持连接

Date: Tue, 11 Jul 2000 18:23:51 GMT  当前时间

2. 响应报文

举例如下:

HTTP/1.1 200 ok

Connection: close

Date: Tue, 09 Aug 2011 15:44:04 GMT

Server: Apache/2.2.3 (CentOS)

Last-Modified: Tue, 09 Aug 2011 15:11:03 GMT

Content-Length: 6821

Content-Type: text/html

(Data, Data, Data ...)

-------------------------------------------------------

First line: status line

Last line: entity body

Other lines: header line

状态行:协议版本 - 状态码 - 状态信息

状态码和状态信息常见的有:

200 OK

301 Moved Permanently

400 Bad Request

404 Not found

505 HTTP Version Not Supported

-------------------------------------------------------

100 ~ 199 表示成功接收,客户端需要继续提交才能完成整个过程,200 ~ 299 表示成功接收并已完成整个过程

300 ~ 399 为完成请求,客户需要进一步细化请求,如302请求重定向,304, 307 通知使用缓存

400 ~ 499 客户端请求有错误

500 ~ 599 服务器端出现错误

常见的响应头:

Location: http://www.it315.org/index.jsp  配合302实现请求重定向

Server:apache tomcat  服务器的基本信息

Content-Encoding: gzip  服务器发送数据时使用的压缩格式

Content-Length: 80  发送数据的大小

Content-Language: zh-cn  发送数据使用的语言环境

Content-Type: text/html; charset=GB2312  当前所发送的数据的基本信息

Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT  缓存相关

Refresh: 1;url=http://www.it315.org  定时刷新到某个URL

Content-Disposition: attachment;filename=aaa.zip  与下载有关的头

Transfer-Encoding: chunked  数据传输类型,数据一块块传输

Set-Cookie:SS=Q0=5Lb_nQ; path=/search  设置cookie

ETag: W/"83794-1208174400000"  和缓存相关

Expires: -1 指定资源缓存的时间,如果取值为0或-1浏览就不缓存资源

Cache-Control: no-cache  如果为no-cache则通知浏览器不缓存

Pragma: no-cache   如果为no-cache则通知浏览器不缓存

由于历史原因,以上三个都用来控制缓存,同时使用

Connection: close/Keep-Alive  是否保持连接

Date: Tue, 11 Jul 2000 18:23:51 GMT 当前时间

三、Telnet演示

telnet cis.poly.edu 80

时间: 2024-08-27 23:29:56

HTTP协议初步解析的相关文章

UDT协议深入解析

将近两年以前因为想选择一个兼顾TCP协议的可靠性和UDP协议的高效性来进行我们某种数据的传输曾经选择过UDT协议,也进行了一段时间的学习.实践.但最终由于不适合我们的业务场景放弃了它,但它的实现原理.代码实现.拓展使用的优秀给我留下了很深刻的印象,今天翻出自己曾经的一篇总结笔记来和大家一起回顾下UDT协议. UDT协议是什么?是一种基于UDP的数据传输协议(UDP-based Data Transfer Protocol,简称UDT). UDT协议的主要作用是什么?UDT的主要目的是支持高速广域

TCP协议 状态解析和状态统计

一.三次握手和四次挥手 1.建立连接(三次握手) (1)服务器会处于listen状态,客户端发送一个带SYN标志的TCP报文到服务器. (2)服务器端回应客户端的请求,这是三次握手中的第2个报文,这个报文同时带SYN标志和ACK标志. 因此它表示对刚才客户端SYN报文的回应:同时又标志SYN给客户端,询问客户端是否准备好进行数据通讯. (3)客户必须再次回应服务段一个ACK报文,这个时候两端就处于已经建立连接 2.连接终止(四次握手) 由于TCP连接是全双工的,因此每个方向都必须单独进行关闭.这

https协议了解,以及相关协议的解析

https协议了解,以及相关协议的解析 HTTPS简介 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL. 它是一个URI scheme(抽象标识符体系),句法类同http:体系.用于安全的HTTP数据传输.https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP

SSDP协议内容解析

SSDP(Simple Service Discovery Protocol),简单服务发现协议,用于发现局域网里面的设备和服务. SSDP消息分为设备查询消息.设备通知消息两种,通常情况下,使用更多地是设备查询消息. 1.设备查询消息: 格式例子如下: M-SEARCH * HTTP/1.1 HOST: 239.255.255.250:1900 MAN: "ssdp:discover" MX: 5 ST: ssdp:all 其中第一行是消息头,固定:HOST对应的是广播地址和端口,2

C# 串口操作系列(3) -- 协议篇,二进制协议数据解析

C# 串口操作系列(3) -- 协议篇,二进制协议数据解析 标签: c#bufferobject通讯byte硬件驱动 2010-05-27 09:54 51565人阅读 评论(215) 收藏 举报  分类: 通讯类库设计(4)  版权声明:本文为博主原创文章,未经博主允许不得转载. 我们的串口程序,除了通用的,进行串口监听收发的简单工具,大多都和下位机有关,这就需要关心我们的通讯协议如何缓存,分析,以及通知界面. 我们先说一下通讯协议.通讯协议就是通讯双方共同遵循的一套规则,定义协议的原则是尽可

C# 串口操作系列(4) -- 协议篇,文本协议数据解析

C# 串口操作系列(4) -- 协议篇,文本协议数据解析 标签: c#uiobjectstringbyte 2010-06-09 01:50 19739人阅读 评论(26) 收藏 举报  分类: 通讯类库设计(4)  版权声明:本文为博主原创文章,未经博主允许不得转载. 上一篇已经介绍了协议的组成,一个协议,一般具有 :协议头+长度+数据+校验 , 文本格式可以直观的定义回车换行是协议的结尾,所以我们可以省略数据长度,增加协议尾.即: 协议头 + 数据 + 校验 + 数据尾 . 文本方式的数据比

OpenStack Neutron DVR L2 Agent的初步解析(二)

声明: 本博客欢迎转载,但请保留原作者信息! 作者:林凯 团队:华为杭州OpenStack团队 OpenStack Juno版本已正式发布,这是这个开源云平台的10个版本,在Juno版的Neutron模块中真正引入了分布式路由(DVR)的实现,现在就让我们来初步看下分布式路由是怎么样工作的. 在OpenStack Neutron DVR L2 Agent的初步解析 (一)中我们已经知道DVR是怎么样工作的,现在就我们就来看下具体DVR是怎么样创建起来并且生效进行工作的. L2用Plugin与L3

【NXP开发板应用—智能插排】2.初步解析example之GPI

[前言] 首先感谢深圳市米尔科技有限公司举办的这次活动并予以本人参加这次活动的机会,以往接触过嵌入式,但那都是皮毛,最多刷个系统之类的,可以说对于嵌入式系统开发这件事情是相当非常陌生的,这次活动为我提供了一个非常好的入门和学习嵌入式的机会,同时在社区及技术群内也得到了很大的帮助和鼓励,这也是我不断前行和进步的动力,在这里一并致谢了.下面我附上本次学习心得及过程. 米尔MYS-6ULX单板机介绍: MYS-6ULX是一款以NXP i.MX6UL/i.MX6ULL处理器,Cortex-A7内核为核心

TCP/IP协议全解析 三次握手与四次挥手[转]

所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立.所谓四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开. AD:51CTO网+ 首届中国APP创新评选大赛火热招募中…… 一.TCP报文格式 TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图: 图1 TCP报文格式 上图中