HTTP详解

URL构成:协议://域名:port
80 http
443 https

HTTP协议
超文本传输协议(HTTP)是一种通信协议,它是一个简单的请求响应协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器.
. HTTP协议是一个属于应用层的面向对象的协议,它通常运行在TCP之上。
. HTTP协议是构建在TCP/IP协议之上的,它是TCP/IP协议的一个子集。
实例理解:打电话
电话簿中的姓名–域名
电话号码IP地址
双方共用的语吉–HTIP协议

Web与HTTP
Web是一种基于超文本和HTTP的、 全球性的、动态交互的、跨平台的分布式图形信息系统
网站是一种建立在internet上的一种网络服务,为浏览者在intermet H查找和浏览信息提供了图形化的、易于访问的、可视化的只管界面,其中的文档及超级链接将internet上的信息节点组成个 互相关联的网状结构。
HTTP协议前世今生
1990.10万维网之父Tim Bemes-Lee最早的提出了HTTP协议
1991年HT TPO 9诞生,弱化的协议,只有GET请求,只能传输HTML的格式
1996年5月HTTP1.0发布,更多的请求方法,如POST、 HEAD, 更多的功能,如支持状态码,缓存、重定向等
1997年1月HTTP1. 1发布(目前在用)更加完善的请求方法,OPTIONS,DELETE, PUT,TRACE CONNECT等,也引入了分块传输,目前主流的协议版本。
2015年5月HTTP2 0提出
HTTP3.0,QUIC协议
TCP/IP协议族
透过TCP/P看HTTP协议
HTTP协议是构建在TCP/IP协议之上的,它是TCPIP协议的一个子集。
TCP/IP协议族
TCP/IP协议其实是一系列与互联网相关联的协议集合起来的总称。
分层管理是TCP/IP协议的重要特征
在这里插入图片描述
HTTP协议特点
1、只支持客户/服务器模式,也就是客户端发起请求,服务端响应请求。
2、简单快速:客户端向服务端发起请求时,只需要请求方法和路径
常用的请求方法,GET、POST、HEAD等,请求方法决定了客户端与服务器联系方式的不同。由于HTTP协议的简单,使得HTTP服务器的程序规模小,因而速度很快
3、灵活
允许传输任意类型的数据类型,
正在传输的类型由Content-Type (HTTP包中用来表示内容类型的标识)加以标记
4、无连接
无连接即是限制每次处理一个请求。
服务端处理完客户端的请求,并收到应答后断开连接。
可以设置超时,也可以keep- alive来保持连接
这样可以介绍传输时间,节省资源占用。
5、无状态.
HTTP协议是无状态协议
无状态是指协议对事务处理的能力是没有记忆里的。缺少状态意味着如果后续再次使用,需要再次重新传输,
这样会导致每次链接后的数据量的增大
服务器不需要先前信息时,它应答就比较快
它利用cookie及session技术维持简单的连接。
HTTP请求方法
HTTP/1.1协议中共定义了八种方法或者叫”动作”来表明对Request-URI指定的资源的不同操作方式,以下为常用的8种: .
●OPTIONS:返回服务器所支持的HTTP请求方法。
●HEAD:与GET请求相一致的响应,但只返回头部信息,响应体将不会被返回。
●GET:向特定的资源发出请求。
●POST:向指定资源提交数据进行处理请求。数据被包含在请求体中。
●PUT:向指定资源位置上传其最新内容。
●DELETE:请求服务器删除指定资源。
●TRACE:回显服务器收到的请求,主要用于测试或诊断
● CONNECT:开启客户端与请求资源之间的双向通道,它可以用来创建隧道(代理)
HTTP会话管理:
由于http的特性(无状态)衍生出来的机制
会话跟踪技术: cookie 与session
Cookie:
cookie实际上是一小段的文本信息。 客户端请求服务器,如果需要服务器记录该用户状态,那么服务器就向客户端浏览器颁发个Cookie
客户端会把收到的Cookie保存起来,当浏览器再次请求该网站时,浏览器把请求的网站联通该Cookie-同提交给服务器, 服务器会检查Cookie,以此判断用户状态
在这里插入图片描述
Cookie是具有时效性的,一般较长
Session:
Session是另一 种记录客户端状态的机制, 保存在服务器上,客户端访问服务器的时候服务端把客户端信息以某种方式,记录在服务器上。
客户端浏览器再次访问时,只需要从该Session中查找客户端的状态就可以了
session ID是在服务端中的唯一的
第一次访问,服务端(启用session功能)会检查请求中是否有sessionid没有就创建一 个唯一 的id, 并保存,并返回给客户端保存,保存id的就是cookie
session与cookie微妙关系
在这里插入图片描述
session的保存方式:
. Cookie保存
. URL 重写,也就是把sessionID附加在ur路径后面
http://…/xxx;Sessionid=ByOK3vjFD75aPnrF7C2HmdnV6
QZcEbzWoWiBYEnLerjQ99zWpBng!- 145788764
http:/…/xxx?Sessionid=ByOK3vjFD75aPnrF7C2HmdnV
6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
. 隐藏表单,服务器自动修改表单,添加一个隐藏字段, 以便表单将Session传到服务器
时效性:
自动注销: session超时失效,服务器为了防止缓冲区溢出,服务器会把超时的客户端删除
Cookie与Session的区别:
存放位置不同,cookie存 储在客户端,Session存储在服务 端
安全性不同。
有效期不同,cookie会 长于Session
对服务器压力不同
DNS介绍
在了解请求过程时,我们需要先了解一个DNS服务的概念,通常访问网站是通过IP或者域名来进行,与IP相比,域名更加方便记忆,但是TCP/IP协议使用IP进行访问,那么此时就需要一种功能或机制来将域名转换为IP地址, 而DNS服务就是用来解决这个问题的,它主要提供了域名到IP的解析服务。
DNS使用TCP和UDP端口53。全球有13台DNS根服务器。

