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选项来显示进度

然后会显示以下的进度:


  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  4  467M    4 20.2M    0     0   116k      0  1:08:15  0:02:57  1:05:18 71532
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

3. 然后在服务器端可以看到输出:

$ 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

发表评论

电子邮件地址不会被公开。 必填项已用*标注