HTTP和HTTPS笔记
HTTP简介
HTTP是超文本传输协议,是从万维网服务器传输超文本到本地浏览器的传送协议,基于TCP/IP通信协议来传递数据
HTTP工作原理
默认端口号为80,工作于客户端-服务器架构上,浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求
HTTP三点注意事项
- HTTP是无连接的,限制每次连接只处理一个请求,可以节省传输时间
- HTTP是媒体独立的,只要客户端和服务器知道如何处理数据内容,任何类型数据都可以通过HTTP发送
- HTTP是无状态的,HTTP是无状态协议,指协议对事务处理没有记忆能力,缺少状态意为如果后续处理需要前面信息,必须要重传
HTTP消息结构
- 一个HTTP客户端是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器传输一个或多个HTTP请求
- 一个HTTP服务器同样也是一个应用程序(web服务如Apache Web服务器或IIS服务器等),通过接受客户端请求并向客户端发送HTTP响应数据
- HTTP使用统一资源标识符URL来传输数据和建立连接
HTTP请求格式
- 请求行(请求方法 URL 协议版本)
- 请求头部(头部字段名 值)
- 空行
- 请求数据
HTTP响应格式
- 状态行
- 消息报头
- 空行
- 响应正文
HTTP8种请求方法
- GET 请求指定页面信息,返回实体主体
- HEAD 类似于get请求,只不过返回的响应中没有具体内容,用于获得报头
- POST 向指定资源提交数据进行处理请求(上传文件,提交表单)。数据被包含在请求体中,可能会导致新的资源的建立和/或已有资源修改
- PUT 从客户端向服务器传送的数据取代指定的文档内容
PUT请求:如果两个请求相同,后一个请求会覆盖第一个请求,常用来改资源 POST请求:后一个请求不会把第一个请求覆盖,常用来增资源
- DELETE 请求服务器删除指定页面
- CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
- OPTIONS 允许客户端查看服务器性能
- TRACE 回显服务器收到的请求,主要用于测试或诊断
HTTP状态码分类
- 1** 信息,服务器收到请求,需要请求者继续执行操作
- 2** 成功,操作被成功接收并处理
- 3** 重定向 需要进一步操作以完成请求
- 4** 客户端错误,请求包含语法错误或无法完成请求
- 5** 服务器错误,服务器在处理请求的过程发生了错误
常见状态码
- 200 OK 请求成功,一般用于GET,POST
- 201 Created 已创建,成功请求并创建新的资源,且其URI已经随Location 头信息返回。
- 202 Accepted 已接受,已接受请求,但处理未完成
- 301 Moved Permanently 永久移动,请求的资源被永久移动到新的URL,返回信息包括新的URL,浏览器会自动定向到新的URL,今后的新请求都应使用新的URL代替
- 302 Found 临时移动,和301类似,但资源只是临时被移动,客户端应使用原来的URL
- 401 Unauthorized 请求要求用户的身份验证,对于需要登录的网页,服务器可能返回此响应
- 403 Forbidden 服务器理解客户端的请求,但是拒绝执行此请求
- 404 Not Found 服务器无法根据客户端的请求找到资源
- 500 Internal Server Error 服务器内部错误,无法完成请求
- 502 Bad Gateway 作为网关或代理工作的服务器尝试执行请求时,从远程服务器收到一个无效的响应
HTTPS简介
超文本传输安全协议,是一种透过计算机网络进行安全通信的传输协议,HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包,默认端口是443
HTTP和HTTPS的区别
- HTTP明文传输,数据未加密,安全性较差,HTTPS(SSL+HTTP)数据传输过程是加密的,安全性较好
- 使用HTTPS协议需要用到CA(数字证书认证机构)申请证书,一般免费证书较少,需要一定费用购买
- HTTP页面响应速度比HTTPS快,主要是因为HTTP使用TCP三次握手建立连接,客户端和服务器需要交换3个包,而HTTPS除了TCP的三个包,还要加上SSL握手的九个包,因此一共是12个包
- HTTP和HTTPS使用完全不同的连接方式,用的端口也不同,一个是80,一个是443
- HTTPS其实就是建构在SSL/TLS之上的HTTP协议,所以HTTPS更耗费服务器资源
TCP三次握手
-
服务器端被动打开建立TCB(传输控制块),客户端主动打开建立TCB,建立连接时,客户端发送请求报文到服务器,等到服务器确认。此时TCP客户端进程进入同步已发送状态
-
TCP服务器接收到请求报文后,如果同意连接,则发出确认报文,此时TCP服务器进程进入同步收到状态
-
TCP客户进程收到确认后,还要向服务器发送确认报文,此时TCP连接简历,客户端进入已建立连接状态。服务器收到客户端的确认后也进入已建立连接状态,此后双方可以开始通信了
TCP四次挥手
- 客户端主动关闭,服务器端被动关闭。客户端进程发出连接释放报文,停止发送数据
- 服务器收到连接释放报文,发出确认报文,此时仍可以往客户端发送数据
- 等服务器将最后数据发送完毕后,发送连接释放报文
- 客户端收到连接释放报文后,发出确认报文
- 服务器端收到确认报文后,立即撤销TCB,关闭连接
- 客户端发出确认报文后,需要等待2*MSL(最长报文段寿命),才撤销TCB,关闭连接