http协议
一:什么是HTTP协议:协议就是规范,约束一套规则标准,大家都按照这个规则执行。HTTP协议就是互联网请求、应答标准。默认端口:80,又叫超文本传输协议。HTTP协议属于最上层的应用层协议。
二:版本
1:HTTP1.0:第一个在通讯中指定版本号的HTTP 协议版本,至今仍在使用,1.0每次请求都要重新建立连接,请求后立即断开。
2:HTTP1.1:同一个tcp的连接中可以传送多个HTTP请求和响应. 多个请求和响应可以重叠,多个请求和响应可以同时进行. 更加多的请求头和响应头(比如HTTP1.0没有host的字段).
3:HTTP2:HTTP2对HTTP1.1进行了升级,主要改进了两个方面:多路复用和二进制传输。
多路复用是指在同一个连接上可以同时发送多个请求和响应,这样可以减少建立多个连接所带来的开销,提升Web页面加载的速度
这里好像有点语言模糊,1.1和2都可以多个请求,但是1.1同一时间只能传输一个请求和响应,HTTP2还引入了头部压缩(header compression)、服务器推送(server push)和流量控制(flow control)等特性,使得网络通信更加可靠和高效。
三:HTTP请求格式Request:
1:格式:请求行(request line)、请求头部(header)、空行和请求数据
(1)请求行:请求行包括三部分:请求方法,请求资源URI路径,HTTP版本号,其中以方法符合开头,空格分开。
GET /index.html HTTP/1.1
以上请求行:请求方法:GET;URI:/index.html; HTTP版本号:HTTP/1.1:
请求方法有:GET/POST/DELETE/PUT/HEAD
(2)请求头部:以下是谷歌浏览器抓取的http头
GET /data/month_1804/s_201804110913204054.jpg HTTP/1.1 (这是请求行) Host: www.daozys.com Connection: keep-alive Pragma: no-cache Cache-Control: no-cache User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Mobile Safari/537.36 Accept: image/webp,image/apng,image/*,*/*;q=0.8 Referer: http://www.daozys.com/ Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Cookie: UM_distinctid=1626aeda6a993d-0d19a82ae1c31d-454c062c-13c680-1626aeda6aa4df; PHPSESSID=i9qne93if789r83j1ri0b2fig4; CNZZDATA1259004491=2133941223-1522211535-%7C1524793814; jiathis_rdc=%7B%22http%3A//www.daozys.com/goods-1957-1.html%22%3A-81047332%2C%22http%3A//www.daozys.com/goods-2110.html%22%3A-76015654%2C%22http%3A//www.daozys.com/goods-2268.html%22%3A0%7C1524637434702%2C%22http%3A//www.daozys.com/goods-1990.html%22%3A%220%7C1524793871821%22%7D
3:请求头包括:
Host 请求的域名
Cache-Control 缓存信息
User-Agent 浏览器端浏览器型号和版本
Accept 可接受的内容类型,比如xml,html,json,图片等
Accept-Language 语言
Accept-Encoding 可接受的压缩类型 gzip,deflate
Accept-Charset 可接受的内容编码 UTF-8,*
Connection: Keep-Alive 持久连接
等等信息,服务端从头信息能够判定客户端的一些信息,比如操作系统,浏览器版本,客户端IP等。
3:空行
4:请求数据(消息)略
四:HTTP响应格式Response::
1:格式:状态行、响应头、空行、消息体(响应正文)
(1):状态行:HTTP版本好,状态码,状态说明
HTTP/1.1 200 OK以上就是状态行,200:表示响应成功
(2):响应头,以下是谷歌抓取的响应头
HTTP/1.1 200 OK (这是状态行) Date: Fri, 27 Apr 2018 02:18:06 GMT Server: Apache Last-Modified: Wed, 11 Apr 2018 01:13:25 GMT Accept-Ranges: bytes Content-Length: 9489 Connection: close Content-Type: image/jpeg
(3):空行
(4):消息体(响应正文)
以上响应的是<span style="font-family:Consolas, ";color:#222222;">text/css
2:附HTTP响应状态码:
200 OK 表示从客户端发来的请求在服务器端被正常处理了。
400 Bad Request 该状态码表示请求报文中存在语法错误。当错误发生时,需要修改请求的内容后再次放松请求。
403 Forbidden 该状态码表明对请求资源的访问被服务器拒绝了。
404 Not Found 该状态码表明服务器上无法找到请求的资源,资源不存在。
503 Service Unavailable 该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。
五:一次完整的web请求
1:域名解析
2:建立TCP连接(三次握手)
3:发起HTTP请求
4:响应HTTP请求
5:解析请求数据,并请求数据中的其他资源,比如同一个页面还有图片,js,css,等,HTTP1.1使用同一个通道请求,多个请求同时进行
6:渲染页面
7:释放TCP链接