美文网首页HTTP我用 Linux
HTTP 基础概念&常用的命令

HTTP 基础概念&常用的命令

作者: 老乔理查德 | 来源:发表于2017-04-15 18:34 被阅读52次

    基本概念

    定义

    HTTP是OSI的应用层(7层)的一个response-request协议。一个HTTP服务器会监听某个指定端口来的client request,然后server根据Request做出反馈。默认端口80.

    握手

    1. 另外HTTP建立连接有三次握手,分别是:客户端发起SYN, 服务器发起SYN+ACK, 客户端发起ACK。
    2. HTTP断开连接有四次握手:客户端发起FIN,服务器发起ACK,服务器发起FIN, 客户端发起FIN。

    返回状态码

    2XX:good
    3XX:重定向
    4XX:客户端错误
    5XX:服务器端错误

    linux中常用命令

    telnet

    这是一个不安全的协议,但是可以用来测试连接有效性。
    ''$ telnet www.opsschool.org 80
    '' GET /en/latest/http_101.html HTTP/1.1
    '' Host: www.opsschool.org
    ''
    '' Trying 162.209.114.75...
    '' Connected to ops-school.readthedocs.org.

    cURL

    cURL是一个使用URL语法来传输数据的工具。比Telnet强大的点是:cURL可以创建HTTP Request(即可以指定GET, POST, HEAD等方法),

    1. 例如以下:

      • --request 指定方法为GET
      • -I 即只输出header
        ''$ curl -I --request GET http://www.opsschool.org/en/latest/http_101.html
        '' HTTP/1.1 200 OK
        '' Server: nginx/1.4.6 (Ubuntu)
        '' Date: Tue, 23 Jun 2015 20:42:25 GMT
        '' Content-Type: text/html
        '' Content-Length: 140673
        '' Last-Modified: Wed, 27 May 2015 12:16:25 GMT
        '' Connection: keep-alive
        '' Vary: Accept-Encoding
        '' ETag: "5565b599-22581"
        '' X-Served: Nginx
        '' X-Subdomain-TryFiles: True
        '' X-Deity: chimera-lts
        '' Accept-Ranges: bytes
    2. 对于大文件,可以使用-O选项来显示进度
      然后会显示以下的进度:
      (img)

    3. 如果curl碰到重定向,而你想把这个重定向继续跟踪下去,使用-L选项
      ''$ curl -IL www.opsschool.org
      '' HTTP/1.1 302 FOUND
      '' Server: nginx/1.4.6 (Ubuntu)
      '' ......
      ''
      '' HTTP/1.1 200 OK
      '' Server: nginx/1.4.6 (Ubuntu)
      '' .......

    netcat

    Netcat是一个可以建立HTTP连接,并且实现读写数据的工具。netcat可以作为服务器端或者客户端。
    在很多地方,直接用nc这个简称指代netcat。

    做一个简单的client/server

    1. 可以通过-L选项告诉netcat监听某个端口,造一个服务器端。
      ''$ nc -l 192.168.0.1 1234 > output.log
      以上命令告诉某台机器通过1234监听消息,听到的消息传递给output.log。注意IP地址改为该机器的IP地址。

    2. 用客户端连接服务器,并且输入信息
      ''$ echo "I'm connected as client" | nc 192.168.0.1 1234

    然后在服务器端可以看到输出:
    ''$ cat output.log
    '' I'm connected as client

    可以做一个简单的聊天器

    上面的命令如果不输出到文件,可以做及时聊天,只要:

    1. 服务器端
      '' $ nc -l -p 1234
    2. 客户端
      '' $ nc 192.168.0.1 1234
      然后就可以愉快的聊天了

    作简单的HTTP服务器(比较危险,如果不懂网络安全,不要轻易尝试)

    Netcat连接建立之后,可以执行命令或者脚本
    netcat有一个traditional的版本,其中有DGAPING_SECURITY_HOLE这个选项,可以使用-e <program/shell_script.sh>来执行命令。

    那么如何建立这个简单的HTTP服务器呢?

    1. 定义一个文件httpd.sh

    2. 然后在服务器端,通过这个命令来launch
      ''$ while true; do netcat -lp 1234 -e ./httpd.sh; done
      然后服务器端就已经在1234端口监听了。

    3. 在客户端通过不同的HTTP命令连接,可以看到反馈
      ''$ curl 192.168.0.1:1234/
      '' <html>Hello there world!</html>
      ''
      '' $ nc 192.168.0.1 1234
      '' GET /notexisting.html HTTP/1.1

    最后注意:一定要在服务器端把服务关闭

    以上文章来源:opsschool

    相关文章

      网友评论

        本文标题:HTTP 基础概念&常用的命令

        本文链接:https://www.haomeiwen.com/subject/rjqoattx.html