HTTP

HTTP是一个属于应用层的协议,特点是简介、快速

 

HTTP客户端发起请求,创建端口
HTTP服务器在端口监听客户端请求
HTTP服务器向客户端返回状态和内容

网络请求,页面渲染

1、域名解析
     以Chrome浏览器为例,域名解析过程:
1、Chrome搜索自身的DNS缓存

2、搜索操作系统自身的DNS缓存(浏览器没有找到缓存或缓存已经过期失效):chrome://net-internals/#dns查看DNS缓存记录

3、读取本地的HOST文件

4、浏览器发起一个DNS的一个系统调用,一般向本地主控DNS服务器

5、浏览器获得域名对应的IP地址后,发起HTTP "三次握手"

6、TCP/IP连接建立起来后,浏览器就可以向服务器发送HTTP请求了,使用了比如说,用HTTP的GET方法请求一个根域里的一个域名,协议可以采用HTTP1.0的一个协议。

7、服务器端接收到了这个请求,根据根路径参数,经过后端的一些处理之后,把处理后的一个结果的数据返回浏览器,如果是慕课网的页面就会把完整的HTML页面代码返回给浏览器。

8、浏览器拿到了慕课网的完整的HTML页面代码,在解析和渲染这个页面的时候,里面的JS、CSS、图片静态资源,它们同样也是一个个HTTP请求,都需要经过上面的主要的七个步骤。

9、浏览器根据拿到的资源对页面进行渲染,最终把一个完整的页面呈现给了用户。

运营商DNS服务器

1、宽带运营商服务器查看本身缓存

2、运营商服务器发起一个迭代的DNS解析请求

  • 运营商服务器把结果返回操作系统内核同时缓存起来
  • 操作系统内核把结果返回浏览器
  • 最终浏览器拿到了www.imooc.com对应的IP地址
浏览器以一个随机端口向服务器的Web程序发起一个TCP连接请求,此连接请求通过层层路由设备到达网卡,然后进入内核的TCP/IP协议栈(有可能经过防火墙过滤),最终到达Web服务端。

                                                                   HTTP交互过程
、客户端发送SYN同步报文给服务端
、服务端收到SYN同步报文之后,给客户端一个回复报文SYN,ACK报文
、客户端收到第二条报文之后,会再给服务端回复一个ACK报文 连接建立完成之后,客户端和服务端就可以进行正常的HTTP网络请求 、客户端发送一个HTTP请求报文到服务端
、服务端收到客户端的HTTP请求报文,处理之后把数据返回给客户端,产生第五条HTTP响应报文 当客户端和服务端之间结束网络请求之后,这条TCP连接通道就会关闭
假如断开由客户端发起,流程:
、客户端发送FIN终止信号报文
、服务端收到客户端发送的终止信号之后,服务端会回复给客户端一个ACK确认报文 当客户端收到第七条报文之后,有客户端向服务端方向的连接就已经断开 、过一段时间,服务端又会发送给客户端第八条FIN、ACK终止报文
、客户端收到第八条报文之后,会回复给服务端一条ACK确认报文,此时由服务端到客户端方向的TCP连接通道关闭。 TCP 连接通道是一个全双工的通道,并不是两条通道

Wireshark工具查看HTTP工作流程

       
                                                       HTTP消息体

        
                                                                  HTTP Request 协议格式
HTTP Request 协议格式
• {请求方法}{/相对路径} HTTP/{http版本}\r\n \r\n = CRLF
• Header-Name-:value\r\n
• Header-Name-:value\r\n
• \r\n
• Optional Request Boby

Headers:头信息

Preview:资源预览

Response:么有处理的响应的响应的正文

Cookies:请求和返回的Cookies

Timing:图形化显示每个阶段耗费的时间

Stalled:等待时间:浏览器要发出请求到请求可以发出的等待时间,一般是代理协商以及要等到TCP连接释放的时间不包含DNS查询和建立TCP连接的时间。

Proxy negotiation:代理协商的时间

Request sent:请求时间:第一个字节发出前,到最后一个字节发出后的时间,可以理解为请求时间或上传时间

Watting(TTFB):请求发出以后到收到响应的第一个字节所花费的时间,包括整个数据在路由贯穿中所延迟的时间,以及服务器端响应这个请求做的处理时间

Content Download:收到第一个字节开始到收到最后一个字节结束所花费的时间

charles工具:抓取HTTP请求和响应数据
Telnet:模拟HTTP请求
HTTPS:Hyper Text Transfer Protocol over Secure Socket Layer.基于SSL层的HTTP
HTTP与HTTPS不同之处
  • HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费;
  • HTTP是明文传输,HTTPS则是具有安全性的SSL加密传输;
  • HTTP和HTTPS使用的端口也不一样,前者是80,后者是443;
  • HTTPS可进行加密传输,身份认证,比HTTP安全。
