本文共 2939 字,大约阅读时间需要 9 分钟。
HTTP协议
HTTP 全称 HyperText Transfer Protocol超文本传输协议,超文本即超越普通文本的文本,即音视频、图片、文件的混合体。
URL
URL(Uniform Resourse Locator)统一资源定位符
- 协议方案名:通信双方指定的协议名
- 主机名和密码:对用户进行认证
- 域名:服务器的主机名或IP地址
- 端口:服务段侦听的端口,省略时使用默认端口HTPP使用80端口,HTTPS使用443端口
- 资源路径:资源在主机上的存放路径,"/"是服务器定义的逻辑上的根目录
- 查询字符串:浏览器给服务器提交的数据,提交的数据是按照key=value的形式,多个数据之间使用&进行分隔,在传输数据的时候,需要进行URL编码,编码的方式就是将特殊字符按照16进制进行传输,对于服务器而言,接收到URL编码之后的查询字符串,需要进行URL解码。为了区分,在编码之后的内容前面加上%
- 片段标识符:用于指定网络资源中的片断,指定后打开网页可直接定位到对应的位置
HTTP报文
请求
- 请求方法:
- GET:从服务器获取资源,也可以提交数据,提交的数据存储在URL中
- POST:向服务器提交数据,提交的数据是在正文当中
- PUT:传输文件
- HEAD:获取响应头部
- DELETE:删除文件
- 请求头部:具有多行数据,每行数据都是一个key:value的形式,每行数据使用\r\n分隔
- Content-Length:正文长度
- Content-Type:正文的编码格式
- text/html:HTML格式
- text/plain:纯文本格式
- text/png:png图片格式
- application/json:json数据格式
- referer:当前页面是从哪一个页面跳转过来的
- cookie:向服务器提交浏览器本地保存的认证信息,认证信息是之前登陆服务器的时候,服务器返回回来的
- Tranfer-Encoding:针对正文而言,可以分块传输
- Connection:连接状态,keep-alive保持长连接
响应
- 协议版本
- HTTP1.0,之前只有GET方法,增加了POST、HEAD方法;加入了协议版本号;加入了HTPP Header,让请求处理灵活;增加响应状态码,标记出错的原因
- HTTP1.1,增加了PUT等方法,允许持久连接
- 状态码
- 1xx:提示信息,表示收到的请求正在处理
- 2xx:报文已经被收到并且正确处理
- 200 OK,请求成功
- 201 Create,该请求成功,并因此创建了一个新的资源
- 3xx:重定向,资源位置发生变动,客户端需要重新发送请求
- 301,永久重定向
- 302,临时重定向
- 4xx:客户端错误,请求报文有误,服务器无法处理
- 400,语义有误,当前请求无法被服务器理解,请求参数有误
- 403,服务器已经理解请求,但是拒绝执行它
- 404,请求所希望的资源未被在服务器上发现
- 5xx:服务器错误,服务器在处理请求时,内部发生了错误
- 500,服务器遇到意外的情况阻止其执行请求
- 502,Bad Gateway
HTTP中GET和POST的区别?
- GET方法一把用于请求,比如在浏览器地址栏输入
www.baidu.com
就是发送了一个GET请求,请求服务器返回资源;而POST一般用于表单的提交,相当于把信息提交给服务器。 - GET方法是不安全的,因为在发送请求过程中,请求的参数会拼在URL的后面,容易被攻击者破坏;而POST方法是把请求参数放在正文中,对用户来说不可见。
- GET请求的URL有长度限制;而POST请求把参数和值放在消息体中,没有长度要求
- GET请求在浏览器返回的回退/前进操作是无害的;而POST操作会再次提交表单到服务器
- GET请求在发送过程中会产生一个TCP数据包;POST在发送过程中会产生两个TCP数据包。对于GET的请求方式,浏览器会把http header和data一并发送出去;而对于POST,浏览器会先发送header,服务器响应100,在发送data
地址栏输入URL发生了什么?
- 浏览器会根据输入的URL地址,去查找域名是否被本地DNS缓存;如果浏览器缓存了你想访问的URL地址,那么就直接返回IP;如果没有缓存,浏览器就会发起系统调用来查询本机的hosts文件是否有配置ip地址,如果找到,直接返回;如果找不到,就向网络中发起一个DNS查询。
- 首先请求会找到本地的DNS服务器来查询是否包含IP地址,如果本地的DNS服务器查询不到,就会向根域名服务器方发起一个DNS查询。再由根域名服务器一步一步查询,由权威服务区告诉本地服务器目标IP地址,本地DNS服务器告诉用户需要访问的IP地址。
- 浏览器需要和目标服务器建立TCP连接,建立连接后,浏览器会向目标服务器发起GET请求。
- 如果服务器只是一个简单页面,就会直接返回;但是某些大型的站点,不会直接返回主机名所在的页面,而会直接重定向,浏览器在获取重定向响应后,在响应报文Lacation中找到重定向地址,浏览器重新进行访问。
HTTPS协议
由于HTTP协议是明文传输,所以在传输过程中有可能被修改、截获或者伪造,所以可以认为HTTP是不安全的;HTTP的传输过程中不会验证通信双方的身份,不会验证报文的完整性,因此有了HTTP协议。
HTTPS全称Hypertext Transfer Protocol Secure,是HTTP协议的扩展,是用**传输层安全性(TLS)或者安全层套接字(SSL)**对通信进行加密。
SSL/TLS
TLS(Transport Layer Security)是SSL(SEcure Socket Layer)的后续版本。TSL在根本上使用对称加密和非对称加密两种形式。
对称加密
对称加密(Symmetrical Encryption)指加密和解密时使用的密钥都是同样的密钥,只要保证了密钥的安全性,那么整个通信过程也就是具有了机密性。
非对称加密
非对称加密(Asymmetrical Encryption),非对称加密中有两个密钥,一个是公钥进项加密,一个是私钥进行解密。
HTTPS安全性
HTTPS使用混合加密、摘要算法、数字证书来解决HTTP的不安全性。
- 混合加密:在通信建立前采用非对称加密的方式交换会话密钥,在通信过程中使用对称加密的方式进行通信。
- 摘要算法:客户端会在发送之前通过摘要算法计算出明文的”指纹“,发送的时间将明文+"指纹"一同加密后,发送给服务器,服务器解密之后,使用同样的摘要算法对明文进行计算,如果计算结果和发送过来的"指纹"相同,则说明数据是完整的。
- 数字证书:客户端向服务端索要公钥,然后用公钥加密,服务端接收到后,使用私钥解密,如何保证公钥不被篡改?借助第三方权威机构CA,将服务器公钥放在数字证书中,只要证书可靠,公钥就是可信的
HTTP和HTTPS的区别?
- HTTP是未经安全加密的协议,它的传输过程容易被攻击者监听、数据容易被窃取、发送方和接收方容易被伪造;而HTTPS是安全协议,它通过混合加密、摘要算法、数字认证解决HTTP的不安全
- HTTP协议的默认端口是80,HTTPS的默认端口是443
转载地址:http://zbowi.baihongyu.com/