day06 HTTP协议

HTTP协议

什么是http?

    HTTP 全称:Hyper Text Transfer Protocol
中文名:超文本传输协议
是一种按照URL指示,将超文本文档从一台主机(Web服务器)传输到另一台主机(浏览器)的应用层协议,以实现超链接的功能。
http协议就是将用户的请求发送到服务器,再将服务器返回的内容传输给浏览器,浏览器进行解析,解析成便于人类读取的页面

什么是超文本

    超文本:包含有超链接(Link)和各种多媒体元素标记(Markup)的文本。这些超文本文件彼此链接,形成网状(Web),因此又被称为网页(Web Page)。
这些链接使用URL表示。最常见的超文本格式是超文本标记语言HTML。

什么是URL

    URL即统一资源定位符(Uniform Resource Locator),用来唯一地标识万维网中的某一个文档。
URL由协议、主机和端口(默认为80)以及文件名三部分构成: #当我们访问 baidu.com
#实际上我们访问的是 http://www.baidu.com:80/index.html #URL: http://www.baidu.com:80/index.html
#协议: http:// https:// ftp:// ssh:// file://
#域名: www.baidu.com
#端口: :80 web服务的端口
#请求的文件: /index.html / 指的不是根目录,而是站点目录,我们可以自己指定 http 和 url 和 html 的关系
一个完整的html是由很多个URL组成的,而http是将html的内容进行传输和解析的

HTTP协议原理

为什么要使用HTTP协议:
HTTP协议是基于TCP/IP协议,主要是封装了TCP/IP协议的应用层,可以使用域名也可对它进行二次封装。 HTTP协议的原理:
HTTP其实是一个无状态的协议。 1、首先,当你在浏览器中输入一个网址的时候(https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E6%9B%BE%E8%80%81%E6%B9%BF&rsv_pq=c177c4df0026ba3e&rsv_t=e001VxO8FQ8I6s1o1i0km8IYEX2%2F7PwwkwTB6FC%2FXU9Mmwz24Z4i%2BnYoP0I&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_sug2=0&inputT=1729&rsv_sug4=1728)浏览器会帮你分析,你输入的这个URL 2、其次,浏览器会向DNS服务器请求解析,该URL中的域名www.baidu.com,解析出百度服务器所在的IP地址
3、DNS服务器,会将解析出来的IP地址110.111.112.113并返回给浏览器。
4、浏览器接收到DNS返回的IP地址,立即与该IP所在的服务器建立TCP连接(80端口)。
5、浏览器请求文档,也就是咱们常说的html页面,GET /index.html,并发出HTTP请求报文。
6、服务器给出响应,将请求的index.html文档返回给浏览器,也就是响应HTTP请求的报文。
7、TCP连接响应完之后,释放TCP连接。
8、最后就能显示出,你请求的这个页面了

访问网站分析

请求过程中是以报文的形式

