网络-白话详解HTTP (一)
HTTP目录
上一周开始准备毕设相关的基础知识的积累,重新学习了一下网络部分。
本文用自己理解的简单方式分析HTTP,分为HTTP的工作流程、请求方法、常用术语、TCP 三次握手与四次挥手、请求报文与响应报文分析等五个部分展开讲解。
一、HTTP简介
-
什么是HTTP?
HTTP 是超文本传输协议,是一种应用层协议,基于TCP/ IP通信协议来传递数据。
HTTP 工作在C/S 模型上, 客户端与服务器的通信采用 request/response 机制。 -
HTTP工作流程?
(1)建立TCP连接 (2)浏览器向客户机发送请求命令 (3)浏览器发送请求头信息
(4)服务器应答 (5)服务器发送应答头信息 (6)服务器向客户端发数据 (7) 服务器关闭TCP连接(1)建立TCP连接
浏览器要与服务器建立连接,是通过TCP来完成的,默认端口为80。
(2)浏览器发送请求命令
TCP连接后,浏览器就会向服务器发送请求命令 (POST/ GET)。
(3)浏览器发送请求头信息
发送请求命令后,以头信息的形式向服务器发送其他信息,最后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。
(4)服务器应答
服务器应答, HTTP/1.1 200 OK ,协议的版本号和应答状态码。
(5)服务器发送应答头信息
服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。
(6)服务器向客户端发数据
发送头信息后,空白行表示头信息发送结束,后以Content-Type开头发送用户所请求的实际数据
(7) 服务器关闭TCP连接
服务器向浏览器返回了请求数据,它就要关闭TCP连接。 -
HTTP特点
(1) C/S 模型:基于客户端/ 服务器的架构模型
(2) 无连接 :一次连接只处理一个请求,处理完请求立即断开连接
(3) 无状态 : 对事务的处理没有记忆能力,上一次的操作不用去管。
二、HTTP请求方法
HTTP/1.1新增5种后,有8种请求方法。
GET, POST, HEAD, OPTIONS, PUT, DELETE, TRACE, CONNECT
-
GET 请求 【查】
用于获取指定URL页面的信息。 -
POST 请求 【增】
向指定资源提交数据进行处理请求。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。注:PUT 与POST 请求的区别? 核心:GET 主要用于从服务器获取数据 ; POST主要是向服务器修改处理数据。
(1) GET 使用URL或Cookie传参, POST 将数据放在Body里。
(2) GET的URL有长度限制, 而POST 的数据可以传送很大。
(3) POST比GET更安全一些, POST 的数据在地址栏不可见。
(4) GET产生一个TCP数据包;POST产生两个TCP数据包; 网络状态差,两个数据包更能保证数据的完整性。
- PUT 请求 【改】
从客户端向服务器传送的数据替换指定的文档的内容。
注:GET 与 POST请求的区别??
PUT请求:如果两个请求相同,后一个请求会把第一个请求覆盖掉。(所以PUT用来改资源)
POST 请求:后一个请求不会把第一个请求覆盖掉,而是追加在后面 (所以POST用来增资源)
- DELETE 请求 【删】
请求服务器删除指定界面
注:不能保证客户端的删除一定被执行,因为HTTP 允许服务器不通知客户端就撤销请求。 - HEAD 请求
只请求资源的首部
HEAD方法跟GET方法相同,只不过服务器响应时不会返回消息体。这种方法可以用来获取请求中隐含的元信息,而不用传输实体本身。也经常用来测试超链接的有效性、可用性和最近的修改。 - OPTIONS 请求
允许客户端查看服务器的性能。 - TRACE 请求
回显服务器收到的请求,主要用于测试或诊断。 - CONNECT 请求
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
三、HTTP术语
此处属于包括cookie,header ,body
- cookie
起源:cookie是保存在用户浏览器端的,并在发出http请求时会默认携带的一段文本片段。它可以用来做用户认证(帐号/密码),服务器校验等通过文本数据可以处理的问题。 起源:cookie是保存在用户浏览器端的,并在发出http请求时会默认携带的一段文本片段。它可以用来做用户认证(帐号/密码),服务器校验等通过文本数据可以处理的问题。
作用:
(1)会话管理 :
记录用户的登录状态,服务器会在用户登录成功后下发一个签名来标记session的有效性,这样免去了用户多次认证和登录网站。
(2) 记录用户相关信息
如:记录上次的相关密码,下次登录不用重复填写。
(3) 记录用户行为
如: 记录用户的点击率,和对某个商品的操作率等。
实现流程:
客户端发起http请求到特定的服务器;服务器返回http response,其中可以包含Cookie设置;
后续访问服务器的相关页面就会发送拿到的cookie去访问。
组成:
name: 一个唯一确定的cookie名称;
value:存储在cookie中的字符串值;
domain:cookie对于哪个域是有效的。
path: 表示这个cookie影响到的路径,浏览器会向指定域中匹配的路径发送cookie。
expires:失效时间,表示cookie何时应该被删除的时间;
- header
含义 :header是指HTTP的头域,无论是请求还是发送都具备一个或者多个头域。
位置:位于请求行或响应行的后面
分类 :通用头、请求头、响应头和实体头
简介:
(1) 通用头 :请求和响应消息都支持的头域
通用头域包含请求和响应消息都支持的头域,包含Cache-Control、Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via .
Cache-Control: 指定请求和响应遵循的缓存机制。
Connection: 表 示是否需要持久连接
Date : 消息发送的时间GMT ;
pragma :用来包含实现特定的指令,如Pragma:no-cache (服务器必须返回一个刷新后的文档)。
(2)请求头:允许客户端向服务器传递关于请求或者关于客户机的信息
请求头包含Accept、Accept- Encoding、Accept-Language、Host、Range、Refere、User-Agent等; 详解在请求头结构中。
(3) 响应头:描述服务器的信息和Request-URL进一步的信息
响应头包含Age、 Location、Proxy-Authenticate、Public、Retry-After、Server、Vary、Warning、WWW- Authenticate等; 部分详解在响应头结构中。
(4) 实体头:包含关于实体的原信息
实体头包含Allow、Content-Encoding、Content-Language、Content-Length、Content-Range、Content-Type、Last-Modified等;
Allow:服务器支持哪些请求方法(如GET、POST等)。
Content-Encoding : 内容文档的编码方法。
Last-Modified: 文档的最后改动时间。
- body
含义:是指请求或响应中发送的实际数据;
位置: 在一个空行之后,空行将header 与body 分开;
作用: 用于存放请求或修改的实际数据。