http与https的区别:
1.https需要向CA(Certificate Authority证书颁发机构)申请证书
2.http使用的超文本传输协议,数据是明文传输,https是使用了ssl+http,数据为加密传输
3.http端口为80,https是443
4.http是无状态的,https会对传输内容进行加密、验证身份和数据完整性
https请求流程
1.首先服务器会利用非对称加密算法,生成自己的公私钥对
2.服务器将自己的公钥,发送至CA证书颁发机构,利用颁发机构私钥进行加密生成证书
3.客户端请求与服务器建立连接
4.服务器将包含有自己公钥及颁发机构、有效期等信息的证书返回给客户端
5.客户端利用对应CA机构的公钥对证书进行解密,获取服务器公钥
6.客户端生成对称密钥,利用服务器公钥对其进行加密后,发送给服务器端
7.之后客户端、服务器端利用该对称密钥进行加密通信
http request请求报文和response响应报文组成
request报文由请求行、请求头、请求体三部分组成,如下图所示:
在请求行中包括了三部分:请求的类型 post、get等、请求的url、http协议的版本信息
请求头是以key-value的形式存储的一些数据比较多大概有几十个,如常见的cookie、content-type 即请求体中数据的媒体类型、content-encode 编码信息、User-Agent 浏览器版本信息、Referer 告诉服务器当前请求是从哪里来的、Accept 指定客户端能够接收的内容类型、connection 如何对待长连接等
更多可以看这里 http://tools.jb51.net/table/http_header
请求体中为请求数据即为参数信息
response报文也由响应行、响应头和响应体三部分组成
响应行中包括了两部分 协议类型及版本号、响应的状态code及描述 如200 ok 、404 not found、500 Internal Server Error等等
响应头中也包括了一些key-value形式的数据如 Content-type 响应体中数据的媒体类型、Transfer-Encoding文件传输编码、server web服务器软件类型、Date 服务器消息发出时间等
响应体中即为返回数据
参考 https://www.jianshu.com/p/eb3e5ec98a66
tcp 三次握手和四次挥手都是发生在传输层的
tcp abort overflow
客户端第一次向服务端发送请求时syn包,服务端向客户端发送syn+ack包,客户端发送ack包到服务端
当客户端第一次发送syn包后,服务端收到请求后会将该连接信息放入半连接队列中,之后当收到ack包时会将其从半连接队列取出,放入全连接队列,此时客户端和服务端才算是建立了连接。如果全连接队列满了的话,就会丢弃ack,按照tcp_abort_on_overflow处理,一段时间后再次发送syn+ack到客户端,让它重新发送ack请求。但如果客户端超时时间比较短的话,客户端就会出现超时异常