回顾计算机网络-HTTP协议
HTTP简介
Hyper Text Transfer Protocol(超文本传输协议),基于TCP/IP通信协议传递数据。位于OSI模型的应用层。
基于BS模型,浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送请求并相应。
主要特点
- 简单快速:通过Get Post Update Delete Put Head Options Trace等方法,传送请求方法和路径。
- 灵活:允许传输任意类型的数据对象。以Content-Type加以标记。
- 无连接:每次连接只处理一个请求,不会长时间维护一个电路连接。每次处理完请求,并受到应答,断开连接,采用这种方式节省传输时间。
- 无状态:对于事务处理没有存档记忆。无状态在临时应答的时候速度较快,但后续处理需要重传就较为消耗资源。各有利弊
- 支持BS和CS模式。
URL与URI
Uniform Resource Identifier:统一资源标识符。
Uniform Resource Locator:统一资源定位器。
HTTP之请求消息Request
请求行(request line)、请求头部(header)、空行和请求数据四个部分组成
POST请求数据例子:
1 | POST / HTTP1.1 //请求行 |
HTTP之响应消息Response
状态行、消息报头、空行和响应正文等四个部分组成。
1 | 200 OK |
状态码
分类 | 分类描述 |
---|---|
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
1 | 200 OK //客户端请求成功 |
其他
Content-Encoding:HTTP协议传输数据可压缩,使用Content-Encoding来设定压缩格式
HTTP1.1不同处
持久连接:通过引入持久连接,一次TCP连接可以被多个请求复用。客户端在最后一次请求时,发送Connection:close来明确服务器关闭TCP连接。
管道机制:客户端可以在一个TCP连接中,同时请求多个资源,服务器桉请求顺序回复。而不是想以前一样等一个请求结束后再发送另一个请求。
Content-Length:1.0版本,一次请求就是一个TCP连接。在1.1版本中,加入Content-Length,来确保本次回应的长度。
分块传输编码:当服务器端需要长时间操作时,通过分块将数据分段传输。这样的流模式相对于传统的缓存模式效率更高。
HTTP2.0
二进制协议:2.0的头信息和数据体都是二进制,并且被统称为帧(frame),二进制协议,是的HTTP2.0可以定义额外的帧。这为未来的高级应用打下了基础。
多工:HTTP/2 复用TCP连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应,这样就避免了”队头堵塞”。
举例来说,在一个TCP连接里面,服务器同时收到了A请求和B请求,于是先回应A请求,结果发现处理过程非常耗时,于是就发送A请求已经处理好的部分, 接着回应B请求,完成后,再发送A请求剩下的部分。
这样双向的、实时的通信,就叫做多工(Multiplexing)。
数据流:更为高级的数据流,同一个包中的数据可能来自于不同的请求。通过数据流ID来区分数据流属于不同的请求。同时规定,客户端发出的数据流,ID一律为奇数,服务器发出的,ID为偶数。
数据流发送到一半的时候,客户端和服务器都可以发送信号(RST_STREAM
帧),取消这个数据流。1.1版取消数据流的唯一方法,就是关闭TCP连接。这就是说,HTTP/2 可以取消某一次请求,同时保证TCP连接还打开着,可以被其他请求使用。
客户端还可以指定数据流的优先级。优先级越高,服务器就会越早回应。
数据流发送到一半的时候,客户端和服务器都可以发送信号(RST_STREAM
帧),取消这个数据流。1.1版取消数据流的唯一方法,就是关闭TCP连接。这就是说,HTTP/2 可以取消某一次请求,同时保证TCP连接还打开着,可以被其他请求使用。
客户端还可以指定数据流的优先级。优先级越高,服务器就会越早回应。
头信息压缩:请求信息中,有很多字段重复,比如Cookie和UserAgent。这些重复的数据一定程度上影响速度,浪费带宽。通过引入头信息压缩机制,一方面通过gzip
或compress
压缩了头信息,另一方面,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。
服务器推送:允许服务及未经允许,主动向客户端发送资源。这叫做服务器推送。
HTTPS
HTTPS是HTTP协议的加密版本,HTTP/2协议只有在HTTPS的版本才能使用。
证书:花钱买一张二进制文件证书,包含网站公钥和元数据。共有三种认证
- 域名认证(Domain Validation):最低级别认证,可以确认申请人拥有这个域名。对于这种证书,浏览器会在地址栏显示一把锁。
- 公司认证(Company Validation):确认域名所有人是哪一家公司,证书里面会包含公司信息。
- 扩展认证(Extended Validation):最高级别的认证,浏览器地址栏会显示公司名。
还分为三种覆盖范围。
- 单域名证书:只能用于单一域名,
foo.com
的证书不能用于www.foo.com
- 通配符证书:可以用于某个域名及其所有一级子域名,比如
*.foo.com
的证书可以用于foo.com
,也可以用于www.foo.com
- 多域名证书:可以用于多个域名,比如
foo.com
和bar.com
修改连接
网页使用HTTPS协议后,所有的资源都需要改成HTTPS,否则不会被加载。
301重共享
修改WEB服务器配置,使用301重定向,将HTTP协议访问导向HTTPS协议
Nginx
1
2
3
4
5
6 server {
listen 80;
server_name domain.com www.domain.com;
return 301 https://domain.com$request_uri;
}
Apache
1
2
3 RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]