初识http

初识http

Server + Client + HTTP

HTTP(HyperText Transfer Protocol)表示超文本传输协议,是万维网使用的底层协议,这种协议定义了消息的格式和传输方式,以及Web服务器和浏览器应对各种命令应采取的操作。

例如,当你在浏览器中输入URL时,这实际上会向Web服务器发送HTTP命令,指示它获取并传输你所请求的Web页面(如下图)。 控制万维网如何工作的另一个主要标准是HTML,它涵盖了网页的格式和显示方式。

avatar

Server和client的交互

1.浏览器发起请求;
2.服务器在 80 端口接收请求;
3.服务器负责返回响应内容;
4.浏览器负责下载响应内容。

其他常用端口:
TCP 21=文件传输;
TCP 80=超文本服务器(Http);
TCP 443=安全服务(HTTPS);
HTTP 的作用是指导浏览器和服务器的沟通。例如,“404 File Not Found”是常见的HTTP状态代码。这意味着Web服务器找不到您请求的文件,您尝试在Web浏览器中加载的网页或其他文档已被移动或删除,或者您输入了错误的URL或文档名称。

HTTPS:
HTTPS表示超文本传输协议安全, 它是HTTP的安全版本。 浏览器和网站之间的通信由传输层安全性(TLS)或其前身安全套接字层(SSL)加密。

HTTP请求

HTTP请求最多包括四个部分:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
1.动词-路径-协议/版本
2.Key: value(value是信息,不是上传的数据)
3.
4.要上传的数据
```

注意:
1.第三部分永远都是一个回车(\n),用于区分第二部分和第四部分
2.动词有 GET(获取); POST(上传); PUT (更新);PATCH(更新); DELETE(删除); HEAD ;OPTIONS 等
3.路径包括查询参数,但不包括锚点(锚点是给html看的)
4.default路径为/
5.第 2 部分中的 Content-Type 标注了第 4 部分的格式

例如:
``` bash
POST / HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.54.0
Accept: */*
```

### Google Developer Tool查看请求内容
``` bash
1.打开 Network
2.地址栏输入网址
3.在 Network 点击,查看 request,点击view source
```

![avatar](http://i64.tinypic.com/6yefme.jpg)
以上是请求的前三部分,如果有第四部分请求,可以在FormData 或 Payload 里看到。

### HTTP响应
HTTP请求包括:
``` bash
1.动词-路径-协议/版本
2.Key: value(value是信息,不是上传的数据)
3.
4.要上传的数据
```
例如:
``` bash
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: Keep-Alive
Content-Length: 2443
Content-Type: text/html
Date: Tue, 10 Oct 2017 09:14:05 GMT
Etag: "5886041d-98b"
Last-Modified: Mon, 23 Jan 2017 13:24:45 GMT
Pragma: no-cache
Server: bfe/1.0.8.18
Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/

<!DOCTYPE html>
<!--STATUS OK--><html> <head> ……

注意:
状态码:
1开头:消息(100 continue;101 switching;102 processing)

2开头:成功

3开头:重定向:

4开头:请求错误

5开头:服务器错误

第 2 部分中的 Content-Type 标注了第 4 部分的格式;且遵循MIME 规范;

Google Developer Tool查看响应内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1.打开 Network
2.地址栏输入网址
3.在 Network 点击,查看 request,点击view source
4.选中一个响应
5.查看 Response Headers,点击view source能看到响应的前两部分
6.查看 Response 或者 Preview,会看到响应的第 4 部分
```

### 使用 curl 命令
用 curl 创造一个get请求,并得到响应:</br>
curl -s -v -H -- "https://www.baidu.com"</br>
命令行的意思是:
![avatar](http://i68.tinypic.com/xdidkz.jpg)
请求的内容为:
``` bash
GET / HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.54.0
Accept: */*

用 curl 创造一个post请求,并得到响应:
curl -X POST -d “1234567890” -s -v -H – “https://www.baidu.com"
请求的内容为:

1
2
3
4
5
6
7
8
9
POST / HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.54.0
Accept: */*
Frank: xxx
Content-Length: 10
Content-Type: application/x-www-form-urlencoded

1234567890