这是一篇实践教程,能够让你更加深刻的理解HTTP协议,因此需要一定的HTTP基础。

协议:一种规定,规定了你应该怎么去做,如w3c规定了浏览器应该怎么去解析HTML,CSS,JS。而HTTP则规定了客户端怎么和服务器端进行数据传输,简单来说就是我们得按照它的格式去写。

前几天花了点时间学习HTTP协议,但觉得光知道不行啊,还得实践一般,现在我的学习方法就是:要么学,要么不学,学就得学通来,当然不是真的通,而是至少得明白它是干嘛的,怎么用,怎么更好的用....除非这东西花了很久时间都没看懂,就先放着,因为以前学东西的时候总是东点西学点,还没有搞明白呢就跑去学其他的了,最后发现还是得回去重新学,这样反而浪费了大把时间,最后啥也没有学到,对于HTTP之前是没有把它当回事的,但随着时间的流逝发现学它实在是太有必要了,因此为了更好的理解HTTP协议,这里用PHP来实践一下。毕竟要玩转HTTP还是得用点后端的东西的,虽然对后端了解不是很多,但用来学这个足以。

需要用来的工具:

1.php环境   我们需要用来与客户端进行数据交换。

2.telnet   telnet:可以用来与远程服务器进行连接。

win7默认没有开启telnet,如果开启可以看这篇文章:Win7如何解决telnet不是内部或外部命令的方案

cmd输入 telnet ip 80   回车       本机ip可以通过ipconfig来查看

telnet 192.168.1.100 80

我们还需要进入到回显模式。按 Ctrl + ]

再按一次回车 OK。

我们接下来可以书写HTTP格式。

先测试一下GET。

输入:GET /文件路径 HTTP/1.1 回车          这个回车表示请求行结束

Host: ip地址  回车  这个回车表示结束这个请求头

回车 这个回车表示结束输入,发送请求。

GET /index.php HTTP/1.1

Host: 127.0.0.1

index.php

<?php

  echo 'Hello HTTP';

?>

返回的数据

请求行

  GET:请求方式

  ./index.php: 请求路径

  HTTP/1.1: HTTP版本

请求头

  Host: 127.0.0.1   :ip地址

GET没有请求体

从这个例子中我们可以看出,HTTP不一定得有浏览器,但发送HTTP一定得按照它的格式。

可以看到它们的大体执行过程:

  建立连接 - 响应连接 - 关闭连接

原来浏览器帮我们做了很多事情,比如Host,浏览器通过我们的URL解析出来的,HTTP版本根据浏览器自身提供,路径也是通过URL解析出来的。

POST测试:

POST /index.php HTTP/1.1
Host: 127.0.0.1
Content-type: application/x-www-form-urlencoded
Content-length: 10

name=rrraa

  这里必须写上Content-length和Content-type不然发送不成功。

  Content-length: 客户端会根据这个进行接收数据的长度,超出的不管。

  Content-type: 告诉客户端发送的这个数据类型是什么。

index.php

<?php

  $str = implode($_POST,"\n"); 接收数据

  print_r($str); 响应数据

?>

通过HEAD方法在不获取内容的情况下,检查服务器某个文件是否存在,以前面试的时候还问了这个问题,当时没答上。

HEAD /index.php HTTP/1.1

Host: 127.0.0.1

Accept: *

  必须加上Accept不然还是会获取内容,就和GET方法一样了。

这样我们就可以在不通过获取文件内容的情况下,通过状态码进行判断文件是否存在了以及是否修改。

我们访问一个假路径看看什么情况。

404了,正是我们想要的效果。

通过这些对HTTP协议的实践真的很不错,学习到了很多新东西,要是光看理论实在是不行。

大家还可以试试其他的。

