博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HTTP、HTTPS协议——Linux网络编程
阅读量:3947 次
发布时间:2019-05-24

本文共 2939 字,大约阅读时间需要 9 分钟。

HTTP协议

HTTP 全称 HyperText Transfer Protocol超文本传输协议,超文本即超越普通文本的文本,即音视频、图片、文件的混合体。

URL

URL(Uniform Resourse Locator)统一资源定位符

在这里插入图片描述

  1. 协议方案名:通信双方指定的协议名
  2. 主机名和密码:对用户进行认证
  3. 域名:服务器的主机名或IP地址
  4. 端口:服务段侦听的端口,省略时使用默认端口HTPP使用80端口,HTTPS使用443端口
  5. 资源路径:资源在主机上的存放路径,"/"是服务器定义的逻辑上的根目录
  6. 查询字符串:浏览器给服务器提交的数据,提交的数据是按照key=value的形式,多个数据之间使用&进行分隔,在传输数据的时候,需要进行URL编码,编码的方式就是将特殊字符按照16进制进行传输,对于服务器而言,接收到URL编码之后的查询字符串,需要进行URL解码。为了区分,在编码之后的内容前面加上%
  7. 片段标识符:用于指定网络资源中的片断,指定后打开网页可直接定位到对应的位置

HTTP报文

请求

在这里插入图片描述

  1. 请求方法:
    1. GET:从服务器获取资源,也可以提交数据,提交的数据存储在URL中
    2. POST:向服务器提交数据,提交的数据是在正文当中
    3. PUT:传输文件
    4. HEAD:获取响应头部
    5. DELETE:删除文件
  2. 请求头部:具有多行数据,每行数据都是一个key:value的形式,每行数据使用\r\n分隔
    1. Content-Length:正文长度
    2. Content-Type:正文的编码格式
      1. text/html:HTML格式
      2. text/plain:纯文本格式
      3. text/png:png图片格式
      4. application/json:json数据格式
    3. referer:当前页面是从哪一个页面跳转过来的
    4. cookie:向服务器提交浏览器本地保存的认证信息,认证信息是之前登陆服务器的时候,服务器返回回来的
    5. Tranfer-Encoding:针对正文而言,可以分块传输
    6. Connection:连接状态,keep-alive保持长连接

响应

在这里插入图片描述

  1. 协议版本
    1. HTTP1.0,之前只有GET方法,增加了POST、HEAD方法;加入了协议版本号;加入了HTPP Header,让请求处理灵活;增加响应状态码,标记出错的原因
    2. HTTP1.1,增加了PUT等方法,允许持久连接
  2. 状态码
    1. 1xx:提示信息,表示收到的请求正在处理
    2. 2xx:报文已经被收到并且正确处理
      1. 200 OK,请求成功
      2. 201 Create,该请求成功,并因此创建了一个新的资源
    3. 3xx:重定向,资源位置发生变动,客户端需要重新发送请求
      1. 301,永久重定向
      2. 302,临时重定向
    4. 4xx:客户端错误,请求报文有误,服务器无法处理
      1. 400,语义有误,当前请求无法被服务器理解,请求参数有误
      2. 403,服务器已经理解请求,但是拒绝执行它
      3. 404,请求所希望的资源未被在服务器上发现
    5. 5xx:服务器错误,服务器在处理请求时,内部发生了错误
      1. 500,服务器遇到意外的情况阻止其执行请求
      2. 502,Bad Gateway

