HTTP / HTTPS && TCP

HTTP / HTTPS && TCP

Scroll Down

HTTP / HTTPS && TCP

网络协议: 网络协议是计算机之间为了实现网络通信而达成的一种“约定”或者”规则“,有了这种”约定“,不同厂商的生产设备,以及不同操作系统组成的计算机之间,就可以实现通信。

HTTP

HTTP协议是超文本传输协议的缩写,英文是Hyper Text Transfer Protocol。它是从WEB服务器传输超文本标记语言(HTML)到本地浏览器的传送协议。

HTTP最初的设计目的是为了提供一种发布和接收HTML页面的方法

HTTP是一个基于TCP/IP通信协议来传递数据的协议,传输的数据类型为HTML 文件,、图片文件, 查询结果等, 特点如下:

  • HTTP协议支持客户端/服务端模式,也是一种请求/响应模式的协议
  • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST, PUT, DELETE, PATCH
  • 灵活:HTTP允许传输任意类型的数据对象。传输的类型由Content-Type加以标记
  • HTTP 0.9和1.0使用非持续连接: 限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接; HTTP 1.1使用持续连接:不必为每个web对象创建一个新的连接,一个连接可以传送多个对象,采用这种方式可以节省传输时间
  • 无状态:无状态是指协议对于事务处理没有记忆,后续处理需要前面的信息,则必须重传

URI: Uniform Resource Identifier,统一资源标识符

URL: Uniform Resource Location统一资源定位符

这些全都是URI, 其中那些提供了访问机制的是URL

HTTP请求消息结构

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成

  • 请求行: 说明请求的方法, 请求的URL, 协议的版本等
  • 请求头: 可以有很多行, 每一行都是一个key-value键值对, 一般请求头的总长度没有限制, 但Tomcat默认限制最大请求头为8024字节(8KB); 一般浏览器会自动为请求设置 User-Agent, Host, Accept-Language等请求头
  • 空行: 分割作用
  • 请求数据:

HTTP响应消息结构

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文

  • 状态行: 表明这次请求的状态, 会说明协议版本, 响应码等
  • 消息报头: 跟请求头类似, 一般服务器会自动设置 Date, Server, Content-Type, Content-Length 等响应头
  • 空行: 分割作用
  • 响应正文:

请求方法

HTTP 协议中共定义了八种方法或者叫“动作”来表明对 Request-URI 指定的资源的不同操作方式

  • OPTIONS: 返回服务器针对特定资源所支持的HTTP请求方法, 浏览器在发起请求前一般都会先发起该种请求来确定服务器针对特定资源所支持的请求方法
  • HEAD: 向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回, 也就是只要发起Get请求后的响状态行与响应头
  • GET: 向特定的资源发出请求, GET请求会被浏览器缓存, 参数是拼接在URL上, 所以有长度限制(最长为2048个字符)
  • POST: 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的创建和/或已有资源的修改
  • PUT: 向指定资源位置上传其最新内容
  • DELETE: 请求服务器删除 Request-URI 所标识的资源
  • TRACE: 回显服务器收到的请求,主要用于测试或诊断
  • CONNECT: HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器

状态码

状态码大类

  • 1xx: 信息, 服务器收到请求,需要请求者继续执行操作
  • 2xx: 成功, 操作被成功接收并处理
  • 3xx: 重定向, 需要进一步的操作以完成请求
  • 4xx: 客户端错误, 请求包含语法错误或无法完成请求
  • 5xx: 服务器错误, 服务器在处理请求的过程中发生了错误

常见状态码

  • 200: 请求成功。一般用于GET与POST请求
  • 201: 已创建。成功请求并创建了新的资源
  • 202: 已接受。已经接受请求,但未处理完成
  • 301: 永久重定向, 请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
  • 302: 单次重定向, 资源只是临时被移动。客户端应继续使用原有URI
  • 400: 客户端请求的语法错误,服务器无法理解
  • 401: 请求要求用户的身份认证
  • 403: 服务器理解请求客户端的请求,但是拒绝执行此请求
  • 404: 服务器无法根据客户端的请求找到资源
  • 405: 客户端请求中的方法被禁止
  • 500: 服务器内部错误,无法完成请求
  • 502: 为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应

HTTPS

HTTPS = HTTP + SSL / TLS

SSL / TLS: 通过申请一套数字证书, 来对网站进行加密; 证书是需要申请的,并由专门的数字证书认证机构(CA)通过非常严格的审核之后颁发的电子证书。颁发证书的同时会产生一个私钥和公钥。私钥由服务端自己保存,不可泄漏。公钥则是附带在证书的信息中,可以公开的。证书本身也附带一个证书电子签名,这个签名用来验证证书的完整性和真实性,可以防止证书被篡改

网上扒了一张原理图

也就是说, HTTPS就是在正式传输数据前会先相互交换公钥, 在以后的通信中, 服务端用客户端的公钥加密, 客户端用服务端的公钥加密, 就保证了传输的信息只有双方能解密

TCP

看图

总结:

三次握手:

  • C: S你现在有时间么
  • S: 有的, 咋了
  • C: 我打电话给你说

四次分手:

  • C: 有点晚了, 改天再聊
  • S: 行
  • S: 那我挂了哦
  • C: 好的

有时会只有三次分手:

  • C: 有点晚了, 改天再聊
  • S: 行, 那我挂了哦
  • C: 好的