1、域名解析
首先浏览器会解析域名(准确的叫法应该是主机名)得到对应的IP地址,那怎么解析到对应的IP地址?
①浏览器会首先搜索浏览器自身的DNS缓存(缓存时间比较短,大概只有1分钟,且只能容纳1000条缓存) ,看自身的缓存中是否有该域名对应的条目,而且没有过期,如果有且没有过期则解析到此结束;
②如果浏览器自身的缓存里面没有找到对应的条目,那么浏览器会搜索操作系统自身的DNS缓存,如果找到且没有过期则停止搜索解析到此结束;
③如果在Windows系统的DNS缓存也没有找到,那么尝试读取hosts文件(位于
C:\Windows\System32ldrivers\etc),看看这里面有没有该域名对应的IP地址,如果有则解析成功;
④如果在hosts文件中也没有找到对应的条目,浏览器就会发起一一个DNS的系统调用,就会向本地配置的首选DNS服务器(- -般是电信运营商提供的,也可以使用像Google提供的DNS服务器)发起域名解析请求(通过的是UDP协议向DNS的53端口发起请求,这个请求是递归的请求,也就是运营商的DNS服务器必须得提供给我们该域名的IP地址),运营商的DNS服务器首先查找自身的缓存,找到对应的条目,且没有过期,则解析成功。如果没有找到对应的条目,则有运营商的DNS代我们的浏览器发起迭代DNS解析请求,它首先
是会找根域的DNS的IP地址(这个DNS服务器都内置13台根域的DNS的IP地址),然后进一步请求;正常情况下通过这四步基本就能解析域名获得IP了。
2、发起TCP的3次握手
拿到域名对应的IP地址之后,User-Agent (- 般是指浏览器)会以-个随机端口(1024 <端口< 65535)向服务器的WEB程序的80端口发起TCP的连接请求。这个连接请求(原始的HTTP请求经过TCPIP4层模型的层层封包)到达服务器端后(这中间通过各种路由设备,局域网内除外),进入到网卡,然后是进入到内核的TCP/IP协议栈(用于识别该连接请求,解封包,一层- - 层的剥开),还有可能要经过Netfiter防火墙(属于内核的模块)的过滤,最终到达WEB程序
3、建立TCP连接后发起HTTP请求
经过TCP3次握手之后,浏览器发起了http的请求
4、服务器端响应HTTP请求,浏览器得到html代码
服务器端WEB程序接收到http请求以后,就开始处理该请求,处理之后就返回给浏览器html文件
5、浏览器解析html代码,并请求htm|代码中的资源
浏览器拿到htm|文件后,就开始解析其中的html代码,遇到js/css/image等静态资源时, 就向服务器端去请求下载(会使用多线程下载,每个浏览器的线程数不-样),这个时候就用 上keep- alive特性了,建立一次HTTP连接,可以请求多个资源,下载资源的顺序就是按照代码里的顺序,但是由于每个资源大小不一样,而浏览器又多线程请求请求资源,所以请求成功显示的顺序并不一定是代码里面的顺序。浏览器在请求静态资源时(在未过期的情况下),向服务器端发起一个http请求 (询问自从上一次修改时间到现在有没有对资源进行修改),如果服务器端返回304状态码(告诉浏览器客户端没有修改),那么浏览器会直接读取本地的该资源的缓存文件。
6、浏览器对页面进行渲染呈现给用户
浏览器利用自己内部的工作机制,把请求到的静态资源和html代码进行渲染,渲染之后呈现给用户。
在这里插入图片描述
HTTP会话与管理: Cookie与Session
Cookie和session是由于HTTP无状态特性延伸出来的一种 用来维持会话状态的会话跟踪技术
在这里插入图片描述
HTTP请求报文
1、组成
一个HTTP请求报文由四个部分组成:请求行、请求头部、空行、请求数据。
2、服务器端响应http请求,浏览器得到htmI代码
请求行由请求方法字段、URL 字段和HTTP协议版本字段3个字段组成,它们用空格分隔。比如GET /data/info.html HTTP/1.1
方法字段就是HT TP使用的请求方法,比如常见的GET/POST
其中HTTP协议版本有两种: HTTP1.0/HTTP1.1 可以这样区别:
HTTP1.0对于每个连接都只能传送一个请求和响应, 请求就会关闭,HTTP1.0没有Host字段;而HTTP1.1在同一个连接中可以传送多个请求和响应,多个请求可以重叠和同时进行,HTTP1.1必须有Host字段。
3、空行
它的作用是通过一个空行, 告诉服务器请求头部到此为止。
4、请求数据
若方法字段是GET,则此项为空,没有数据
若方法字段是POST,则通常来说此处放置的就是要提交的数据
比如要使用POST方法提交一个表单, 其中有user字段中数据为“admin", password字段为123456,那么这里的请求数据就是user=admin&password=123456,使用&来连接各个字段。
HTTP报文头大体分为四类:
通用报文头
请求报文头
响应报文头
实体报文头
另外在HTTP/1.1中共有47种报文头字段
服务器响应消息
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ACCEPT:
作用:浏览器可以接受的媒体类型
Accept: text/html
代表浏览器可以接收服务端响应的类型为html格式,如果无法返回,返回406错误。
Accept: /
浏览器可以处理所有类型的请求。
Accept-Encoding:
浏览器声明自己接收的编码方法,通常是指压缩方法,否支持压缩,使用什么方法压缩(gzip、 deflate) 。
Accept- Language:
浏览器声明自己接收的语言。
Accept-Language: zh-cn,zh,q=0.7 .en-us,en;1=0.3
客户端要求服务端有中文版资源的时候,返回中文版对应的响应,没有则返回英文版,
CONNECTION:
作用:处理完这次请求后是否断开连接还是继续保持连接。
Connection: keep:alive
当网页打开完成后,客户端和服务端之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问服务器上的网页,会继续使用这条末断开的连接
Connection: close
当网页打开完成后,客户端和服务端之间用于传输HTTP数据的TCP连接关闭,如果客户端再次访问服务器上的网页,需要继续新建一个TCP连接
HOST:
作用:请求头中主要用于请求资源的主机地址和端口号,它通常是在URL中提取出来的。
例如:
我们在浏览器中请求ttp://77169.com:8080
那么请求头中
Host: 77169.com:8080
Referer:
客户机通过这个头告诉服务器,它是从哪个资源来访问服务器的防盗链)。包含- -个URL,用户从该URL代表的页面出发访问当前请求的页面。
User-Agent:
作用:告诉服务器,当前用户使用什么操作系统,浏览器是什么版本及型号
通常情况下User Agent来判断浏览器的类型,从而进行兼容性的匹配