#报文的内容
1.GET那一部分内容被称为:请求头信息
2.GET和HTTP之间有一个空行被称为:请求空行
3.HTTP中的信息被称为:回应信息
4.HTTP与faa之间也有个空行被称为:响应空行
5.faa部分被称为:主体 #请求头信息
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: baidu.com
> Accept: */*
> #请求空行
#回应信息
< HTTP/1.1 200 OK
< Date: Wed, 25 Nov 2020 07:53:15 GMT
< Server: Apache
< Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
< ETag: "51-47cf7e6ee8400"
< Accept-Ranges: bytes
< Content-Length: 81
< Cache-Control: max-age=86400
< Expires: Thu, 26 Nov 2020 07:53:15 GMT
< Connection: Keep-Alive
< Content-Type: text/html
< #响应空行
#主体
<html>
<meta http-equiv="refresh" content="0;url=http://www.baidu.com/">
</html>

基本信息General

#请求的URL
Request URL: http://10.0.0.7/index.html
#请求的方式
Request Method: GET
#请求的状态码
Status Code: 304 Not Modified
#请求的服务器远端地址
Remote Address: 10.0.0.7:80
#仅当协议降级(如HTTPS页面引入HTTP资源)时不发送Referrer信息。
Referrer Policy: no-referrer-when-downgrade

响应头部

#此字段的值表示可用于定义范围的单位。
Accept-Ranges: bytes
#响应过程保持长连接
Connection: Keep-Alive
#响应数据的长度
Content-Length: 2633
#响应数据的类型
Content-Type: text/html; charset=UTF-8
#响应日期
Date: Wed, 25 Nov 2020 02:17:24 GMT
#缓存文件的唯一标识符,决定走不走缓存
ETag: "a49-56b5ce607fe00"
#长连接保持的设置
Keep-Alive: timeout=5, max=100
#记录文件最后的修改时间,决定走不走缓存
Last-Modified: Fri, 04 May 2018 08:13:44 GMT
#服务器上的服务
Server: Apache/2.4.6 (CentOS) PHP/7.1.31

请求头部

#请求的文件类型
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
#请求过程支持的操作
Accept-Encoding: gzip, deflate
#请求过程支持的语言
Accept-Language: zh-CN,zh;q=0.9
#缓存控制,没有缓存
Cache-Control: no-cache
#请求过程保持长连接
Connection: keep-alive
#请求的主机地址
Host: 10.0.0.7
#缓存
Pragma: no-cache
#支持HTTPS请求加密
Upgrade-Insecure-Requests: 1
#客户端信息
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36

HTTP协议版本号

HTTP 协议版本号
HTTP 1.0 : 短链接
HTTP 1.1 :长连接

HTTP的状态码

1xx	:通知信息    # 服务器正在处理客户请求
2xx : 请求成功 # 请求成功(ok)
3xx :重定向 # 页面改变了位置
4xx :客户端错误 # 403:没权限
5xx :服务端错误 # 服务器内部错误
重定向(Redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向) 需要记住的:
200 :成功
301 :永久重定向
302 :临时重定向
304 :本地缓存
307 :内部重定向
400 :客户端错误
401 :认证失败
403 :找不到主页,权限不足
404 :找不到页面
500 :内部错误
502 :找不到后端主机
503 :服务器过载
504 :后端主机超时 常用的状态码:
301—永久移动。被请求的资源已被永久移动位置;
302—请求的资源现在临时从不同的 URI 响应请求;
305—使用代理。被请求的资源必须通过指定的代理才能被访问;
307—临时跳转。被请求的资源在临时从不同的URL响应请求;
400—错误请求;
402—需要付款。该状态码是为了将来可能的需求而预留的,用于一些数字货币或者是微支付;
403—禁止访问。服务器已经理解请求,但是拒绝执行它;
404—找不到对象。请求失败,资源不存在;
406—不可接受的。请求的资源的内容特性无法满足请求头中的条件,因而无法生成响应实体;
408—请求超时;
409—冲突。由于和被请求的资源的当前状态之间存在冲突,请求无法完成;
410—遗失的。被请求的资源在服务器上已经不再可用,而且没有任何已知的转发地址;
413—响应实体太大。服务器拒绝处理当前请求,请求超过服务器所能处理和允许的最大值。
417—期望失败。在请求头 Expect 中指定的预期内容无法被服务器满足;
418—我是一个茶壶。超文本咖啡罐控制协议,但是并没有被实际的HTTP服务器实现;
420—方法失效。
422—不可处理的实体。请求格式正确,但是由于含有语义错误,无法响应;
500—服务器内部错误。服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理;

HTTP流程总结

原理总结

1.用输入域名 - > 浏览器跳转 - > 浏览器缓存 - > Hosts文件 - > DNS解析(递归查询|迭代查询)
客户端向服务端发起查询 - > 递归查询
服务端向服务端发起查询 - > 迭代查询
2.由浏览器向服务器发起TCP连接(三次握手)
客户端 -->请求包连接 -syn=1 seq=x 服务端
服务端 -->响应客户端syn=1 ack=x+1 seq=y 客户端
客户端 -->建立连接 ack=y+1 seq=x+1 服务端
3.客户端发起http请求:
1)请求的方法是什么: GET获取
2)请求的Host主机是: blog.driverzeng.com
3)请求的资源是什么: /index.html
4)请求的端端口是什么: 默认http是80 https是443
5)请求携带的参数是什么: 属性(请求类型、压缩、认证、浏览器信息、等等)
6)请求最后的空行
4.服务端响应的内容是
1)服务端响应使用WEB服务软件
2)服务端响应请求文件类型
3)服务端响应请求的文件是否进行压缩
4)服务端响应请求的主机是否进行长连接
5.客户端向服务端发起TCP断开(四次挥手)
客户端 --> 断开请求 fin=1 seq=x --> 服务端
服务端 --> 响应断开 fin=1 ack=x+1 seq=y --> 客户端
服务端 --> 断开连接 fin=1 ack=x+1 seq=z --> 客户端
客户端 --> 确认断开 fin=1 ack=x+1 seq=sj --> 服务端

用户访问集群架构的流程

1.客户端发起http请求,请求会先抵达前端的防火墙
2.防火墙识别用户身份,正常的请求通过内部交换机通过tcp连接后端的负载均衡,传递用户的http请求
3.负载接收到请求,会根据请求的内容进行下发任务,通过tcp连接后端的web,转发发用户的http请求
4.web接收到用户的http请求后,会根据用户请求的内容进行解析,解析分为如下:
静态请求:web直接返回给负载均衡->防火墙->用户
动态请求:web向后端的动态程序建立TCP连接,将用户的动态http请求传递至动态程序->由动态程序进行解析
5.动态程序在解析的过程中,如果碰到查询数据库请求,则优先与缓存建立tcp连接,并发起数据查询操作。
6.如果缓存没有对应的数据,动态程序再次向数据库建立tcp连接,并发起查询操作。
7.最后数据由, 数据库->动态程序->缓存->web服务->负载均衡->防火墙->用户。

HTTP相关术语

pv、uv、ip

假设公司有一座大厦,大厦有100人,每个人有一台电脑和一部手机,上网都是通过nat转换出口,每个人点击网站2次, 请问对应的pv,uv,ip分别是多少?

 PV : 页面独立浏览量
UV : 独立设备
IP : 独立IP 那么上面的题:
PV: 100*2*2 = 400
UV: 1002*2 = 200
IP: 1 日PV千万量级并不大

SOA松耦合架构

面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。

#一个电商公司,他的网站页面功能会有很多
注册
登录
首页
详情页
购物车
价格标签
留言
客服
支付中心
物流
仓储信息
订单相信
图片

day06 HTTP协议的更多相关文章

  1. day06 Request Response

    rw 读写模板的设置 day05 Request Response 1. HttpServletResponse 简介 1.1 Response 的 OutputStream 输出中文的问题 1.2 ...

  2. HTTP协议基础与web服务的重定向,跳转以及请求转发

    JavaWeb中,HttpServletRequest与HttpServletResponse几乎是处理各种请求与操作必备的参数,与原始的ServletRequest/ServletResponse相 ...

  3. Day09: socket网络编程-OSI七层协议,tcp/udp套接字,tcp粘包问题,socketserver

    今日内容:socket网络编程    1.OSI七层协议    2.基于tcp协议的套接字通信    3.模拟ssh远程执行命令    4.tcp的粘包问题及解决方案    5.基于udp协议的套接字 ...

  4. HTTP协议系列(1)

    一.为什么学习Http协议       首先明白我们为什么学习HTTP协议,也就是说明白HTTP协议的作用.HTTP协议是用于客户端与服务器之间的通讯.明白了HTTP协议的作用也就知道了为什么要学习H ...

  5. 重温Http协议--请求报文和响应报文

    http协议是位于应用层的协议,我们在日常浏览网页比如在导航网站请求百度首页的时候,会先通过http协议把请求做一个类似于编码的工作,发送给百度的服务器,然后在百度服务器响应请求时把相应的内容再通过h ...

  6. 协议森林17 我和你的悄悄话 (SSL/TLS协议)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. TLS名为传输层安全协议(Transport Layer Protocol),这个协议是一套加密的 ...

  7. 协议森林16 小美的桌号(DHCP协议)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. DHCP协议用于动态的配置电脑的网络相关参数,如主机的IP地址,路由器出口地址.DNS域名服务器地 ...

  8. 简约之美Jodd-http--深入源码理解http协议

    Jodd 是一个开源的 Java 工具集, 包含一些实用的工具类和小型框架.简单,却很强大! jodd-http是一个轻巧的HTTP客户端.现在我们以一个简单的示例从源码层看看是如何实现的? Http ...

  9. 【JavaScript】javascript中伪协议(javascript:)使用探讨

    javascript:这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行. 比如下面这个死链接: <a href="javasc ...

随机推荐

  1. 像素设定 牛客网 程序员面试金典 C++ Python

    像素设定 牛客网 程序员面试金典 题目描述 有一个单色屏幕储存在一维数组中,其中数组的每个元素代表连续的8位的像素的值,请实现一个函数,将第x到第y个像素涂上颜色(像素标号从零开始),并尝试尽量使用最 ...

  2. Envoy实现.NET架构的网关(五)集成Redis实现限流

    什么是限流 限流即限制并发量,限制某一段时间只有指定数量的请求进入后台服务器,遇到流量高峰期或者流量突增时,把流量速率限制在系统所能接受的合理范围之内,不至于让系统被高流量击垮.而Envoy可以通过e ...

  3. CentOS7 安装oracle 11g (11.2.0.1.0)

    1.安装依赖: #yum -y install binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ks ...

  4. Spark记录(一):Spark全景概述

    一.Spark是什么 Spark是一个开源的大数据处理引擎. 二.Spark的主要组件如下图所示:  三.Spark运行时架构 Spark共有三种运行模式:本地模式.集群模式.客户端模式. 生产环境基 ...

  5. kvm 安装 windows 虚拟机

    作者:SRE运维博客 博客地址: https://www.cnsre.cn/ 文章地址:https://www.cnsre.cn/posts/211108848062/ 相关话题:https://ww ...

  6. node.js中模块和包

    node.js中模块和包 什么是模块 如何创建并加载模块 1. 创建模块 2. 单次加载 3. 覆盖 exports 如何创建一个包 1. 作为文件夹的模块 2. package.json 如何使用包 ...

  7. Python 数据类型常用的内置方法(二)

    目录 Python 数据类型常用的内置方法(二) 1.字符串类型常用内置方法 1.upper.lower.isupper.islower 2.startswith.endswith 3.format ...

  8. ECharts 点击事件

    一个问题 ECharts 点击出现多个弹窗

  9. java 邮件 接收与发送

    ... package com.e6soft; import java.io.BufferedReader; import java.io.FileOutputStream; import java. ...

  10. 2014年3月5日C#训练

    using System; class Program { static void Main() { Console.WriteLine("请输入两个整数:"); int a = ...