WEB基础和HTTP协议

2,963 阅读13分钟

web基础

域名的概述

域名的概念

  • ip地址不易记忆

早期使用Hosts文件解析域名

  • 主机名称重复
  • 主机维护困难

DNS(Domain Name System 域名系统)

  • 分布式:多系统处理一个
  • 层次性:dns解析过程,比如一级域寻找二级域

域名空间结构

  • 根域
  • 顶级域:组织域,国家/地区域名
  • 二级域名
  • FQDN=主机名.DNS后缀

image.png

域名注册

  • 域名注册是internet中用于解决地址对应问题的一种方法
  • 遵循先申请先注册原则
  • 域名注册步骤:

image.png

网页的概念

网页

纯文本格式文件 其编写语言为HTML 在用户的浏览器中被“翻译”成网页形式显示出来

网站

由一个一个页面构成的,是多个网页的结合体

主页

打开网站后出现的第一个网页成为网站主页(或首页)

域名

浏览网页时输入的网址

HTTP

用来传输网页的通信协议(http:80端口,https:443端口)

URL

是一种万维网寻址系统

HTML

用来编写网页的超文本标记语言

超链接

超链接是将网站中不同网页连接起来的功能

发布

将制作好的网页上传到服务器供用户访问的过程

HTML概述

HTML超文本标记语言

  • Hyper text markup language
  • 网页的“源码”
  • 浏览器:“解释和执行” HTML源码的工具

HTML文本的结构

  • HTML网页
  • 头部部分
  • 标题部分
  • 主体部分
  • 网页内容,包括文本、图像等

image.png

头标签中常用标签

标签描述
title定义了文档的标题
base定义了页面链接标签的默认链接地址
link定义了一个文档和外部资源之间的关系
meta定义了HTML文档中的元数据
script定义了客户端的脚本文件
style定义了HTML文档的样式文件

内容标签中常用标签

标签描述
table定义了一个表格
tr定义了表格中的一行
td定义了表格中某一行的一列
img定义了一个图像
a定义了一个超链接
p定义了一行
br定义了换行
font定义了字体

网页基本标签

  • 标题标签
  • 行控制相关标签
  • 范围标签
  • 图像标签
  • 超链接标签
  • 特殊符号

web概述

  • web (world wide web)即全区广域网,也称为万维网
  • 一种分布式图形信息系统
  • 建立在Internet上的一种网络服务

Web1.0 vs Web2.0

Web 1.0

  • 以编辑为特征,网站提供给用户的内容是编辑处理后提供的,然后用户阅读网站提供的内容。
  • 这个过程是网站到用户的单向行为

Web 2.0

  • 更注重用户的交互作用,用户近视网站内容的消费者(浏览者),也是网站内容的制造者
  • 加强了网站与用户之间的互动,网站内容基于用户提供,网站的诸多功能也由用户参与建设,实现了网站与用户双向的交流与参与
  • Web2.0特性
  • 用户分享,以兴趣为聚合点的社群。开放的平台。活跃的用户

静态网页

  • 静态网页是标准的HTML文件
  • 扩展名是.htm、.html:文本、图像、声音、FLASH动画、客户端脚本和Activex控件及JAVA小程序等
  • 是网站建设的基础,早期网站一般都有静态网页制作
  • 没有后台数据库、不含程序和不可交互的网页
  • 相对更新起来比较麻烦,适用于一般更新较少的展示型网站

静态网页特点

  • 每个静态网页都有一个固定的URL,且URL以.htm、.html、.shtml等常见形式为后缀,而不含有“?”
  • 网页内容一经发布到网站服务器上,无论是否有用户访问,每个静态网页都是保存在网站服务器上的,也就是说,静态网页是实实在在保存在服务器上的文件,每个网页都是一个独立的文件
  • 静态网友的内容相对稳定,因此容易被搜索引擎检索
    • 静态网页没有数据库的支持,在网站制作和维护方面工作量较大,因此当网站信息量很大时完全依靠静态网页制作方式比较困难
  • 静态网页的交互性较差,在功能方面有较大的限制
  • 页面浏览速度迅速,过程无需连接数据库,开启页面速度快于动态页面