Content-Type:
作用:说明报文体中的对象的媒体类型
text/html: .
HTML格式
text/plain:
纯文本格式
text/xml:
XML文档格式
image/jpeg: jpg图片格式
image/gif: gif图片格式
image/png: png图片格式
Content-Type:
作用:说明报文体中的对象的媒体类型
s application/xhtml+xml : XHTML格式
application/xml : XML 数据格式
application/atom+xml : Atom XML聚合格式
application/json : JSON数据格式
application/pdf : pdf格式
application/msword : Word文档格式
application/octet-stream :二进制流数据(如常见的文件下载)
application/x-www-form-urlencoded :表单提交

HTTP响应报文
1、响应行
响应行一般由协议版本、状态码及其描述组成比如HTTP/1.1 200 OK
其中协议版本HTTP/1.1或者HTTP/1.0, 200就是它的状态码,OK则为它的描述。
2、响应头
响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客
户端如何处理等一会儿它回送的数据。
设置HTTP响应头往往和状态码结合起来。例如,有好几个表示文档位置已经改变的状态代码都伴随
着一个Location头,而401(Unauthorized)状态代码则必须伴随一 个WWW-Authenticate头。 然而,即使
在没有设置特殊含义的状态代码时,指定应答头也是很有用的。应答头可以用来完成:设置Cookie,
指定修改日期,指示浏览器按照指定的间隔刷新页面,声明文档的长度以便利用持久HTTP连接, …
等等许多其他任务。
3、响应体
响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是
HTML代码,如果是JS就是JS代码,如此之类。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通用记忆法
1XX
表示消息。这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。
2XX
表示成功。这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。
3XX
表示重定向。这类状态码代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的Location域中指明。
4XX
表示请求错误。这类的状态码代表了客户端看起来可能发生了错误,妨碍了服务器的处理。除非响应的是一个HEAD请求, 否则服务器就应该返回一个解释当前错误状况的实体,以及这是临时的还是永久性的状况。这些状态码适用于任何请求方法。浏览器应当向用户显示任何包含在此类错误响应中的实体内容。
5XX
表示服务器错误。这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。除非这是一个HEAD请求,否则服务器应当包含-个解释当前错误状态以及这个状况是临时的还是永久的解释信息实体。浏览器应当向用户展示任何在当前响应中被包含的实体。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值