HTTP 基础概念&常用的命令

基本概念

定义

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 来执行命令。

那么如何建立这个简单的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/
    '' Hello there world!
    ''
    '' $ nc 192.168.0.1 1234
    '' GET /notexisting.html HTTP/1.1

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

以上文章来源:opsschool

你可能感兴趣的:(HTTP 基础概念&常用的命令)