动态网页

  • 网页URL不固定,能通过后台与用户交互
  • 在动态网页网址中有一个标志性的符号:“?”
  • 常用的语言有PHP、JSP、Python、Ruby等

动态网页的特点

  • 交互性

即网页会根据用户的要求和选择而动态改变和响应,将浏览器作为客户端界面,这将是今后WEB发展的大势所趋

  • 自动更新

无须手动地更新HTML文档,便会自动生成新的页面,可以大大节省工作量

  • 因时因人而变

当不同的时间,不同的人访问同一网址时会产生不同的页面

HTTP协议

HTTP协议概述

  • HTTP协议是互联网上应用最为广泛的一种网络协议,设计这个协议的目的是为了发布和接受web服务器上的HTML页面。
  • HTTP协议的版本
  1. HTTP 0.9(已过时)
  2. HTTP 1.0(常用)
  3. HTTP 1.1(常用)
  4. HTTP 2.0
  • HTTP/HTTPS是应用层上的协议,建立在传输层TCP之上,客户端通过与服务端进行TCP连接(三次握手)之后,发送HTTP请求与接收HTTP响应都是通过访问Socket接口来调用TCP协议实现
  • HTTP是一种无状态(stateless)协议,即一直访问都是一个样,(比如进入淘宝主页,一直刷新都是同一个样子),HTTP本身不会对发送过的请求和相应的通信状态进行持久化处理(存储、保存)。这样做的目的是为了保持HTTP的简单性
  • 由于HTTP是无状态协议,所以必须要引进一些技术来记录管理状态
  1. cookie:省服务器性能
  2. session:更安全,为后面服务、集群、功能优化做铺垫,具体解释了怎么解决HTTP无状态协议的持久化、存储

cookie和session都是都是为了实现的是HTTP的短期的持久化(内存/缓存方式,查询快、效率比较快),cookie是先保存在用户端(client)浏览器中的(默认缓存一天),当下次客户端通过同一个浏览器访问客户端的时候,会优先读取cookie中的缓存信息,向服务端进行请求,同时服务端收到客户端请求的时候,,读取到cookie文件,知道客户端之前找的是哪一台服务器处理的任务,为了节省时间,节省性能,还是交给这一台服务器处理

HTTP 1.0和 HTTP 1.1之间的区别

  • 缓存处理

在HTTP 1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entitytag,If-Unmodified-Since,If-Match,If-None-Match,等更多可供选择的缓存头来控制缓存策略

  • 带宽优化及网络连接的使用

HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partialcontent),这样就方便了开发者自由的选择以便于充分利用带宽和连接

  • 错误通知的管理

在HTTP1.1中新增了24个错误状态响应码,如409(conflict)表示请求的资源与资源的当前状态发生冲突,10(Gone)表示服务器上的某个资源被永久性的删除

  • Host头处理

在HTTP1.0中认为每台服务器都绑定一个唯一的地址,因此,请求消息中的RZ并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-home web Servers),并且它们共享一个le地址,HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有inost头域会报告一个错误(400 BadReq uest)

  • 长连接

HTTP1.1支持长连接〈Persistentconnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启connection:keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点

HTTP请求格式

  • HTTP支持几种不同的请求命令,这些命令被称为HTTP方法(HTTP method)
  • 每条HTTP请求报文都包含一个方法,败诉服务器要执行什么动作
  1. 获取一个Web页面
  2. 运行一个网关程序
  3. 删除一个文件等

请求方法

HTTP方法描述
GET请求获取Request-URI所标识的资源
PUT请求服务器存储一个资源,并用Request-URI作为其标识
DELETE请求服务器删除Request-URI所标识的资源
POST在Request-URI所标识的资源后附加新的数据
HEAD请求获取由Request-URI所标识的资源的响应消息报头
  • 常用的方法:GET和POST

GET方法

GET方法:从指定的服务器上获得数据

  • 请求行
  1. 请求的方式
  2. 请求的资源路径
  3. 请求的版本协议号
  • 请求头(描述信息/标准化信息)
  1. Accept:客户端可以接受的数据类型
  2. Accept-Language:客户端可以接受的语言类型
  3. User-Agent:浏览器的信息
  4. Accpect-Encoding:客户端可以接受的编码格式
  5. Host:表示请求的ip和端口号
  6. Connection:告诉服务器清求连接如何处理
  7. Keep-Alive:通知服务器回传数据不要马上关闭,保持一小段的连接
  8. Closed:马上关闭

