
HTTP协议工作原理
我们来解析一下从百度输入信息后,百度返回数据给我们的一个过程来帮助大家理解HTTP协议工作的具体原理:
- 1、浏览器中输入URL地址
- 2、解析URL地址为IP地址
- 3、发送资源请求【<https://www.baidu.com/> Request Method:GET】往-服务器上
- 4、根据请求获取资源【/根路径】【文本数据、图片、视频等流媒体】
- 5、服务器返回资源给客户端/用户/浏览器
- 6、浏览器渲染引擎处理返回的数据为美丽的画面
从以上信息中我们可以大概的将过程拆分成这样:
URL地址–>解析URL–>发请求–>获取响应–>渲染
URL地址解析
- URL:
在WWW上,每一信息资源都有统一的且在网上唯一的地址,该地址就叫URL(Uniform Resource Locator,统一资源定位器),它是WWW的统一资源定位标志,就是指网络地址。
- URI:
在电脑术语中,统一资源标识符(Uniform Resource Identifier,URI)是一个用于标识某一互联网资源名称的字符串。 该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作。
-
简单的URL 由 3 部分构成:协议、主机名、资源路径名
协议:https 主机名:[www.baidu.com](http://www.baidu.com) 资源路径:/ -
协议类型 😕/主机名 资源路径?请求参数【URL编码:请求参数—GET请求】
协议类型:https 主机名:[www.jianshu.com](http://www.jianshu.com) 资源路径:/go-wild 请求参数:[ac=2&url=http%3A%2F%2Frobotframework.org%2Frobotframework%2F2.7.2%2FRobotFrameworkUserGuide.html%23id379](https://www.jianshu.com/go-wild?ac=2&url=http://robotframework.org/robotframework/2.7.2/RobotFrameworkUserGuide.html#id379) -
锚地址 (#)
锚就是在文档中设置位置标记,并给该位置一个名称,以便引用。通过创建锚点,可以使链接指向当前文档或不同文档中的指定位置。锚点常常被用来跳转到特定的主题或文档的顶部,使访问者能够快速浏览到选定的位置,加快信息检索速度。
例: http://robotframework.org/robotframework/2.7.2/RobotFrameworkUserGuide.html#test-execution
锚地址:#test-execution
-
补充:
-
web服务器:常用服务器为 Apache服务器 端口:80
-
php应用 :常用服务器为tomact服务器 端口:8080
-
http协议特点
-
1、支持客户/服务器模式
-
2、简单快速
客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、POST、HEAD、PUT、DELETE等。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
-
3、灵活
HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
-
4、无连接
无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。可以设置Connection:keep-alive 保存TCP连接。后面如果还要用到这个连接不会每次都新建连接
-
5、无状态
HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量増大。另一方面,在服务器不需要先前信息时它的应答就较快。
-
6、明文传输
HTTP协议不支持加密处理,所以在安全性方面是一大硬伤。目前解决这一安全问题的方法是使用Https协议(基于HTTP+SSL协议)的一种安全传输方案。
常用的请求方法
- GET请求:客户端从服务器上获取资源
GET:http://192.168.200.148:8081/agileone/index.php
GET:http://192.168.200.148:8081/oa/index.php?m=login&a=index
【可以含有请求参数m=login&a=index,数据存放在URL中,存储空间有限制,但速度更快,1个TCP数据包headers】
-
POST请求 : 客户端向服务器提交数据
POST:http://192.168.200.148:8081/agileone/index.php/common/login
【可以含有请求参数】 headers:Content-Type:application/x-www-form-urlencoded body数据:username=admin&password=admin&savelogin=true
【含有请求正文,数据存放在body/请求正文中,存储空间没有限制,稍慢,2个TCP数据包headers body】
-
HEAD请求 :用于获取头部信息,没有响应体,类似于GET
-
PUT请求 :用于更新信息,从客户端向服务器传送的数据取代指定的文档的内容
-
DELETE请求:请求服务器删除指定的页面
-
CONNECT请求:协议中预留给能够将连接改为管道方式的代理服务器
-
OPTIONS请求:允许客户端查看服务器的性能
-
TRACE请求:回显服务器收到的请求,主要用于测试或诊断
-
RESTFUL接口规范:GET POST PUT DELETE /notices
GET请求与POST请求的区别
- GET在浏览器回退时是无害的,而POST会再次提交请求。
- GET请求会被浏览器主动cache,而POST不会,除非手动设置。
- GET请求只能进行url编码,而POST支持多种编码方式。
- GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
- GET请求在URL中传送的参数是有长度限制的,而POST没有。
- 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
- GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
- GET参数通过URL传递,POST放在Request body中。
- GET产生一个TCP数据包;POST产生两个TCP数据包。
- GET比POST性能好,更快、
状态请求码
常见的状态码及状态码含义:
-
1**,
例子 100,continue,信息,服务器收到请求,需要请求者继续执行操作
-
2** ,
例子200 ok 请求处理成功,成功,操作被成功接收并处理
-
3**,
例子302 found ,重定向,需要进一步的操作以完成请求
-
4**,
例子404 not found,客户端错误,请求包含语法错误或无法完成请求
-
5**,
例子500,server error,服务器错误,服务器在处理请求的过程中发生了错误
cookie与session
-
cookie与session存在的理由?
解决HTTP协议无状态问题
-
cookie:存放在客户端的保持状态的一种方式
-
session:存放在服务器的保持状态的一种方式
-
cookie:
请求头:Cookie:PHPSESSID=95a62731cc495698075a3db9dc42b266
响应头:
Set-Cookie:username=admin; expires=Thu, 23-Sep-2021 06:25:06 GMT; path=/ Set-Cookie:password=admin; expires=Thu, 23-Sep-2021 06:25:06 GMT; path=/ -
session:
服务器:xampp\tmp\sess_95a62731cc495698075a3db9dc42b266
-
保持状态:cookie:获取sessionID ,去服务器查询session文件,检查用户的信息中登录状态是否为true,是,保持登录状态,否则非登录状态。
-
补充:token:解决分布式服务的会话共享问题。通常含有:有效期 客户端ID 用户认证 服务器推送给客户端,客户端发请求需要带上token请求成功。app token
本文详细解读HTTP协议工作原理,包括URL地址解析、GET与POST请求区别,以及状态请求码。同时介绍cookie与session在保持状态中的作用。
5万+

被折叠的 条评论
为什么被折叠?



