http
是我们前后台交互的时候的传输协议(即超文本传输协议)怎么和服务器建立链接呢?
需要保证客户端的接受和发送正常,服务器端的接受和发送正常
这里就涉及到一个东西叫做 TCP/IP
协议
建立链接的主要步骤叫做 三次握手
客户端发送一个消息给到服务端
此时:服务端知道了 客户端可以正常发送消息服务端知道了 服务端可以正常接受消息
服务端回给客户端一个消息
此时:服务端知道了 客户端可以正常发送消息服务端知道了 服务端可以正常接受消息客户端知道了 客户端可以正常发送消息客户端知道了 客户端可以正常接受消息客户端知道了 服务端可以正常接受消息客户端知道了 服务端可以正常发送消息
客户端再回给服务端一个消息
此时:服务端知道了 客户端可以正常发送消息服务端知道了 服务端可以正常接受消息客户端知道了 客户端可以正常发送消息客户端知道了 客户端可以正常接受消息客户端知道了 服务端可以正常接受消息客户端知道了 服务端可以正常发送消息服务端知道了 服务端可以正常发送消息服务端知道了 客户端可以正常接受消息
至此,依照 TCP/IP
协议的建立链接就建立好了
双方都知道双方可以正常收发消息
就可以进入到第二步,通讯了
建立完链接以后就是发送请求的过程
我们的每一个请求都要把我们的所有信息都包含请求
每一个请求都会有一个 请求报文
在 请求报文
中会包含我们所有的请求信息(也就是我们要和服务端说的话都在里面)
我们的请求报文中会包含几个东西
请求行
POST /user HTTP/1.1
# POST 请求方式
# /user 请求URL(不包含域名)
# HTTP/1.1 请求协议版本
请求头(请求头都是键值对的形式出现的)
user-agent: Mozilla/5.0 # 产生请求的浏览器信息
accept: application/json # 表示客户端希望接受的数据类型
Content-Type: application/x-www-form-urlencoded # 客户端发送的实体数据格式
Host: 127.0.0.1 # 请求的主机名(IP)
请求空行(请求头和请求主体之间要留一个空白行)
# 就是一个空行
请求体(本次请求携带的数据)
# GET 请求是没有请求体数据的
# POST 请求才有请求体数据
接下来看一个完整的请求报文
POST /user HTTP/1.1 # 请求行
Host: www.user
Content-Type: application/x-www-form-urlencoded
accept: application/json
User-agent: Mozilla/5.0. # 以上是首部
#(此处必须有一空行) # 空行分割header和请求内容
name=world # 请求体
客户端的请求发送到服务端以后
服务端进行对应的处理
会给我们返回一个响应
每一个响应都会有一个 响应报文
在 响应报文
中会包含我们所有的响应信息(也就是服务端在接受到客户端请求以后,给我们的回信)
我们的 响应报文
中会包含几个信息
状态行
HTTP/1.1 200 OK
# HTTP/1.1 服务器使用的 HTTP 协议版本
# 200 响应状态码
# OK 对响应状态码的简单解释
响应头
Date: Jan, 14 Aug 2019 12:42:30 GMT # 服务器时间
Server: Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45 # 服务器类型
Content-Type: text/html # 服务端给客户端的数据类型
Content-Length: 11 # 服务端给客户端的数据长度
响应体
hello world
# 服务端给客户端的响应数据
TCP/IP
协议的 三次握手
TCP/IP
协议的 四次挥手
一般我们看不到,因为表示请求继续
100: 继续请求,前面的一部分内容服务端已经接受到了,正在等待后续内容
101: 请求者已经准备切换协议,服务器页表示同意
【200】请求成功。一般用于GET与POST请求
【304】未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
【400】客户端请求的语法错误,服务器无法理解
【401】请求要求用户的身份认证
【402】保留,将来使用
【403】服务器理解请求客户端的请求,但是拒绝执行此请求
【404】服务器无法根据客户端的请求找到资源(网页)。
【405】客户端请求中的方法被禁止
【406】服务器无法根据客户端请求的内容特性完成请求
【501】服务器过载或维护
【502】作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
【504】充当网关或代理的服务器,未及时从远端服务器获取请求
【505】服务器不支持请求的HTTP协议的版本,无法完成处理
目前服务端返回都是【500】 防止被测试服务器性能
querystring
的形式发送,也就是直接拼接在 请求路径的后面request body
的形式发送,也就是放在请求体中GET在浏览器回退时是无害的,而POST会再次提交请求。
GET产生的URL地址可以被Bookmark,而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方式的请求,浏览器会把http header和data一并发送出去;而对于POST,浏览器先发送header,服务器响应100,浏览器再发送data,服务器响应200。
博客园 在途中#
本质上HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。
GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
cookie
是一个以字符串的形式存储数据的位置cookie 是以字符串的形式存储,在字符串中以 key=value
的形式出现
每一个 key=value
是一条数据
多个数据之间以 ;
分割
// cookie 的形态
'a=100; b=200; c=300;'
读取 cookie 的内容使用
const cookie = kie
console.log(cookie) // 就能得到当前 cookie 的值
设置 cookie 的内容使用
// 设置一个时效性为会话级别的 cookie
kie = 'a=100'// 设置一个有过期时间的 cookie
kie = 'b=200;expires=Thu, 18 Dec 2043 12:00:00 GMT";'
// 上面这个 cookie 数据会在 2043 年 12 月 18 日 12 点以后过期,过期后会自动消失
删除 cookie 的内容使用
// 因为 cookie 不能直接删除
// 所以我们只能把某一条 cookie 的过期时间设置成当前时间之前
// 那么浏览器就会自动删除 cookie
kie = 'b=200;expires=Thu, 18 Dec 2018 12:00:00 GMT";'
/*** setCookie 用于设置 cookie* @param {STRING} key 要设置的 cookie 名称* @param {STRING} value 要设置的 cookie 内容* @param {NUMBER} expires 过期时间*/
function setCookie (key, value, expires) {const time = new Date()time.Time() - 1000 * 60 * 60 * 24 * 8 + expires) // 用于设置过期时间kie = `${key}=${value};expires=${time};`
}
/*** getCookie 获取 cookie 中的某一个属性* @param {STRING} key 你要查询的 cookie 属性* @return {STRING} 你要查询的那个 cookie 属性的值*/
function getCookie(key) {const cookieArr = kie.split(';')let value = ''cookieArr.forEach(item => {if (item.split('=')[0] === key) {value = item.split('=')[1]}})return value
}
/*** delCookie 删除 cookie 中的某一个属性* @param {STRING} name 你要删除的某一个 cookie 属性的名称*/
function delCookie(name) {setCookie(name, 1, -1)
}
本文发布于:2024-02-05 07:53:21,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170727777864705.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |