[toc]
http简要记录
1.http(超文本传输协议)
由html文件 ->包含各种各样的元素(URL链接)->web页面
2.URL结构
http:// www.qq.com:80 /news/index.html
协议 域名: 端口 具体的文件名下面的某个页面
3.http的工作原理
1.客户端发起dns请求
2.获取到域名对应的IP地址
3.浏览器发起TCP的连接
4.基于TCP的连接,传输http的请求(一次TCP的连接,可以建立多次的http请求)
5.浏览器请求/index.html
6.服务器响应/index.html至浏览器
7.浏览器翻译index.html中的内容为人类可读
8.断开TCP连接-->四次挥手
http的短连接:建立一次tcp的连接,发起一次http的请求,结束,tcp断开
http的长连接:建立一次tcp的连接,发起多次http的请求,结束,tcp断开
4.http的请求方法
方法 | 描述 | 请求 | 响应 |
---|---|---|---|
GET | 用来请求访问已被URI识别的资源 指定的资源经服务器端解析后返回响应内容 | GET /index.html HTTP/1.1 Host: www.baidu.com | 返回index.html的页面资源 |
POST | 用来传输实体的主体 虽然用GET方法也可以传输实体的主体,但一般不用GET方法进行传输,而是用POST方法 虽说POST的功能与GET相似,但POST的主要目的并不是获取响应的主体内容 | POST /submit.cgi HTTP/1.1 Host: www.baidu.com Content-Length: 1500(1500字节的数据) | 返回submit.cgi接收数据的处理结果 |
PUT | 用来传输文件 就像FTP协议的文件上传一样,要求在请求报文的主体中包含文件的内容,然后保存到请求URI指定的位置 | PUT /example.html HTTP/1.1 Host: www.baidu.com Content-Type: text/html Content-Length: 1560(1560字节的数据) | 响应返回状态吗 204 No Content(比如:该html已存在于服务器上) |
HEAD | 用于确认URI的有效性及资源更新的日期时间等,和GET方法一样,只是不返回报文主体部分 | HEAD /index.html HTTP/1.1 Host: www.baidu.com | 返回index.html有关的响应头部 |
DELETE | 用来删除文件,是与PUT 相反的方法 按请求URI删除指定的资源 | DELETE /example.html HTTP/1.1 Host: www.baidu.com | 响应返回状态吗 204 No Content(比如:该html已存在于服务器上) |
OPTIONS | 用来查询针对请求URI指定的资源支持的方法 | OPTIONS * HTTP/1.1 Host: www.baidu.com | HTTP/1.1 200 OK Allow: GET,POST,HEAD,OPTIONS(返回服务器支持的方法) |
TRACE | 让web服务器端将之前的请求通信环回给客户端的方法 发送请求时,在Max-Forwards首部字段中填入数值,每经过一个服务端就将该数字减1,当数值刚好剑到0时就停止持续传输,最后接收到请求的服务端则返回状态码 200 OK 的响应 | TRACE /HTTP/1.1 Host: www.baidu.com Max-Forwards: 2 | HTTP/1.1 200 Ok Content-Type: message/http Content-Length: 1024 TRACE / HTTP/1.1 Host: www.baidu.com Max-Forwards: 2(返回响应包含请求内容) |
CONNECT | 要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信,主要使用SSL和TLS协议把通信内容加密后经网络隧道传输 | CONNECT proxy.sample.com:8000 HTTP/1.1 Host: proxy.sample.com | HTTP/1.1 200 OK(之后进入网络隧道) |
5.常见http的响应状态码(以3位数字组成)
状态码 | 说明 |
---|---|
200 | 成功 |
301 | 永久重定向 |
302 | 临时重定向 |
304 | 浏览器缓存 |
401 | 权限认证失败 |
403 | 请求不到首页,权限被拒绝 |
404 | 资源找不到 |
500 | 服务器内部错误 |
502 | 错误的网关,找不到后端资源 |
504 | 请求超时 |
6.用户访问网站携带的参数,以及服务端返回的参数
概况
字段 | 说明 |
---|---|
Request URL: http://www.abc.com/index.html | 请求的URL地址 |
Request Method: GET | 请求的方法(获取) |
Status Code: 304 Not Modified | 返回的状态 |
Remote Address: www.abc.com:80 | 请求的地址 |
客户端请求的头部信息
字段 | 说明 |
---|---|
Accept: text/html | 请求的类型 |
Accept-Encoding: gzip, deflate | 是否进行压缩 |
Accept-Language: zh-CN,zh;q=0.9 | 请求的语言 |
Cache-Control: max-age=0 | 缓存 |
Connection: keep-alive | TCP长连接 |
Host: www.abc.com | 请求的域名 |
If-Modified-Since: Fri, 05 May 2019 09:33:22 GMT | 修改的时间 |
If-None-Match: "a49-56b5ce607fe00" | 标记 |
Upgrade-Insecure-Requests:1 | 在http和https之间起的一个过渡作用 |
User-Agent: Mozilla/5.0 | 用户的浏览器 |
请求一个空行 |
服务端响应的头部信息
字段 | 说明 |
---|---|
HTTP/1.1 304 Not Modified | 返回服务器的http协议,状态码 |
Date: Fri, 15 Sep 2018 09:15:28 GMT | 返回服务器的时间 |
Server: Apache/2.4.6 (CentOS) PHP/5.4.16 | 返回服务器使用的软件(Apache php) |
Connection: Keep-Alive | TCP长连接 |
Keep-Alive: timeout=5, max=100 | 长连接的超时时间 |
ETag: "a49-56b5ce607fe00" | 验证客户端标记 |
返回一个空行 | |
xxx | 返回页面内容 |
7.PV、UV、IP
PV:页面浏览量
UV:独立的客户
IP:独立IP
示例说明
公司有100人,每个人有一台电脑一个手机,上网都是通过nat转换出口,每个人点击网站2次(假设点击一次返回的pv是1)
PV:400
UV:200
IP:1个
8.用户访问网站的大体流程
1.客户端输入域名以及请求的页面
2.解析域名对应的dns
3.最终客户端浏览器获取到dns的IP地址
4.客户端会与服务端发起TCP的三次握手(长连接)
5.客户端发起http请求,请求会先抵达前端的防火墙
6.防火墙识别用户身份,正常的请求通过内部交换机通过TCP连接前端的负载均衡,然后传递用户 的http请求
7.负载接收到请求,会根据请求的内容进行下发任务,通过TCP连接后端的web,然后下发用户的http请求
8.web接收到用户的http请求后,会根据用户请求的内容进行解析,解析分为如下两步:
静态请求:由web服务器向nfs建立TCP连接,获取对应的图片,最后返回给负载均衡(负载均衡->防火墙->用户)
动态请求:由web向后端的动态程序建立TCP连接,将用户的动态http请求传递给动态程序->由动态程序进行解析
9.动态程序在解析的过程中,如果碰到查询数据库的请求,则优先和缓存建立TCP的连接,然后缓存服务发起http的查询
10.如果缓存没有对应的数据,动态程序再次向数据库建立TCP的连接,然后发起查询操作
11.由数据库返回->动态程序->缓存->web服务->负载均衡->防火墙->用户