一、什么是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
 

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

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

    C# 串口操作系列(4) -- 协议篇,文本协议数据解析 标签: c#uiobjectstringbyte 2010-06-09 01:50 19739人阅读 评论(26) 收藏 举报  分类: 通讯 ...

  2. RTP协议全解析(H264码流和PS流)(转)

    源: RTP协议全解析(H264码流和PS流)

  3. html文件在head标签中引入js地址和直接写js代码,所用时间是不同的,因为引入js地址,文件加载的时候需要通过通讯协议去解析地址,读取外部文件

    html文件在head标签中引入js地址和直接写js代码,所用时间是不同的,因为引入js地址,文件加载的时候需要通过通讯协议去解析地址,读取外部文件

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

    一.三次握手和四次挥手 1.建立连接(三次握手)   (1)服务器会处于listen状态,客户端发送一个带SYN标志的TCP报文到服务器.   (2)服务器端回应客户端的请求,这是三次握手中的第2个报 ...

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

    [前言] 首先感谢深圳市米尔科技有限公司举办的这次活动并予以本人参加这次活动的机会,以往接触过嵌入式,但那都是皮毛,最多刷个系统之类的,可以说对于嵌入式系统开发这件事情是相当非常陌生的,这次活动为我提 ...

  6. 使用 C# 实现 CJ-T188 水表协议和 DL-T645 电表协议的解析与编码

    一.协议的定义 要对某种协议进行编解码操作,就必须知道协议的基本定义,首先我们来看一下 CJ/T188 的数据帧定义(协议定义),了解请求数据与响应数据的基本结构. 1.1 CJ/T188 水表通讯协 ...

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

    原文地址:http://blog.csdn.net/wuyazhe/article/details/5627253 我们的串口程序,除了通用的,进行串口监听收发的简单工具,大多都和下位机有关,这就需要 ...

  8. 【Win10 UWP】URI Scheme(一):Windows Store协议的解析和使用

    协议是Windows Phone和Windows Store应用的一个重要特点,可以做到在不同应用之间进行互相呼起调用.小小协议,学问大着呢.我打算写几篇关于协议在UWP中使用的文章. 这一讲的主要对 ...

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

    所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立.所谓四次挥手(Four-Way Wavehand) ...

随机推荐

  1. 不会点git真不行啊.

    基本使用: // 进入项目根目录, git init // 接管你的项目文件夹, git status // 查看状态. 绿色已接管,红色未管理 git add . // 添加管理当前目录所有文件及子 ...

  2. makefile笔记3 - makefile规则

    target ... : prerequisites ... command ... ... 规则包含两个部分,一个是依赖关系,一个是生成目标的方法. 在 Makefile 中,规则的顺序是很重要的, ...

  3. [python3.6+opencv] 01 完成读取图片操作

    学习一下opencv3 奈何vs2017配的云里雾里,还是使用python吧 --人生苦短,python来凑 --使用Pycharm操作,面向界面的Pycharm好一些吧(我猜的) 新建Project ...

  4. 洛谷P1091 合唱队形

    输入输出样例 输入样例#1: 8 186 186 150 200 160 130 197 220 输出样例#1: 4 此题意在先升后降子序列,单调递增子序列,单调递减子序列当中找到最长的一组序列. 因 ...

  5. linux修改默认语言

    echo $PATH #查看当前语言LANG=en_US.UTF-8 #临时修改当前语言,修改为英文echo 'LANG=en_US.UTF-8' > /etc/sysconfig/i18n # ...

  6. 一道笔试题来理顺Java中的值传递和引用传递

      题目如下: private static void change(StringBuffer str11, StringBuffer str12) { str12 = str11; str11 = ...

  7. Python高阶函数和匿名函数

    高阶函数:就是把函数当成参数传递的一种函数:例如 注解: 1.调用add函数,分别执行abs(-8)和abs(11),分别计算出他们的值 2.最后在做和运算 map()函数 python内置的一个高阶 ...

  8. git教程:撤销修改

    转载:撤销修改 自然,你是不会犯错的.不过现在是凌晨两点,你正在赶一份工作报告,你在readme.txt中添加了一行: $ cat readme.txt Git is a distributed ve ...

  9. JVM学习三:静态分派

    所有依赖静态类型来定位方法的执行版本的分派动作成为静态分派,静态分派典型的应用场景是方法的重载.在编译阶段,javac编译器会根据参数的静态类型决定使用哪个重载版本,但很多种情况下这个版本并不是“唯一 ...

  10. c++中的两种getline用法

    参考 https://blog.csdn.net/Big_laoshu/article/details/79345351