zoukankan      html  css  js  c++  java
  • 通过telnet来实践HTTP协议。

    这是一篇实践教程,能够让你更加深刻的理解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," "); 接收数据

      print_r($str); 响应数据

    ?>

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

    HEAD /index.php HTTP/1.1

    Host: 127.0.0.1

    Accept: *

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

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

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

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

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

    大家还可以试试其他的。

  • 相关阅读:
    1041. 困于环中的机器人
    95. 不同的二叉搜索树 II
    LeetCode945:使数组唯一的最小增量
    LeetCode:925.长按键入
    LeetCode:926. 将字符串翻转到单调递增
    InteliJ 安装PlantUML插件
    CodeBlock换肤
    正则表达式验证手机号和座机号
    C#中使用反射遍历一个对象属性和值以及百分数
    c#中@的用法
  • 原文地址:https://www.cnblogs.com/pssp/p/5819601.html
Copyright © 2011-2022 走看看