POST方法

POST方法:提交数据给指定的服务器处理

  • 请求行
  1. 请求的方式
  2. 请求的资源路径
  3. 请求的版本协议号
  • 请求头(描述信息/标准化信息)
  1. Accept:客户端可以接受的数据类型
  2. Accept-Language:客户端可以接受的语言类型
  3. Referer.表示请求发起时,浏览器地址栏中的地址
  4. User-Agent:浏览器的信息
  5. Content-Type:发送的内容类型
  6. Content-Length:发送的数据长度数据类型
  • 请求体:就是发送给服务器的数据

GET与POST区别

  • 语义上的区别
  1. GET向服务器请求数据,依照HTTP协议,get是用来请求数据
  2. POST向服务器发数据,依照HTTP协议,post的语义是向服务器添加数据,也就是按照post语义,该操作是会修改服务器上的数据
  • 服务器请求的区别
  1. GET请求是可以被缓存,示例:访问百度,访问的方式就是GET,此时访问后的内容会缓被存在浏览器中,短时间再次访问,其实是拿到的浏览器中的缓存内容。GET请求只能接收ASCII码的回复
  2. POST请求是不可以被缓存的。对于用OST方式提交表单,刷新页面浏览器会弹出提示框"是否重新提交表单",POST可以接收二进制等各种数据形式,所以如果要上传文件一般用POST请求
  • 参数请求头和请求体的差别
  1. GET请求通常没有请求体(当然这也是可以由程序猿心情改变的),在TCP传输中只需传输一次(而不是一个包),所以GET请求效率相对高。
  2. POST请求将数据放在请求体中,而实际传输中,会先传输完请求头,再传输请求体,是分为两次传输的(而不是两个包)。
  3. POST请求头会比GET更小(一般不带参数),请求头更容易在一个TCP包中完成传输,更何况请求头中有Content-Length的标识,可以更好地保证HTTP包的完整性。

简单理解两者的区别

GET方法

  • get请求能被缓存
  • get请求会保存在浏览器的浏览记录里
  • get请求有长度的限制
  • 主要用于获取数据
  • 查询的字符串会显示在URL中,不安全

POST方法

  • POST请求不能被缓存
  • post请求不会保存在浏览器的浏览记录里
  • post请求没有长度限制
  • 查询的字符串不会显示在URL中,比较安全

HTTP状态码

  • 当使用浏览器访问某一个URL,会根据请求URL返回状态码
  • 通常正常的状态码为2xx,3xx(如200)
  • 如果出现异常会返回4xx,5xx(如404)
态码首位已定义范围分类
1xx100-101信息提示
2xx200-206成功
3xx300-305重定向
4xx400-415客户端错误
5xx500-505服务器错误

生产环境常见的HTTP状态码

消息描述
200 OK请求成功(其后是对GET和POST请求的应答文档)
301 Moved Permanently请求的永久页面跳转
403 Forbidden禁止访问该页面
404 Not Found服务器无法找到被请求的页面
500 Internal Server Error内部服务器错误
502 Bad Gateway无效网关
503 Service Unavailable当前服务不可用
504 Gateway Timeout网关请求超时

HTTP协议请求流程分析

  1. 用户输入URL(地址链接)
  2. 客户端获取到端口及主机名后,客户端利用DNS解析域名
  3. 首先客户端的浏览器会先找自身的缓存,如果有解析结束如果没有客户端会去找host文件文件没有的话,客户端会去找本地的DNS缓存服务器本地的DNS缓存服务器没有的话,缓存服务器会去找根域根域没有,会返回一个.com.然后本地缓存服务器会去找顶级域,顶级域没有的话会返回baidu.com.,然后本地缓存服务器会去找二级域,二级域解析完后会返回客户端
  4. 客户端解析到地址后会通过TCP的三次握手与服务器建立连接

总结

  • 最基本的HTTP 1.0和 HTTP 1.1之间的区别要了解
  • 生产环境中http的状态码很重要,要牢记
  • http请求流程涉及到了很多之前博客说的很多基础知识,很浮躁,要完全说明很难