HTTP/HTTPS
HTTP:超文本传输协议):是一种发布和接收 HTML页面的方法,默认端口80
HTTPS:HTTP的安全版,在HTTP下加入SSL层,默认端口443
工作流程
- 客户端(通常是浏览器)发送一个HTTP请求
- 服务端开始处理请求,发送HTTP响应把结果返回给客户端
其中一个请求的开始到一个响应的结束称为事务,事务结束后还会在服务端记录一条日志
HTTP请求
HTTP请求分为请求行、请求头、空行、请求正文:
- 请求行:方法URL协议/版本,示例 GET/sample.jsp HTTP/1.1
- 请求头:包括请求头包含许多有关的客户端环境和请求正文的有用信息,如访问的域名、用户代理、Cookie等信息
- 空行:表示请求头结束,不可缺失
- 请求正文:就是HTTP请求的数据,非必须
URL:统一资源定位符,是用于完整地描述Internet上网页和其他资源的地址的一种标识方法
基本格式:scheme://
[username:password@]host[:port#]/path/…/[?query-string][#anchor]
HTTP请求方法
- GET:请求页面信息,不包括主体,也可以传输少量数据,以?分割URL和传输数据,多个参数用&连接,例如:login.action?name=abc&password=123,如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,安全方法
- HEAD:与GET请求类似,但是返回的响应中没有具体的内容,用于获取报头,安全方法
- POST:向服务器发送数据,如提交表单,上传文件等,提交数据放在http包体,数据为结构化数据,非安全方法
- PUT:替换服务器资源,向服务非结构数据,非安全方法
- PATCH:更新服务器部分资源,结构数据,非安全方法
- DELETE:删除服务器指定页面,非安全方法
- CONNECT:将服务器作为代理,让服务器代替用户去访问其他网页
- OPTIONS:查看服务器允许的方法
- TRACE:回显服务器收到的请求,主要用于测试或诊断
更多信息请点击HTTP request methods
常见HTTP请求Header
- Accept:传输文件类型,使用MIME类型表示,即主类型/次类型
示例:Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
q是权重系数,范围 0 =< q <= 1,q 值越大,请求越倾向于获得其“;”之前的类型表示的内容。若没有指定q值,则默认为1,按从左到右排序顺序;若被赋值为0,则用于表示浏览器不接受此内容类型Accept-Encoding
-
Accept-Encoding:文件编码格式
示例:Accept-Encoding:gzip, deflate
- Accept-Language:指定可以接收的语言种类
示例:Accept-Language:zh-CN,zh;q=0.9,en;q=0.8
- Cache-Control:指定缓存机制
示例:Cache-Control:max-age=0 不缓存服务器资源
- Connection:是否开启长连接
示例:Connection:keep-alive 告诉服务器这是一个长连接
- Cookie:浏览器用这个属性向服务器发送Cookie,它可以记载和服务器相关的用户信息
- Host:主机和端口号
示例:Host:blog.51cto.com
- Upgrade-Insecure-Requests:升级为HTTPS请求
示例:Upgrade-Insecure-Requests:1 加载http资源时自动替换为https请求,不再显示警报
- User-Agent:浏览器名
示例:User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36
- Referer:表明产生页面来自哪个URL
示例:Referer:http://blog.51cto.com/13570193/2108347
- Accept-Charset:表明可以处理的字符编码
示例:Accept-Charset: utf-8, iso-8859-1;q=0.5
- Content-Type:表明实际发送的数据类型
示例:Content-Type:application/x-www-form-urlencoded
更多header字段含义可到HTTP Headers查询
HTTP响应
HTTP响应分为:状态行、响应头、空行、响应正文
- 状态行:协议版本、状态码、状态码解释
- 响应头:与请求头类似
- 空行:表示响应头结束,不可缺失
- 响应正文:响应的具体数据
常见HTTP响应Header
-
Cache-Control:
-
Connection
- Content-Encoding
-
Content-Type
-
Date:服务端发送资源时的服务器时间,使用GMT时间,HTTP协议使用的时间都是GMT时间
示例:Date:Sun, 30 Sep 2018 06:49:11 GMT
-
Expires:告诉客户端在这个时间前,可以直接访问缓存副本
示例:Expires, 30 Sep 2018 06:49:11 GMT
-
Server:表明服务器信息
示例:Server:openresty
-
Transfer-Encoding:服务器发送的资源的方式
示例:Transfer-Encoding:chunked 分块发送
-
Vary:用于列出一个响应字段列表,告诉缓存服务器遇到同一个 URL 对应着不同版本文档的情况时,如何缓存和筛选合适的版本
示例:Vary:Accept-Encoding
-
Strict-Transport-Security:告诉浏览器只能通过HTTPS访问当前资源
示例:Strict-Transport-Security:max-age= 31536000 表示31536000内都使用https访问资源
更多header字段含义可到HTTP Headers查询
常见状态码
1xx: 信息性状态码
- 100, 101
2xx: 成功状态码
- 200:OK
3xx: 重定向状态码
- 301:请求永久重定向
- 302:请求临时重定向
- 304:请求被重定向到客户端本地缓存
4xx: 客户端错误状态码
- 400---/客户端请求存在语法错误
- 401---/客户端请求没有经过授权
- 403---/客户端的请求被服务器拒绝,一般为客户端没有访问权限
- 404---/客户端请求的URL在服务端不存在
5xx: 服务器端错误状态码
- 500: Internal Server Error 服务器内部错误
- 502: Bad Gateway 前面代理服务器联系不到后端的服务器时出现
- 504:Gateway Timeout 这个是代理能联系到后端的服务器,但是后端的服务器在规定的时间内没有给代理服务器响应
更多响应状态码请点击HTTP response status codes
HTTP版本
- HTTP/0.9 HTTP协议的最初版本,仅支持GET,仅能访问HTML格式的资源
- HTTP/1.0 增加了POST和HEAD,支持MIME,可以访问多种数据格式,如text/html、image/jpeg等,支持cache。工作方式是每次TCP连接只能发送一个请求,当服务器响应后就会关闭这次连接,不支持keepalive。
- HTTP/1.1 支持keepalive持久连接,加入了管道机制,一个TCP连接同时允许多个请求同时发送,增加了并发性;新增了请求方式PUT、PATCH、DELETE等。但是还存在一些问题,服务端是按队列顺序处理请求的,假如一个请求处理时间很长,则会导致后边的请求无法处理,这样就造成了队头阻塞的问题;同时HTTP是无状态的连接,因此每次请求都需要添加重复的字段,降低了带宽的利用率。
- HTTP/2.0 增加双工模式,即不仅客户端能够同时发送多个请求,服务端也能同时处理多个请求,解决了队头堵塞的问题;HTTP请求和响应中,状态行和请求/响应头都是些信息字段,并没有真正的数据,因此在2.0版本中将所有的信息字段建立一张表,为表中的每个字段建立索引,客户端和服务端共同使用这个表,他们之间就以索引号来表示信息字段,这样就避免了1.0旧版本的重复繁琐的字段,并以压缩的方式传输,提高利用率。另外也增加服务器推送的功能,即不经请求服务端主动向客户端发送数据。
当前主流的协议版本还是HTTP/1.1版本
网站访问量
- IP:以公网IP计算访问量
- UV:以电脑计算访问量
- PV:以打开网页次数计算访问量