一、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. 虚拟化kvm的搭建

            虚拟化, 是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机 ,在一台计算机上同时运行多个逻辑计算机,每台逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不 ...

  2. git的使用学习笔记4--创建分支

    1.在git上新建分支 查看本地分支 git branch 查看远程分支 git branch -a 创建一个分支 git checkout -b branch1 再次查看远程分支可以看到该分支 2. ...

  3. 能够满足这样要求的哈希算法有很多,其中比较著名并且应用广泛的一个哈希算法,那就是MurmurHash 算法。尽管这个哈希算法在 2008 年才被发明出来,但现在它已经广泛应用到 Redis、MemCache、Cassandra、HBase、Lucene 等众多著名的软件中。

    能够满足这样要求的哈希算法有很多,其中比较著名并且应用广泛的一个哈希算法,那就是MurmurHash 算法.尽管这个哈希算法在 2008 年才被发明出来,但现在它已经广泛应用到 Redis.MemCa ...

  4. WebRTC 泄漏真实 IP 地址

    WebRTC(网页即时通信,Web Real-Time Communication) 它允许浏览器内进行实时语音或视频对话,而无需添加额外的浏览器扩展.包括 Chrome.Firefox.Opera. ...

  5. Vim配置及其他注意事项

    常用的一些配置 set t_ti= set t_te= "这两个比较特殊,后边说 set termencoding=utf-8 set encoding=utf-8 set fileenco ...

  6. 回归(Regression)

    回归(Regression) 生活中的很多事物之间是相互影响的,如商品的质量跟用户的满意度密切相关.而回归分析是要分析两个事物间的因果关系,即哪一个是自变量和因变量,以及自变量和因变量之间的关系:回归 ...

  7. Weblogic漏洞利用

    Weblogic漏洞 Weblogic任意文件上传(CVE-2018-2894) 受影响版本 weblogic 10.3.6.0.weblogic 12.1.3.0.weblogic 12.2.1.2 ...

  8. java架构《并发线程高级篇一》

    本章主要记录讲解并发线程的线程池.java.util.concurrent工具包里面的工具类. 一:Executor框架: Executors创建线程池的方法: newFixedThreadPool( ...

  9. CVE-2018-4407(IOS缓冲区溢出漏洞)exp

    CVE-2018-4407为ios缓冲区溢出漏洞 exp: import scapyfrom scapy.all import * send(IP(dst="同一局域网内目标Ip" ...

  10. centos安装、升级新火狐最新版 31

    1.登录火狐主页 下载最新版本firefox-31.0.tar.bz2 解压: tar -jxvf firefox-31.0.tar.bz2 2.然后把旧版本的firefox卸掉 # yum eras ...