HTTP最大特点是无连接无状态。

  • 限制每次连接只处理一个请求,服务器处理完客户的请求之后并且接收到客户端的答应后断开此连接。这种方式的最大好处是节省传输时间。HTTP1.0,早期客户端与服务端交换的间歇性较大,大部分通道处于空闲,会无端占用资源,利用这一特点设计了请求时建立连接,请求完毕后释放连接,这样可以尽快释放资源,服务其他客户端。

  • 随着时间推移,keep-alive诞生,解决效率低的问题,功能是客户端到服务端连接持续有效。当出现对服务器后续请求时,keep-alive避免了重新建立连接。也可以叫做HTTP的持久连接,可以使用同一TCP连接来发送和接受多个HTTP请求和应答。

安全套接字层SSL & 安全传输层TLS

  • SSL:Secure Sockets Layer安全套接层
  • TLS:Transport Layer Securuty 传输层安全,SSL继任者
  • TLS与SSL在传输层之上对网络连接进行加密,为网络通信提供安全及数据完整性
SSL协议
 为了解决以下风险而设计产生:

  • 所有信息都是加密传播,第三方无法窃听
  • 具有校验机制,一旦被篡改,通信双方会立刻发现
  • 配备身份证书,防止身份被冒充

           
                                                         HTTP与HTTPS架构
                                                                                 SSL连接建立过程
、客户端发送握手信息给服务端,2个内容:随机数number1,协商的加密算法(或者客户端支持的加密算法)
、服务端给予客户端响应握手信息,随机数number2,匹配好的协商加密算法(一定是客户端传给服务器端的加密算法的一个子集)
、服务端给客户端第一个响应报文之后,随即又会传递给客户端第二个响应报文,即服务端的证书
、客户端收到服务端传递的证书之后,对证书进行验证,是否有效、合法(
、客户端验证服务端证书的数字摘要和证书解密后的内容是否被篡改;
、证书链。逐级验证服务端的证书,一直到根证书是否在我们的操作系统的可信任证书列表当中。根证书会被植入到浏览器中或操作系统中)
、客户端组装会话秘钥(组装有三个内容:通过客户端自己保留的随机数number1、随机数number2,预主秘钥组装会话秘钥)
、客户端将预主秘钥通过服务端传递过来的证书里面的公钥加密,然后传递给服务端
、服务端拿到加密过的预主秘钥,通过私钥解密域主秘钥,服务端也获取到三个随机数
、服务端拿到三个随机数开始组装会话密钥
、客户端通过组装的会话密钥去加密一条消息,把加密后的握手消息传递给服务端,主要为了验证服务端能否正常接收客户端加密过的数据消息

预主密钥:由客户端产生,传递给服务端,在会话中起着非常重要的作用,配合随机数1和随机数2生成最终的会话密钥。传递的随机数和预主秘钥完全可以只有预主秘钥承担,为什么产生三个随机数:协议设计之初,假设客户端所产生的随机数不是真正的随机数,为了保证随机数的随机性,我们通过产生多个随机数来达到最终产生的秘钥具有非常好的随机性,防止被中间攻击人随意窃取。

公钥、私钥:非对称加密中的专业术语。

 对称加密算法:加密所使用的秘钥和解密所使用的秘钥相同。常见的有AES、DES。安全性差,因为需要将私钥传输给服务端。

                    对称加密
 非对称加密:使用公钥进行加密,解密使用私密的算法。常见RSA。
     

              非对称加密
请求方法

  • GET:请求获取Request-URI所标识的资源
  • POST:新创建资源,在Request-URI所标识的资源后附加新的数据
  • PUT:请求服务器存储一个资源,并用Request-URI作为其标识。向指定资源位置上传最新内容
  • DELETE:请求服务器删除Request-URI所标识的资源
  • HEAD:请求获取由Request-URI所表示的资源的响应消息报头,可以不用传入全部内容
  • TRACE
  • OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
 状态码

  • 1xx:信息响应类,表示接收到请求并且继续处理
  • 2xx:处理成功响应类,表示动作被成功接收、理解和接受
  • 3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理
  • 4xx:客户端错误,客户请求包含语法错误或者是不能正确执行
  • 5xx:服务器端错误,服务器不能正确执行一个正确的请求
 常用状态码

  • 200 OK 客户端请求成功
  • 400 Bad Request 客户端请求有语法错误,不能被服务器所理解
  • 401 Unauthorized 服务器收到请求,但是拒绝提供服务
  • 404 Not Found 请求资源不存在
  • 500 Internal Server Error 服务器发生不可预期的错误
  • 503 Server Unavailable 服务器当前不能处理客户端的请求
 URL:同一资源定位符,偏重定位,说明了通过那种协议来访问一个资源。
 URI:同一资源标识符,偏重标识,一个字符串格式规范。
 URL是URI的子集。
 

