HTTP协议基础与实验
一. HTTP协议(Hypetext Transfer Protoacal,超文本传输协议)
HTTP协议规定了Web基本的运作过程,以及Web服务器之间的通信细节。
Http协议采用客户端/服务器端通信模式,服务器端为Http服务器,也即Web服务器。客户端为Http客户程序,浏览器即为最常见的Http客户程序。
在分层的网络体系结果中,Http协议位于应用层。建立在TCP/IP协议基础之上。HTTP协议采用可靠的TCP连接,默认端口80。
HTTP协议的版本从HTTP 0.9 ,HTTP 1.0,HTTP 1.1。HTTP 1.0协议对应的RFC文档为RFC1945。HTTP 1.1协议对应的RFC文档为RFC2068。
HTTP协议是一个基于请求/响应模式的,无状态的协议。(命令模式)
客户端(浏览器)与服务器端(Web服务器应用程序)建立连接后,向服务器端发送一个请求,服务器对这个请求进行 ,然后返回一个响应信息,之后双方的连接被关闭。
在HTTP1.0中,当连接建立后,浏览器发送一个请求,服务器回应一个消息,之后,连接就被关闭.
当浏览器下次请求的时候,需要重新建立连接,这样的通信方式比较繁琐。
因此在HTTP1.1中,给出了一个持续连接的机制.并将其作为HTTP1.1中建立连接的默认行为.浏览器可以在建立一个连接后没发生请求并得到回应,然后继续发生请求并得到回应.而且,客户端还可以连续发送多个请求,而不用等待每个响应的到来。
二. HTTP URL
HTTP URL基本格式 http://host[:port][abs_path]
http要通过HTTP协议来定位网络资源。
host表示合法的Internet主机域名或IP地址(点分十进制的格式)。
port用于指定端口号.若port是空则使用默认端口号80。
abs_path指定请求资源的URL,如果URL中没有给出abs_path,那么当它作为请求的URI时,必须以”/”的形式给出。
通常浏览器会帮助我们把输入的URL合法化.
例如在浏览器中输入www.XXXX.com浏览器会自动将其转化为http://www.XXXX.com/
三. HTTP请求
客户端通过发送HTTP请求向服务器请求对资源的访问。
HTTP请求由三部分组成,分别是:请求行,消息报头,请求正文。
1.请求行
请求行由请求方法,URI,HTTP协议的版本组成,请求行以空格分隔。以CRLF(回车换行)作为结尾。
CRLF(Carriage Return Linefeed)是指回车符和行结束符"\r\n"。
Method Request-URI HTTP-Version CRLF
- Method 表示请求的方法。
- Request-URI 表示请求资源的URI。通常URI只要给出服务器的根目录的相对目录即可。所以以“\”开头。
- HTTP-Version 表示请求的HTTP版本。
- CRLF 表示回车换行。
例: GET /form.html HTTP/1.1 (CRLF)
* 请求方法
在HTTP协议中,HTTP请求可以使用多种请求方法.这些方法指明了访问用Request-URI标识的资源的方式.HTTP1.1请求方法如下
客户端发送给服务器的请求称为方法.
方法:GET,POST,HEAD,PUT,DELETE,TRACE,OPTIONS。
其中最常用的是GET,POST,HEAD
GET方法,用来从服务器读取信息。例:从服务器读取文件,表格,数据库查询结果等.GET方法原则上不会用来发送大量的信息.有些服务器将URL以及查询字符串的长度限制在240个字符内.
POST方法,用来向服务器传输信息.例:把信号卡号,表格,存储与数据库的数据等传送到服务器.
HEAD方法,用来读取服务器响应.例:得到文件大小,文件最后修改时间,服务器类型等信息.
PUT方法将文件直接传到服务器.
DELETE方法将文件直接总服务器删除.
TRACE方法,用来协助程序调试.
OPTIONS方法,用来歘讯服务器所支持的方法.
2. 请求头
请求头包含许多有关客户端环境和请求正文的有用信息。如请求头可以声明浏览器类型,所以语言,请求正文的类型,正文的长度等。
例:
3. 请求正文
HTTP协议规定,请求头和请求正文之间必须以空行分隔(即只有CRLF符号的行),这个空行非常重要,它表示请求头已经结束,接下来是请求正文。请求正文中可以包含客户以POST方式提交的数据:
username=superman&password=8888
四. HTTP响应
1. 响应行
响应行由HTTP协议的版本,状态代码,状态描述组成,请求行以空格分隔。以CRLF(回车换行)作为结尾。
例: HTTP/1.1 200 OK(CRLF)
状态代码是一个3为整数,以1,2,3,4,5开头。
1xx :信息提示,表示临时的响应。
2 xx :响应成功,表示服务器成功地接收了客户端请求。
3 xx :重定向。
4 xx :客户端错误,表明客户端可能有问题。
5 xx :服务器错误,表明服务器由于遇到某种错误而不能响应客户端请求。
常见状态代码:
200 :响应成功。
400 :错误的请求。客户端发送的HTTP请求不正确。
404 :文件不存在。在服务器上没有客户要求访问的文档。
405 :服务器不支持客户的请求方式。
500 :服务器内部错误。
2.响应头
响应头包含响应正文的有用信息。如服务器类型,正文类型,正文长度等。
3. 响应正文
响应正文就是服务器返回的具体数据。即浏览器真正请求访问的信息。最常见的是HTML文档。
响应头与响应正文之间用空行分隔。
<html>
…
</html>
浏览器在接收到HTTP响应后,会根据响应正文的不同类型来进行不同的处理。
HTTP请求正文可以是任意格式的数据。HTTP协议采用MIME协议来指定响应正文的数据格式。
五.测试与实验:
1.一个简易的HTTP服务器
这是一个单线程的无响应的Socket服务器。只是为了可以看到浏览器发来的请求形式。
(1)在Chrome中输入:http://127.0.0.1:10001
输出内容:
|
接收数据 |
说明:可以看到一个简单的http的报文的结构。注意:在http报文的结尾处的字节为10,13,即\r\n。
(2)在Chrome中输入:http://127.0.0.1:10001/project?a=1&b=3
实验输出内容为:
|
接收数据 |
HTTP协议基础与实验的更多相关文章
- 接口测试培训:HTTP协议基础
接口测试培训:HTTP协议基础 引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展. ...
- TCP/IP协议基础(转)
转自 http://www.chinaunix.net 作者:Bernardus160 发表于:2003-12-03 17:33:15 TCP/IP协议基础 -------------------- ...
- 小白日记27:kali渗透测试之Web渗透-Http协议基础,WEB
Http协议基础 Web技术发展[http://www.cnblogs.com/ProgrammerGE/articles/1824657.html] 静态WEB[网页] 动态WEB 属于一种应用程序 ...
- udp协议基础(转自疯狂java讲义)
第17章 网络编程 17.4 基于UDP协议的网络编程 UDP协议是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket,但这两个Socket之间并没有虚拟链路,这两个Socket只是发 ...
- UART串口协议基础1
Louis kaly.liu@163.com 串口协议基础 1 串口概述 串口由收发器组成.发送器是通过TxD引脚发送串行数据,接收器是通过RxD引脚接收串行数据. 发送器和接收器都利用了一个移位寄存 ...
- 【RL-TCPnet网络教程】第41章 HTTP超文本传输协议基础知识
第41章 HTTP超文本传输协议基础知识 本章节为大家讲解HTTP(HyperText Transfer Protocol,超文本传输协议),从本章节开始,正式进入嵌入式Web的设计和学习. ...
- 【RL-TCPnet网络教程】第35章 FTP文件传输协议基础知识
第35章 FTP文件传输协议基础知识 本章节为大家讲解FTP(File Transfer Protocol,文件传输协议)的基础知识,方便后面章节的实战操作. (本章的知识点主要整理自网络) ...
- 【RL-TCPnet网络教程】第33章 SMTP简单邮件传输协议基础知识
第33章 SMTP简单邮件传输协议基础知识 本章节为大家讲解SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)的基础知识,方便后面章节的实战操作. (本 ...
- 【RL-TCPnet网络教程】第25章 DHCP动态主机配置协议基础知识
第25章 DHCP动态主机配置协议基础知识 本章节为大家讲解DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),通过前面章节对TCP和UDP ...
随机推荐
- 我的前端之旅--SeaJs基础和spm编译工具运用[图文]
标签:seajs nodejs npm spm js 1. 概述 本文章来源于本人在项目的实际应用中写下的记录.因初期在安装和使用Seajs和SPM的时候,有点不知所措的经历.为此,我 ...
- jQuery分页插件jBootstrapPage,一个Bootstrap风格的分页插件
一个Bootstrap风格的分页控件,对于喜欢Bootstrap简洁美观和扁平化的同学可以关注jBootstrapPage, 目前jBootstrapPage最新版为V0.1,后续还有更多功能需要完善 ...
- 完美解决 Phonegap jQeuryMobile 闪屏 问题
在切换page或者弹出dialog时,会出现闪屏情况,综合网络上各种方法,得出以下方法可完美解决: 1.首先界面页面切换闪屏: 在加载jQuery后,加载jQuery Mobiel之前,插入js语句进 ...
- 【Ireport】利用Ireport5.2的table组件迅速制作表格导出pdf
转载请注明网址.Ireport table dataset Ireport在半年前还是4.7,今天无意发现,居然出到了5.2就搞一把. 首先,去下载Ireport,并进行安装.这个我就不演示了.下载完 ...
- utf8_to_utf16
17down voteaccepted Here's some code. Only lightly tested and there's probably a few improvements. C ...
- 两种QMultiMap的遍历方法(最好使用只读遍历器)
留个爪,备查 QMultiMap<QString, QString>& remote_map = my_obj->m_MapVersion; // ccc 这里体现了引用的好 ...
- [置顶] linux内核启动2-setup_arch中的内存初始化(目前分析高端内存)
上一篇微博留下了这几个函数,现在我们来分析它们 sanity_check_meminfo(); arm_memblock_init(&meminfo, mdes ...
- Dynamics CRM 2011编程系列(60):JS编程之CRUD辅助类(JQuery版)
今天给大家分享一个JQuery版的REST辅助类,在一年前我分享过一个只能在IE环境下运行的REST辅助类:<JS编程之实体CRUD辅助类 >.为什么要推出JQuery版的CRUD辅助类呢 ...
- not in改写关联无需考虑重复数据
SQL> select * from a1; ID NAME ---------- ---------- 1 a 1 a 2 a 3 a SQL> select * from a2; ID ...
- java桌面项目打包_by icewee_写得太棒了,直接转载了
前言: 我们都知道Java可以将二进制程序打包成可执行jar文件,双击这个jar和双击exe效果是一样一样的,但感觉还是不同.其实将java程序打包成exe也需要这个可执行jar文件. 准备: ecl ...