一、HTTP

references:

HTTP


【HTTP协议】---HTTP协议详解

1、概述、特点

HTTP(超文本传输协议)是一种规定了浏览器和万维网服务器通信规则的协议。客户端和服务端的指定接口(默认80)建立TCP连接,然后进行请求、响应和数据交换。

HTTP通常使用有两个版本。HTTP1.0使用非持续连接(短连接),每次连接只处理一个请求,服务端收到客户请求并收到应答后就断开连接(WWW服务器面对大量用户,只能提供有限连接,不让一个连接处与等待状态)。HTTP1.1开始使用持续连接(长连接),一个TCP连接可以传输多个对象。

特点:

  1. 简单快捷:客户端向服务器请求服务时,只要传送请求方法和路径。由于HTTP协议简单,使得HTTP服务器规模小,所以通信较快。
  2. 灵活:能传输任意类型的数据对象,正在传输的内容类型用Content-Type标记。
  3. 无连接:每次连接只能处理一次请求。优点是节省传输时间,实现简单。如果Connection是close则是短连接,每次只能处理一个请求;Connection是keep-alive则是长连接,一次连接能处理多个请求,可以通过timeout断开。
  4. 无状态:无状态指协议对于事务处理没有记忆能力。所以有了Cookie和Session。
  5. 支持C/S模式。

2、工作原理

  1. 客户端连接到Web服务器:客户端和Web服务器的80端口建立TCP套接字连接。
  2. 发送HTTP请求:客户端向服务器发送请求报文。
  3. 服务器接收请求报文并返回HTTP响应:Web服务器解析请求,定位请求资源,然后将资源复本写入TCP套接字发回。
  4. 释放TCP连接。
  5. 客户端浏览器解析HTML内容。

3、请求

格式:请求行、请求头部、空行、请求数据(主体)

请求行:包括请求类型、请求资源、使用的HTTP版本。

请求头部:服务端要使用的其他附加信息(host指出请求的目的地)。

空行:必须有一个空行。

请求数据:数据。

4、响应

格式:状态行、消息报头、空行、响应正文

状态行:包括HTTP版本、状态码、状态消息

消息报头:客户端要使用的附加信息(编码类型等)。

空行:必须有空行。

响应正文:HTML,返回给客户端的文本信息。

5、状态码

1xx:指示信息--表示请求已接收,继续处理

2xx:成功--表示请求已被成功接收、理解、接受

3xx:重定向--要完成请求必须进行更进一步的操作

4xx:客户端错误--请求有语法错误或请求无法实现

5xx:服务器端错误--服务器未能实现合法的请求

常见状态码

200 OK //客户端请求成功

400 Bad Request //客户端请求有语法错误,不能被服务器所理解

401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

403 Forbidden //服务器收到请求,但是拒绝提供服务

404 Not Found //请求资源不存在,eg:输入了错误的URL

500 Internal Server Error //服务器发生不可预期的错误

503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

