HTTP相关
1、简介
超文本传输协议(应用层),端口号80,常承载在TCP之上,无状态。
为什么说HTTP是无状态的协议呢?因为它的每个请求都是完全独立的,每个请求包含了处理这个请求所需的完整的数据,发送请求不涉及到状态变更。
在TCP连接建立成功后,发送一次HTTP协议格式的报文不需要依赖上一次报文的发送,即每次传输的数据报文都是独立的,不受到上次的报文影响。
2、HTTPS和HTTP的区别
简述HTTPS流程:
(1)客户端和服务器端传输数据之前,会通过证书对双方进行身份验证。客户端发起SSL握手消息,服务器发证书给客户端,客户端检查服务端证书,确认是否由自己信任的证书签发机构签发。 如果不是,将是否继续通讯的决定权交给用户选择 ( 注意,这里将是一个安全缺陷 )。如果检查无误或者用户选择继续,则客户端认可服务端的身份。服务端要求客户端发送证书,并检查是否通过验证。失败则关闭连接,认证成功则从客户端证书中获得客户端的公钥,一般为1024位或者2048位。到此,服务器客户端双方的身份认证结束,双方确保身份都是真实可靠的。
(2)协商加密算法(客户端发送自己所有支持的加密算法,服务器选择安全性最高的哪一个)后,客户端生成一个随机字符串,用服务器端公钥将其加密发给服务器端,并对哈希计算出的摘要使用之前产生的密钥加密(对称加密)。
(3)服务器端根据自己的私钥进行解密,得出对称加密的密钥,用其解密出Hash摘要值,并自己hash该消息验证摘要值是否一致,一致则使用这个对称密钥。
常用加密算法:
签名加密算法:MD5(哈希函数)SHA1(与MD5一样都是消息摘要算法,加密性更强)
对称加密算法:DES,AES
非对称加密算法:RSA,ECC
HTTPS与HTTP的区别:
● (1)HTTP使用80端口,HTTPS使用443端口,并在HTTP和TCP之间加入一个加密/身份验证层。
● (2)HTTP信息是明文传输的,HTTP唯一的数据完整性校验就是就是报文头部包含本次运输数据的长度,而对内容是否被篡改不做确认,所以中间人攻击很轻松。而HTTPS运行在TSL/SSL上,添加了加密和认证机制。
● (3)HTTPS由于加密解密,会比HTTP的开销更大。
● (4)HTTPS通信时需要证书,一般需要向证书颁发机构(CA)购买。
3、HTTP状态码
(1)100状态码:服务器收到请求,需要请求者继续执行操作
● 100 continue:继续,客户端应继续请求
● 101 :切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议
(2)200状态码:成功处理了请求的状态码
● 200 OK:服务器已成功处理了请求并提供了请求的网页。
● 201 Created:对于那些要服务器创建对象的请求来说,资源已创建完毕。
● 202 Accepted:已接受。已经接受请求,但未处理完成。
● 204 No Content: 服务器成功处理了请求,但没有返回任何内容。
(3)300状态码:重定向,每次请求中使用重定向不要超过 5 次
重定向状态码用来告诉浏览器客户端,它们访问的资源已被移动, Web服务器发送一个重定向状态码和一个可选的Location Header, 告诉客户端新的资源地址在哪。浏览器客户端会自动用Location中提供的地址,重新发送新的Request。 这个过程对用户来说是透明的。
● 301:请求的网页已永久移动到新位置。返回信息会包括新的URI,浏览器会自动定向到新URL。今后任何新的请求都应使用新的URL代替
● 302:请求的网页临时移动到新位置。但资源只是临时被移动。客户端应继续使用原有URI
● 304 Not Modified:如果网页自请求者上次请求后没有更新,则用304代码告诉搜索引擎机器人,可节省带宽和开销。因为客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源,而此时发现客户端的缓存资源是最新的,则直接使用缓存即可。
(4)400状态码:客户端请求错误,表示请求可能出错,妨碍了服务器的处理
● 400 Bad Request: 客户端请求的语法错误,服务器无法理解。
● 403 Forbidden: 服务器理解客户端的请求,但是拒绝执行次请求。
● 404 Not Found:服务器找不到请求的网页。服务器上不存在的网页经常会返回此代码。
● 410 :请求的资源永久删除后,服务器返回此响应。该代码与 404(未找到)代码相似,但在资源以前存在而现在不存在的情况下,有时用来替代404 代码。如果资源已永久删除,应当使用 301 指定资源的新位置。
(5)500状态码:服务器错误,表示服务器在处理请求时发生内部错误。
这些错误可能是服务器本身的错误,而不是请求出错。
● 500 :服务器内部错误,无法完成请求。
● 503: 服务器目前无法使用(由于超载或停机维护)。