HTTP(HyperText Transfer Protocol):它是一个服务器(Server)与客户端(Client)之间请求与响应的标准,客户端发起一个HTTP请求,服务器端默认在80端口进行接收,然后服务器返回响应内容,客户端再下载响应内容;
在这里,HTTP就起到了一个指导双方如何沟通的作用,比如客户端输错一个网址字母,服务器端返回404告诉你没有找到这个网址;服务器宕机了,会返回500告诉你服务器无法处理请求;
下面我们来做一个HTTP请求与响应的示例:
打开bash,我们通过curl来创造请求(curl是一种利用URL语法在命令行方式下工作的开源文件传输工具),输入命令:curl -s -v -H "Frank: xxx" -- "https://www.baidu.com"
这相当于用get方式发送了一个请求,请求的内容为:
GET / HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.54.0
Accept: */*
Frank: xxx
输入命令: curl -X POST -d "1234567890" -s -v -H "Frank: xxx" -- "https://www.baidu.com"
这相当于用post方式发送了一个请求,请求的内容为:
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
所以,请求格式就包含以下几个部分:
1 动词 路径 协议/版本
2 key : value
3 空行
4 上传的数据
注意:a. 请求最多包含四部分,最少三部分,也就是第四部分可以没有
b. 动词包括 get,post,put(整体更新),patch(局部更新),delete(删除)
c. 路径包含查询字符串,不包含锚点,不写默认为“/”’
d. 第二部分的Content-Type标注了第四部分的数据格式
e. 第三部分永远为空
下面我们通过Chrome来发送请求:
1.打开 Network
2.地址栏输入网址
3.在 Network 点击,然后查看 Request Headers,点击「view source」就看到了请求内容
响应
上面第一个请求示例所得到响应内容是:
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> 后面省略......
所以响应内容的格式就是:
1 协议/版本 状态码 状态解释
2 key : value
3 空行
4 客户端要下载的内容
再回到刚才的Chrome页面,查看 Response Headers,就可以看到响应内容
对于响应内容中的HTTP状态码,它的第一位数字就代表了响应的状态
1XX:表示服务器已接受请求,但需要继续处理,HTTP协议中未定义,所以禁止服务器使用
2XX:表示成功;200 OK :请求已成功,请求所希望的响应头或数据体将随此响应返回;
204 No Content:服务器成功处理了请求,没有返回任何内容
3XX:表示重定向,重定向目标会在本次响应的Location域中指明;301代表资源永久移走,302代表临时移走
4XX:表示客户端错误;401,403,404
5XX:表示服务器错误;500,502
详细内容请访问 https://zh.wikipedia.org/wiki/HTTP%E7%8A%B6%E6%80%81%E7%A0%81