一、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. 前端知识(一)06 element-ui-谷粒学院

    目录 一.element-ui 二.element-ui实例 1.引入脚本库 2.引入css 3.引入js 4.渲染讲师列表 5.浏览器中运行 一.element-ui element-ui 是饿了么 ...

  2. linux串口编程

    按照对linux系统的理解,串口编程的顺序无非就是open,read,write,close,而串口有波特率.数据位等重要参数需要设置,因此还应该用到设置函数,那么接下来就带着这几个问题去学习linu ...

  3. 前端面试准备笔记之JavaScript(02)

    01. this的典型应用场景 this在各个场景中取什么值,是在函数执行的时候确认的,不是在定义的时候确认的. 普通函数执行 返回window function fn1() { console.lo ...

  4. Android 8.0/9.0 wifi 自动连接评分机制

    前言 Android N wifi auto connect流程分析 Android N selectQualifiedNetwork分析 Wifi自动连接时的评分机制 今天了解了一下Wifi自动连接 ...

  5. Linux内存 free 详解

    在Linux下,使用top命令看到内存占用情况:   Mem:  4146788k total, 3825536k used, 321252k free, 213488k buffers Swap: ...

  6. Shell从入门到精通

    熟悉基本shell操作不仅是运维的基本功,对于开发来说也是多多益善,我在学习的过程中,总结了十个练手的小demo,并附上涉及的知识点,仅供娱乐. 1. 多线程ping监控,检查同一网段的IP是否连通 ...

  7. Pod和容器的LimitRange原理和实践总结

    一.背景介绍 通常情况下,Pod中的容器可以无限制的使用节点上的CPU和内存资源,在共享资源和资源有限的情况下,若不加以限制,某个集群或命名空间的资源可能会消耗殆尽,导致其他节点上优先级低的Pod发生 ...

  8. loj10006数列分段

    题目描述 对于给定的一个长度为 N 的正整数数列 A,现要将其分成连续的若干段,并且每段和不超过 M(可以等于 M),问最少能将其分成多少段使得满足要求. 输入格式 第一行包含两个正整数 N,M表示了 ...

  9. 利用Javascript制作网页特效(图像特效)

    图像是文本的解释和说明,在网页中的适当位置放置一些图像,不仅可以使文本更加容易阅读,而且可以使网页更加具有吸引力. 当鼠标指针经过图像时图像振动效果 ①:在head标签内输入以下代码: <sty ...

  10. Java面试(解答题一)

    1.简述下列问题 List,set,map的区别 解答:List,Set都是继承自Collection接口,Map则不是: List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素 ...