HTTP协议详解以及URL具体访问过程

OSI七层模型

  1. 应用层:为应用程序提供服务【HTTP、FTP、DNS】

  2. 表示层:数据格式转换、数据加密【Telnet】

  3. 会话层:建立、管理和维会话【SMTP】

  4. 传输层:建立、管理和维护端到端的连接(服务端到客户端)【UDP、TCP】

  5. 网络层:IP地址及路由选择【IP、RARP】

  6. 数据链路层:提供介质访问和链路管理

  7. 物理层:物理层(wife,网络)

HTTP协议

Http协议是什么

即超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。从网络参考模型来看,它是属于应用层。它规定了计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。

简单的来说,它就是基于应用层一个规范一个标准!通讯双发都需要遵守这一准则,这就是http协议

URL和URI的区别

URI:

统一资源标示符,它的作用只是标识资源在哪里,这意味着存在多个URI可以指向该资源(例如:绝对与相对)【URI包含URL】

URI一般由三部分组成(例如:http://www.cnblogs.com):

  1. 访问资源的命名机制。

  2. 存放资源的主机名。

  3. 资源自身的名称,由路径表示。

语法:[scheme:] scheme-specific-part ,例如http://www.cnblogs.com

URI以scheme和冒号开头。scheme用大写/小写字母开头,后面为空或者跟着更多的大写/小写字母、数字、加号、减号和点号。冒号把 scheme与scheme-specific-part分开了,并且scheme-specific-part的语法和语义(意思)由URI的名字空间决定。

举例拆分:http://www.cnblogs.com/five-five

其中http是scheme,//cnblogs.com/five-five是scheme-specific-part,并且它的scheme与scheme-specific-part被冒号分开了。

绝对路径与相对路径

  • 绝对路径:绝对的URI指以scheme(后面跟着冒号)开头的URI,如以上例子http://www.cnblogs.com/five-five。其中标橙部分为绝对路径,绝对的URI看作是以某种方式引用某种资源,而这种方式对标识符出现的环境没有依赖。

  • 相对路径:相对的URI不是以scheme(后面跟着冒号)开始的URI,如以上例子中的http://www.cnblogs.com/five-five,其中标蓝部分为相对路径,相对的URI不是以scheme(后面跟着冒号)开始的URI。(例如:articles/articles.html、img/aa.jpg)你可以把相对的URI看作是以某种方式引用某种资源,而这种方式依赖于标识符出现的环境。(即你在html中引用图片:./img/aa.jpg,那么它依赖的就是http)

URL:

统一资源定位符,是URI的子集;它除了标识资源的位置,还提供一种定位该资源的主要访问机制(如其网络“位置”)。[即提供具体方式找到该资源(位置+方式)]

语法:协议头://主机ip地址:端口号/项目名

URL的格式由下列三部分组成(如:http://localhost:8081/admin/v1/swagger-ui.html):

  1. 第一部分,是协议或称为服务方式 (指定低层使用的协议,例如:http, https, ftp);

  2. 第二部分,是存有该资源的主机IP地址(有时也包括端口号);

  3. 第三部分,是主机资源的具体地址。如目录和文件名等。

第一部分和第二部分之间用"**://**“符号隔开,第二部分和第三部分用”**/**"符号隔开。第一部分和第二部分是不可缺少的,第三部分有时可以省略。

Http协议特点

HTTP协议永远都是客户端发起请求,服务器回送响应。这样就限制了使用HTTP协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端。

  1. 支持客户/服务器模式(C/S):一旦建立了运输连接(这常常称为建立了会话),浏览器端就向万维网服务器端发送HTTP请求,服务器收到请求后给出HTTP响应。

  2. 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、PUT、POST、DELETE。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

  3. 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

  4. HTTP 0.9和1.0使用非持续连接:限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接。HTTP 1.1使用持续连接:不必为每个web对象创建一个新的连接,一个连接可以传送多个对象,采用这种方式可以节省传输时间。

  5. 无状态:HTTP协议是无状态协议。即每一个HTTP请求都是独立的。万维网服务器不保存过去的请求和过去的会话记录。这就是说,同一个用户再次访问同一个服务器时,只要服务器没有进行内容的更新,服务器的响应就给出和以前被访问时相同的响应。服务器不记录曾经访问过的用户,也不记录某个用户访问过多少次。

常见的会话跟踪技术

  1. 隐藏表单域<input type="hidden" name="key" value="value">

  2. URL重写:URL 后面附加参数,和服务器的请求一起发送,这些参数为键/值对

  3. Cookie(客户端):服务器创建保存于浏览器端,不可跨域名性,大小及数量有限。客户端可以采用两种方式来保存这个Cookie对象,一种方式是 保存在 客户端内存中,称为临时Cookie,浏览器关闭后 这个Cookie对象将消失。另外一种方式是保存在 客户机的磁盘上,称为永久Cookie。以后客户端只要访问该网站,就会将这个Cookie再次发送到服务器上,前提是 这个Cookie在有效期内。 这样就实现了对客户的跟踪。Cookie是可以被禁止的。

  4. Session(服务端):在服务器端会创建一个session对象,产生一个sessionID来标识这个session对象,然后将这个sessionID放入到Cookie中发送到客户端,下一次访问时,sessionID会发送到服务器,在服务器端进行识别不同的用户。Session是依赖Cookie的,如果Cookie被禁用,那么session也将失效。

Http请求(Request)结构分析

请求消息的结构由三部分组成,请求行、请求头、请求主体(即:请求行、消息报头、请求正文)

在这里插入图片描述

# 请求行
GET /phpstudy2015-6/ HTTP/1.1
# 主机
Host: www.cnblogs.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
If-Modified-Since: Sat, 01 May 2021 12:05:41 GMT

请求方法

HTTP/1.1协议中共定义了八种方法(有时也叫“动作”)来表明Request-URI指定的资源的不同操作方式,最基本的有4种,分别是**GET**,**POST**,**PUT**,**DELETE**。一个URL地址用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。我们在浏览器地址栏直接输入地址的时候,采用的就是**GET**方法

GET与POST的区别:

  1. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?postid=6810130&update=1 ;POST方法是把提交的数据放在HTTP包的Body中。

  2. GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制。

  3. GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。(因为POST会吧参数封装成请求主体)

  4. GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码。

请求行

正如上面所讲的,请求行以一个方法符号开头,空格之后,一个请求URI,再空格,然后一个HTTP版本,最后一个回车换行。它的作用是用来说明当前请求的最基本信息。

请求头

  • Accept:浏览器能够处理的内容类型

  • Accept-Charset:浏览器能够显示的字符集

  • Accept-Encoding:浏览器能够处理的压缩编码

  • Accept-Language:浏览器当前设置的语言

  • Connection:浏览器与服务器之间连接的类型

  • Cookie:当前页面设置的任何Cookie

  • Host:发出请求的页面所在的域

  • Referer:发出请求的页面的URL

  • User-Agent:浏览器的用户代理字符串

请求主体

请求的主要用户数据,就是POST数据。如果方式为POST,则需要请求主体部分;GET则没有请求主体,数据形式:类似name=XXX&pwd=XXXX的内容

Http响应(Response)消息结构

响应消息的结构由三部分组成,响应行、响应头、响应主体(即:状态行、消息报头、响应正文)

在这里插入图片描述

HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://m.baidu.com,https://www.baidu.com,http://m.baidu.com,http://www.baidu.com
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html
Date: Tue, 12 Mar 2019 07:58:18 GMT
Search_result: OK
Server: Apache
Tracecode: 34988465750563182602031215
Tracecode: 34988458200827947786031215
Vary: Accept-Encoding
Transfer-Encoding: chunked

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

five-five

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值