通过telnet来实践HTTP协议。的更多相关文章

  1. 在 telnet 中利用HTTP协议传递GET、POST参数

    HTTP协议不仅可以用在浏览器中,还可以用在任何支持它的地方,平时用浏览器访问网站时HTTP协议内容是隐藏起来看不到的,用 telnet 就能揭开它的神秘面纱.telnet 开启方法参考文章末尾——t ...

  2. C项目实践--网络协议和套接字编程

    1.TCP/IP协议 TCP/IP协议是一组包括TCP协议和IP协议,UDP(User Datagram Protocol)协议,ICMP(Internet Control Message Proto ...

  3. [LoadRunner]性能测试实践_Hessian协议脚本编写2

    协议选取和运行配置请参考:http://www.cnblogs.com/whylaughing/p/5430821.html 这次直接贴代码让大家参考: import lrapi.lr; import ...

  4. [LoadRunner]性能测试实践_Hessian协议脚本编写

    第一步,新建LR的脚本,选择Java Vuser协议: 第二步,编写hessian测试脚本,如下: import lrapi.lr; import java.net.MalformedURLExcep ...

  5. 后台开发-核心技术与应用实践--TCP协议

    网络模型 为使不同计算机厂家的计算机能够互相通信,国际标准化组织 ISO 1981 年正式推荐了一个网络系统结构一一七层参考模型,也叫作开放系统互连模型. ISO 七层网络模型及其功能展示: 这个七层 ...

  6. linux高性能服务器编程 (一) --Tcp/Ip协议族

    前言: 在学习swoole入门基础的过程中,遇到了很多知识瓶颈,比方说多进程.多线程.以及进程池和线程池等都有诸多的疑惑.之前也有学习相关知识,但只是单纯的知识面了解.而没有真正的学习他们的来龙去脉. ...

  7. Telnet运用and Sqlserver connection failed

    今天的工作中,需要远程访问服务器上的数据库.但是,连接错误,Error code is 1326.说句实话,关于SqlServer 不能远程访问这个问题,我遇到过N次.可是每次都不认真去研究到底是什么 ...

  8. http协议与http代理

    TCP/IP协议族 TCP/IP(Transmission Control Protocol/InternetProtocol.传输控制协议/网际协议)是用于计算机通信的一个协议族. TCP/IP协议 ...

  9. HTTP协议的请求和响应学习

    本篇作为学习servlet的前提,http协议是学习JavaWeb开发的基石,不深入了解http协议,就不能说掌握了JavaWeb开发. HTTP协议有两个版本:HTTP1.0和HTTP1.1,那么有 ...

随机推荐

  1. Vertica数据查询优化

    vertica是惠普公司推出的列式分布式数据库,在OLAP领域有其独到的地方,目前社区版免费,但是只能存放1T的数据.我在工作中维护的bi系统后端就是使用的vertica数据库,平时也经常需要对于数据 ...

  2. 可变长度的Fibonacci数列

    原题目: Write a recursive program that extends the range of the Fibonacci sequence.  The Fibonacci sequ ...

  3. wince中测试驱动应用程序的实现

    这里建的工程是MFC的smart device,选择ARMV4I的指令集,不同的设备可能会有轻微的不同,不过大体实现是一样滴.还有,这里选的应用类型是dialog base. 1.应用监测内核动向 内 ...

  4. android TCP 客户端(仅接收数据)

    配合log4net使用,用来接收调试信息.因此,此客户端只管通过TCP接收字符串数据,然后显示在界面上. 接收TCP数据 try { Socket s = new Socket("192.1 ...

  5. Effecvive Java读书笔记(一):创建和销毁对象

    I.考虑静态工厂方法替代构造器 优势:1.有清晰的方法名称,方便调用:多参数构造器易出现调用错误 2.不必每次调用都创建新对象 3.可以返回原返回类型的任何子类型 4.创建参数化类型实例的时候,代码简 ...

  6. 用Win7自带的磁盘管理工具给硬盘分区

    最近新买了一台笔记本,要给硬盘分几个区,心想还是用个工具方便点,于是就上网准备下个“硬盘分区魔术师”,但是看到有一篇文章介绍Win7系统也自带了硬盘分区工具,这我以前倒没听说过,试了一下,还挺方便好用 ...

  7. 从RAM新建QIcon对象 / Create a QIcon from binary data

    一般,QIcon是通过png或ico等图标文件来初始化的,但是如果图标资源已经在内存里了,或者一个zip压缩文件内,可以通过QPixmap作为桥梁,转换为图标. zf = zipfile.ZipFil ...

  8. 《利用Python进行数据分析》第123章学习笔记

    引言 1 列表推导式 records = [json.loads(line) for line in open(path)] 这是一种在一组字符串(或一组别的对象)上执行一条相同操作(如json.lo ...

  9. linux编译php的c扩展

    第一步:安装php5 第二步:打开终端[为来方便,这里使用root用户],使用CD命令进入到php5源码包的ext目录 第三步:在终端键入以下命令 ./ext_skel --extname=extes ...

  10. linux安装oracle 11g rac

    安装oracle 11gR2 RAC 一.网络规划及安装虚拟主机 主机名 主机版本 Ip rac1.localdomain Redhat 6.5 RAC节点1 192.168.100.11 rac2. ...