6、GET请求和POST请求

  1. GET请求可以被缓存,POST不行。
  2. GET请求会保存在浏览器历史记录中,POST不会。
  3. GET请求的数据放在URL后,以?分割URL和数据,参数用&相连(例如http://weibo.com/signup/signup.php?inviteCode=2388493434)因此绝不能用 GET请求传输敏感数据;POST请求数据写在HTTP的主体中,所以POST比GET略安全一点点。
  4. GET请求的长度有限制(因为浏览器对URL长度有限制),POST的数据放在请求的主体中,理论上没限制,实际上服务器可能会限制。

7、Cookie和Session

HTTP用的是无状态的连接,所以需要Cookie和Session来保存一些信息。

当服务器接收到Cookie后,会根据Cookie中的SessionID来找这个客户的Session,如果没有就会生成一个新的SessionID发给客户端。

根本区别:Cookie保存在客户端,Session保存在服务器。

其他区别:

  1. Cookie保存在客户端,可以使用Cookie欺骗,相对不安全。Session保存在服务器,相对安全。
  2. Session可以设置超时时间,超过一定时间后失效,避免长期占用服务器内存。
  3. 单个Cookie的大小有限制(4KB)。
  4. 客户端每次都会把Cookie发送到服务端,所以服务端直到Cookie,但是客户端不知道Session。

二、HTTPS

references:HTTPS详解

HTTP协议中的内容都是明文,HTTPS是将他们加密,S指SSL/TLS协议。

HTTP的三个不安全:

  1. 窃听风险
  2. 篡改风险:攻击者篡改内容,但是双方都不知道。
  3. 冒充风险:中间人攻击,攻击者在链路上伪装自己,与通讯双方分别建立联系,并交换其所收到的数据。

使用非对称加密+对称加密解决,在TCP和HTTP之间新增了一个TLS/SSL加密层。

1、一些概念

  1. 数字证书:是由权威的数字证书认证机构(CA)颁发的证书,提供公钥和私钥,CA机构和浏览器、操作系统厂家合作,将公钥内置在浏览器、操作系统中,以保证公钥的安全。
  2. 数字签名:为了防止信息来自中间人,发送者会把发送的信息进行摘要(摘要算法),这个摘要就是数字签名。当客户端收到后,对信息重新进行摘要,对比数字签名是否一致就可以知道是否被篡改、来自中间人等等(中间人无法获得私钥)。
  3. 摘要算法:类似哈希,将消息经过算法变为固定长度的串,称为摘要。
  4. 对称加密:使用同一个密钥进行加密解密,速度快。AES。
  5. 非对称加密:私钥加密只能公钥解密,公钥加密只能私钥解密。私钥在服务器手中。RSA,基于大整数因子分解。

2、HTTPS的SSL/TLS握手过程

  1. 客户端发起HTTP请求:客户端告知自己支持的加密算法、摘要算法、安全层协议版本、随机数random-Secret-C。
  2. 服务端配置:服务端要有一套数字证书,以获得一对公钥和私钥。
  3. 服务端返回协商结果:包括使用的加密算法、摘要算法、协议版本、随机数random-Secret-S和证书(公钥)。
  4. 客户端验证证书:验证证书是否信任、有没有过期等。取出摘要,验证内容是否被篡改。获得公钥。证书没问题,生成一个随机数pre-Master-Secret,用公钥加密。
  5. 传送加密信息:把加密后的随机数发给服务端。
  6. 服务端解析:服务端用私钥打开后,用random-Secret-C、random-Secret-S、pre-Master-Secret生成最终的对称加密的私钥Master-Secret。以后就都用对称加密的私钥进行加密解密了。
  7. 验证加密结果:服务端用Master-Secret加密一段握手信息发送给客户端,客户端验证完毕则握手结束。

Q:为什么用3个随机数而不是只用第3个?

A:为了使每次的私钥生成都是随机数,如果不随机可能会被猜出来。

三、HTTP和HTTPS对比

区别:

  1. HTTP是以明文方式传输数据的,HTTPS是经过SSL\TLS加密的,更安全。
  2. HTTP默认端口80,HTTPS默认端口443。
  3. HTTPS在建立TCP连接后还要协商对称加密的密钥。
  4. HTTPS需要服务端申请证书,客户端安装对应的根证书(通过根证书表示对改证书信任)。

HTTPS优点:

  1. 安全性更高,防止数据被窃听、篡改。
  2. HTTPS可以认证(SSL证书)用户和服务器,确保数据发送到正确的地方。

HTTPS缺点:

  1. 进行HTTP会话之前,进行SSL/TLS握手 ,时延增加。
  2. 成本高。购买证书需要钱,而且有些证书不安全;加密计算也需要耗费时间。

计算机网络 part3 HTTP&HTTPS的更多相关文章

  1. 计算机网络 - HTTP和HTTPS的区别

    计算机网络 - HTTP和HTTPS的区别 http所有传输的内容都是明文,并且客户端和服务器端都无法验证对方的身份. https具有安全性的ssl加密传输协议,加密采用对称加密. https协议需要 ...

  2. 秋招C++面试相关总结索引

    C++相关 C++ part1 C++ part2 C++ part3 C++ part4 C++ part5 C++ part6 C++ part6.5 C++ part7 C++ part8 C+ ...

  3. 对https的研究

    HTTPS简介 超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,常称为HTTP over TLS,HTTP over SSL或HTTP ...

  4. ENode简介与各种教学视频资源汇总(要进群这篇文章必看)

    ENode是什么 ENode是一个.NET平台开源的应用开发框架,为开发人员提供了一套完整的基于DDD+CQRS+ES+(in-memory)+EDA架构风格的解决方案. ENode的特色是什么 解决 ...

  5. [转载] Android逃逸技术汇编

    本文转载自: http://blogs.360.cn/360mobile/2016/10/24/android_escape/ 摘    要 传统逃逸技术涉及网络攻防和病毒分析两大领域,网络攻防领域涉 ...

  6. 剑指Offer——知识点储备-网络基础

    剑指Offer--知识点储备-网络基础 计算机网络 http和https的区别 (1)http是http协议运行在tcp之上,所传输的内容都是明文,客户端和服务器端都无法验证对方的身份. (2)htt ...

  7. 500G !!史上最全的JAVA全套教学视频网盘分享 (JEECG开源社区)

    500 G JAVA视频网盘分享(JEECG开源社区) [涵盖从java入门到深入架构,Linux.云计算.分布式.大数据Hadoop.ios.Android.互联网技术应有尽有] JEECG开源社区 ...

  8. 500G JAVA视频网盘分享 (JEECG开源社区)

    500 G JAVA视频网盘分享(JEECG开源社区)   [涵盖从java入门到深入架构,Linux.云计算.分布式.大数据Hadoop.ios.Android.互联网技术应有尽有]       J ...

  9. TCP为什么要三次握手和四次挥手

    http://www.jellythink.com/archives/705 简析TCP的三次握手与四次分手 https://zhuanlan.zhihu.com/p/24001696 计算机网络面试 ...

随机推荐

  1. 使用idea插件识别log文件的相关设置

    最近要读一些spring boot项目产生的log文件,众所周知,idea拥有强大的插件系统.当我打开log文件时,idea自动帮我推荐了ideolog这个插件. 但是当我安装好之后发现系统并不能完全 ...

  2. 创建Django REST framework工程

    1.创建工程虚拟环境 2.创建工程目录和调整目录结构: 创建Django的项目 创建docs 用于存放一些说明文档资料 创建scripts 用于存放管理脚本文件 创建logs 用于存在日志 在与项目同 ...

  3. RecyclerView 源码分析(二) —— 缓存机制

    在前一篇文章 RecyclerView 源码分析(一) -- 绘制流程解析 介绍了 RecyclerView 的绘制流程,RecyclerView 通过将绘制流程从 View 中抽取出来,放到 Lay ...

  4. 【.NET 与树莓派】矩阵按键

    欢迎收看火星卫视,本期节目咱们严重探讨一下矩阵按键. 所谓矩阵按键,就是一个小键盘(其实一块PCB板),上面有几个 Key(开关),你不按下去的时候,电路是断开的,你按下去电路就会接通.至于说有多少个 ...

  5. FLask之视图

    视图 1 FBV def index(): return render_template('index.html') app.add_url_rule('/index', 'index', index ...

  6. 夯实基础系列一:Java 基础总结

    前言 大学期间接触 Java 的时间也不短了,不论学习还是实习,都让我发觉基础的重要性.互联网发展太快了,各种框架各种技术更新迭代的速度非常快,可能你刚好掌握了一门技术的应用,它却已经走在淘汰的边缘了 ...

  7. 通俗易懂的解释:什么是API

    API 全称 Application Programming Interface,即应用程序编程接口. 看到这里,急性子的小白同学马上就憋不住了:这不管是英文还是中文我每个字都懂啊,只是凑一块就不知道 ...

  8. 分布式缓存 — Docker

    Docker 是一个开源项目,它基于 Google 公司推出的 Go 语言实现. 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护. Doc ...

  9. Flink-v1.12官方网站翻译-P014-Flink Architecture

    Flink架构 Flink是一个分布式系统,为了执行流式应用,需要对计算资源进行有效的分配和管理.它集成了所有常见的集群资源管理器,如Hadoop YARN.Apache Mesos和Kubernet ...

  10. Linux 下mv和cp命令

    注意事项:mv与cp的结果不同,mv好像文件"搬家",文件个数并未增加.而cp对文件进行复制,文件个数增加了. 一.cp命令 cp命令用来将一个或多个源文件或者目录复制到指定的目的 ...