首先了解浏览器网络通信的过程:
- 浏览器分析连接指向页面的URL;
- 浏览器想DNS系统请求解析URL的IP地址;
- 域名系统DNS解析获取IP地址;
- 浏览器与服务器建立TCP连接;
- 浏览器发出资源请求指令;
- 服务器做出响应;
- 释放TCP连接;
- 浏览器显示服务器返回响应;
HTTP协议是使用TCP作为传输层协议,保证了数据传输的可靠性。HTTP协议本身是无连接的,就是双方交换HTTP报文之前不需要先建立http连接。在浏览器和服务器建立了TCP连接之后(两次握手之后),在第三次握手时,浏览器就会将数据封装成HTTP报文,一起发送给服务器。
HTTP报文:
由图可以看出,请求报文跟响应报文的区别就是开始行的不同。
请求报文:
请求报文的开始行就只有三个内容: 方法、请求资源的URL、以及HTTP的版本.
其中
方法
就是所谓的restful风格的接口:
GET 请求获取Request-URI所标识的资源
POST 在Request-URI所标识的资源后附加新的数据
HEAD 请求获取由Request-URI所标识的资源的响应消息报头
PUT 请求服务器存储一个资源,并用Request-URI作为其标识
DELETE 请求服务器删除Request-URI所标识的资源
TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断
CONNECT 保留将来使用
OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
请求报文的示例:
POST /reg.jsp HTTP/ (CRLF)
Accept:image/gif,image/x-xbit,... (CRLF)
...
HOST:www.xxx.com (CRLF)
Content-Length:22 (CRLF)
Connection:Keep-Alive (CRLF)
Cache-Control:no-cache (CRLF)
(CRLF) //该CRLF表示消息报头已经结束,在此之前为消息报头
user=jeffrey&pwd=1234 //此行以下为提交的数据
响应报文:
响应报文中的第一行是状态栏,包括三个内容:http版本,状态码,以及状态吗的解释短语
其中状态码分别为5大类共33种:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
常见的状态码:
常见状态代码、状态描述、说明:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
Http 与 Https 的区别:
- https协议需要申请证书;
- http是明文传输,而https是通过ssl加密的。
- http与https的默认端口不同,前者是80,后者是443;
- 其实https就是在http协议的基础上,添加上ssl进行进行加密传输和身份认证。
客户端在使用HTTPS方式与web服务器通信时的步骤:
- 客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。
- Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
- 客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
- 客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
- Web服务器利用自己的私钥解密出会话密钥。
- Web服务器利用会话密钥加密与客户端之间的通信。