HTTP协议
HTTP(HyperText Transfer Protocol)超文本传输协议,是应用层的一种通信协议。用于在端与端之间传输文本,使我们能在浏览器上获取内容。通过HTTP协议,浏览器(Browser)向服务器(Server)发送请求,服务器返回响应。
HTTP请求
向baidu发出请求:
curl -s -v -- "https://www.baidu.com"
请求内容如下:
> GET / HTTP/1.1
> Host: www.baidu.com
> User-Agent: curl/7.55.0
> Accept: */*
>
请求内容分为4部分:
- 动词 路径 协议/版本 (首行)
- key:type (头信息)
- key:type
- key:type
- 要上传的数据 (请求体)
注:第3部分永远是回车,空行后第4行是传递的数据。上面的内容有前3部分。动词有 GET POST PUT PATCH DELETE HEAD OPTIONS 等。
HTTP响应
发出请求后收到的回应:
< 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: Mon, 30 Apr 2018 14:55:42 GMT
< Etag: "588603e6-98b"
< Last-Modified: Mon, 23 Jan 2017 13:23:50 GMT
< Pragma: no-cache
< Server: bfe/1.0.8.18
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
<
{ [2443 bytes data]
* Connection #0 to host www.baidu.com left intact
回应内容也分为4部分:
- 协议/版本号 状态码/解释
- key:type
- key:type
- key:type
- 要上传的数据
注:第3部分永远是回车。1,3部分之间有许多key:type部分。
缓存
使用浏览器时,经常会遇到缓存相关的信息。对缓存的控制信息在HTTP请求中就能找到。根据头信息,判断是否向服务器请求信息,是否使用缓存。
头信息中,和缓存相关有
Cache-Control,Expires
Etag,Last-Modified
具体的缓存机制可参考:
Chrome工具查看请求与响应
请求
访问baidu.com后,F12开发者工具,在Network标签下,找到www.baidu.com,Header标签,Request Headers标签,view source能查看请求的内容。
响应
同样,Response Headers标签下是响应的内容。Preview,Response下是响应的第4部分。
curl命令
curl起到传输文件的作用,利用它,可以下载网页中的内容,可以模拟提交数据,请求GET POST等,调试网页,debug时会经常用到。一些使用例子如下:
// 模拟发出请求,-s 安静 表示不显示进度或错误信息 -v 啰嗦 能显示详细的请求,和响应信息
curl -s -v -- "https://www.baidu.com"
//-X 动词指定请求的方式 -H 用来添加头信息
curl -X POST -s -v -H "key: xxx" -- "https://www.baidu.com"
//-d 设置-d时,会默认使用POST方式(此时POST可省略),向Server以POST方式提交信息。
curl -X POST -d "1234567890" -s -v -H "key: xxx" -- "https://www.baidu.com"
以下为curl命令发出请求,得到服务器响应,得到网页,得到请求和响应的信息