HTTP中GET和POST的区别?

  1. GET方法一把用于请求,比如在浏览器地址栏输入www.baidu.com就是发送了一个GET请求,请求服务器返回资源;而POST一般用于表单的提交,相当于把信息提交给服务器。
  2. GET方法是不安全的,因为在发送请求过程中,请求的参数会拼在URL的后面,容易被攻击者破坏;而POST方法是把请求参数放在正文中,对用户来说不可见。
  3. GET请求的URL有长度限制;而POST请求把参数和值放在消息体中,没有长度要求
  4. GET请求在浏览器返回的回退/前进操作是无害的;而POST操作会再次提交表单到服务器
  5. GET请求在发送过程中会产生一个TCP数据包;POST在发送过程中会产生两个TCP数据包。对于GET的请求方式,浏览器会把http header和data一并发送出去;而对于POST,浏览器会先发送header,服务器响应100,在发送data

地址栏输入URL发生了什么?

  1. 浏览器会根据输入的URL地址,去查找域名是否被本地DNS缓存;如果浏览器缓存了你想访问的URL地址,那么就直接返回IP;如果没有缓存,浏览器就会发起系统调用来查询本机的hosts文件是否有配置ip地址,如果找到,直接返回;如果找不到,就向网络中发起一个DNS查询。
  2. 首先请求会找到本地的DNS服务器来查询是否包含IP地址,如果本地的DNS服务器查询不到,就会向根域名服务器方发起一个DNS查询。再由根域名服务器一步一步查询,由权威服务区告诉本地服务器目标IP地址,本地DNS服务器告诉用户需要访问的IP地址。
  3. 浏览器需要和目标服务器建立TCP连接,建立连接后,浏览器会向目标服务器发起GET请求。
  4. 如果服务器只是一个简单页面,就会直接返回;但是某些大型的站点,不会直接返回主机名所在的页面,而会直接重定向,浏览器在获取重定向响应后,在响应报文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的不安全性。

  1. 混合加密:在通信建立前采用非对称加密的方式交换会话密钥,在通信过程中使用对称加密的方式进行通信。
  2. 摘要算法:客户端会在发送之前通过摘要算法计算出明文的”指纹“,发送的时间将明文+"指纹"一同加密后,发送给服务器,服务器解密之后,使用同样的摘要算法对明文进行计算,如果计算结果和发送过来的"指纹"相同,则说明数据是完整的。
  3. 数字证书:客户端向服务端索要公钥,然后用公钥加密,服务端接收到后,使用私钥解密,如何保证公钥不被篡改?借助第三方权威机构CA,将服务器公钥放在数字证书中,只要证书可靠,公钥就是可信的

HTTP和HTTPS的区别?

  • HTTP是未经安全加密的协议,它的传输过程容易被攻击者监听、数据容易被窃取、发送方和接收方容易被伪造;而HTTPS是安全协议,它通过混合加密、摘要算法、数字认证解决HTTP的不安全
  • HTTP协议的默认端口是80,HTTPS的默认端口是443

转载地址:http://zbowi.baihongyu.com/

你可能感兴趣的文章
linux获得系统编码
查看>>
Ubuntu安装glib
查看>>
MySQL存储过程,生成大量数据
查看>>
查询字段值出现多次的字段值
查看>>
SQL Server表存在则进行查重 SQL语句
查看>>
redhat 9 下sqlite 3的安装及编程
查看>>
两个同步表的字段复制.Oracle.
查看>>
windows MySQL 报“Got a packet bigger than 'max_allowed_packet' bytes”错误,解决过程.
查看>>
MFC ADO连MySQL,使用数据源.
查看>>
在Redhat9下静态编译glib库.
查看>>
在ubuntu12下静态编译freetype库.
查看>>
CImg库编译使用.
查看>>
SQL Server循环执行动态SQL语句.
查看>>
windows MySQL报"2006 - MySQL server has gone away"错误,解决过程.
查看>>
ubuntu10.4网卡名由eth0改为eth4,导致获得不了IP地址.解决方法.
查看>>
CheckPoint关键词做字段名使用.
查看>>
Qt QSplitte分割器使用(用户手动改变窗口大小)
查看>>
根据高度图计算体积等。
查看>>
Qt动态加载动态库
查看>>
使用VS2015创建纯C动态库。
查看>>