HTTP与HTTPS初识的更多相关文章

  1. 初识HTTPS

    初识HTTPS HTTPS也被叫做“基于TLS的HTTP,基于SSL的HTTP,HTTP安全“,它是一个在Internet上广泛使用的计算机网络安全通信协议. 即HTTPS是HTTP的安全版本,在了解 ...

  2. [web][nginx] 初识nginx -- 使用nginx搭建https DPI解码测试环境

    环境 CentOS 7 X86 文档: https://nginx.org/en/docs/ 安装: [root@dpdk ~]# cat /etc/yum.repos.d/nginx.repo [n ...

  3. 网络爬虫深究-初识HTTP和https常识

    网络爬虫专题--HTTP基本原理 URI和URL.URN的关系 超文本 HTTP和HTTPS URI和URL 首先,我们来了解一下URI和URL,URI,即统一资源标志符,URL,即统一资源定位符. ...

  4. Redis初识、设计思想与一些学习资源推荐

    一.Redis简介 1.什么是Redis Redis 是一个开源的使用ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的API.从2010 年 ...

  5. MongoDB【第一篇】MongodDB初识

    NoSQL介绍 一.NoSQL简介 NoSQL,全称是”Not Only Sql”,指的是非关系型的数据库. 非关系型数据库主要有这些特点:非关系型的.分布式的.开源的.水平可扩展的. 原始的目的是为 ...

  6. Android图片缓存之初识Glide

    前言: 前面总结学习了图片的使用以及Lru算法,今天来学习一下比较优秀的图片缓存开源框架.技术本身就要不断的更迭,从最初的自己使用SoftReference实现自己的图片缓存,到后来做电商项目自己的实 ...

  7. Python开发【第一篇】:初识Python

    初识python 一.python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解 ...

  8. 【读书笔记《Bootstrap 实战》】1.初识Bootstrap

    作为Web前端开发框架,Bootstrap为大多数标准的UI设计常见提供了用户友好.扩浏览器的解决方案. 1.下载Bootstrap 打开官方网址 http://getbootstrap.com/ 进 ...

  9. HTTP & HTTPs

    HTTP HTTP 消息 HTTP 方法 参考 [1]. HTTP 协议初识 - 阮一峰: HTTPS 参考 [1]. HTTPS 升级指南 - 阮一峰:

随机推荐

  1. TypeScript 学习笔记(四)

    函数: 1.函数是一组一起执行一个任务的语句 2.我们可以把一段可复用的代码放到一起组成函数,从而提高效率 3.函数声明(通过关键字 function 来声明)告诉编译器函数的名称.返回类型和参数 4 ...

  2. Linux方案级ROM/RAM优化记录

    关键词:readelf.bloat-o-meter.graph-size.totalram_pages.reserved.meminfo.PSS.procrank.maps等等. 根据项目的需求,进行 ...

  3. LG1131 「ZJOI2007」时态同步 树形DP

    问题描述 LG1131 题解 正难则反,把从一个点出发到叶子结点看做从叶子结点走到那个点. DP方程很显然. \(\mathrm{Code}\) #include<bits/stdc++.h&g ...

  4. golang数据结构之单链表

    实现单链表的增删查改. 目录如下: singleLink.go package link import ( "fmt" ) //HeroNode 链表节点 type HeroNod ...

  5. Java连载51-super关键字

    一.super关键字 我们先看一个例子 package com.bjpowernode.java_learning; ​ public class D51_ { public static void ...

  6. 新手入门:python的安装(一)

    windows下python的安装 -----因为我是个真小白,网上的大多入门教程并不适合我这种超级超级小白,有时候还会遇到各种各样的问题,因此记录一下我的安装过程,希望大家都能入门愉快,欢迎指教 - ...

  7. Python 相对路径和绝对路径--python实战(九)

    一 背景信息 最近在运行python程序的过程中,无意遇到了这个一个问题,在同事那边一直执行ok的程序,到我这里怎么都有个错误,当初报的错误是这样的: FileNotFoundError: [Errn ...

  8. 常用的app包名和类名

    应用 包名 启动类 QQ com.tencent.mobileqq com.tencent.mobileqq.activity.HomeActivity 微信 com.tencent.mm com.t ...

  9. PHP 扩展与 ZEND 引擎的整合

    PHP 扩展是对 PHP 功能的一个补充,编写完 PHP 扩展以后, ZEND 引擎需要获取到 PHP 扩展的信息,比如 phpinfo() 函数是如何列出 PHP 扩展的信息,PHP 扩展中的函数如 ...

  10. webwork遍历数组标签

    WebWork中提供了一个<ww:iterator></ww:iterator>标签用于遍历数组. 01 如果数组中是普通类型,比如String.int等类型,可以通过标签中的 ...