关于 HTTP 协议的基本格式 参考这里
首行GET http://sogou.com/ HTTP/1.1
可以将首行分为3部分
GET
(HTTP 方法)http://sogou.com/
(URL)HTTP/1.1
(版本号)通过不同的 HTTP 方法, 描述了不同的 HTTP 请求的作用(不同的方法, 表示不同的 “语义” )
图片来自网络
GET 与 POST 没有本质上的区别
使用 GET 的情况, 一般替换成 POST 也可以
使用 POST 的情况, 一般替换成 GET 也可以
GET 与 POST 在使用习惯上的区别
幂等
的(为了实现可缓存)幂等
)对于幂等
的解释
如果输入一定, 得到的输出也一定, 那么就可以认为是幂等的
举个栗子
牛吃的是草, 挤出来的是奶(幂等)
输入一定, 得到的输出也一定
牛吃的是草, 挤出来的是啤酒, 可乐, 咖啡, 奶茶…(不是幂等)
输入一定, 得到的输出不一定(可能是上面的任意一种)
以下面的 URL 举例
https://cn.bing.com/search?q=csdn&form=QBLH&sp=-1&lq=0&pq=csd&sc=10-3&qs=n&sk=&cvid=939E4A6DAD0942AA8085E3D7C736FF5C&ghsh=0&ghacc=0&ghpl=
https://
(协议名)cn.bing.com/
(域名, 服务器的地址)search
(带层次结构的路径, 标识要访问的资源是什么)q=csdn&form=QBLH&sp=-1...
(查询字符串 Query String)
&
分割键值对=
分割键和值对于 URL
的解释
http://滨水西路娜娜子餐厅:80/熏肉大饼?辣椒=少辣&香菜=多放&葱=多放
http://
(协议名)滨水西路娜娜子餐厅
餐厅(服务器)的地址80
(端口号)熏肉大饼
表示要购买的食物为熏肉大饼(带层次结构的路径, 标识要访问的资源是什么)
辣椒=少辣&香菜=多放&葱=多放
(查询字符串)GET http://sogou.com/ HTTP/1.1
:
分割键和值在 URL 中, 已经写了要访问的地址, 为什么这里还要再写一遍
GET http://sogou.com/ HTTP/1.1
Host: sogou.com
在大多数情况下, Host 中的值和 URL 中的域名是一致的
但当我们不是直接访问服务器时(通过 “代理” 进行访问)
此时的 Host 和 URL 可能就不一致了
HTTP 请求中没有 Body, 就不会出现 Content-Type 与 Content-Length
Content-Type: application/json;charset=UTF-8
application/json
数据的格式(表示数据按照 json 格式进行组织)charset=UTF-8
数据的字符集Content-Type: application/json;charset=UTF-8
当 Content-Type 的格式为 json
时
此时 Body 的内容
{
"username":"xxxxxxx",
"password":"xxxxxxx",
"uuid":"xxxxxxx",
"status":"0"
}
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
当 Content-Type 的格式为 x-www-form-urlencoded
时
此时 Body 的内容
username=xxx&password=xxx&uuid=xxx&status=0
作为请求, Content-Type 就是上面的两种写法
作为响应, Content-Type 还包括下面几种写法
;
分割键值对=
分割键和值Cookie 从哪里来
从服务器来, 当我们访问服务器时, 服务器就会在 HTTP 响应中, 通过 Set-Cookie 字段, 将 Cookie 的键值对, 返回给浏览器. 浏览器收到数据后, 就会将其存储在本地
Cookie 到哪里去
会在下次请求的时候, 把 Cookie 带给服务器
(Cookie 在浏览器这边只是 “暂存”, 最后还是需要服务器让这个数据发挥作用)
Cookie 有什么用
Cookie 是浏览器本地存储数据的机制
Cookie 最典型的应用就是存储用户的身份信息(例如登录后的身份)
由于客户端有很多, 每个客户端提供的服务可能不同
(可以理解成客户端的身份不同, 有的可能是 VIP, 有的可能是 SVIP, 还有的可能是 普通用户, 因此提供的服务可能不同)
因此, 服务器就可以通过 Cookie 进行区分
首行HTTP/1.1 200 OK
可以将首行分为3部分
HTTP/1.1
(版本号)200
(状态码)
OK
(状态码描述)
常见的状态码
状态码 | 状态码描述 | 含义 |
---|---|---|
200 | OK | 表示请求成功 |
404 | Not Found | 表示要访问的资源不存在 |
403 | Forbidden | 表示访问被拒绝(没有权限) |
405 | Method Not Allowed | 表示方法不被允许 |
500 | Internal Server Error | 表示服务器内部错误 |
504 | Gateway Timeout | 表示服务器访问超时 |
302 | Move temporarily | 临时重定向 |
301 | Moved Permanently | 永久重定向 |
对状态码的总结
状态码 | 类别 | 解释 |
---|---|---|
1XX | Informational(信息状态码) | 接收的请求正在处理 |
2XX | Success(成功状态码) | 请求正常处理 |
3XX | Redirection(重定向状态码) | 需要进行附加操作以完成请求 |
4XX | Client Error(客户端错误状态) | 服务器无法处理请求 |
5XX | Server Error(服务器错误状态码) | 服务器处理请求出错 |
对于 404, 不同的网页显示出来的效果可能不同
Bilibili 的效果
Sogou 的效果
对于重定向的解释
举个栗子
故事背景
滑稽老哥一直深爱着女神, 但女神一直将滑稽老哥看作是备胎()
滑稽老哥的女神分手了, 女神向滑稽老哥寻求安慰
滑稽老哥的内心对女神仍然抱有想法
因此滑稽老哥就和他的小女友分手去追女神了
将自己对女神的心重定向为小女友
待到女神难过时, 又将自己对小女友的心临时重定向为女神
(临时重定向)
滑稽老哥的女神分手了, 女神向滑稽老哥寻求安慰
滑稽老哥内心坚定, 作为一个男人, 不能做这种事情
因此滑稽老哥的内心仍然坚定不移的选择他的小女友
将自己对女神的心重定向为小女友
待到女神难过时, 仍然坚定自己对小女友的心永久重定向
(永久重定向)
对于418
418 I'm a teapot
我是个杯具
这是一个彩蛋
类似这样的菜单还有百度的黑洞
(在百度搜索框中输入 “黑洞” )
通过 form 表单构造 HTTP 请求
(1) 构造 GET 请求
<form action="https://www.baidu.com/abc/def" method="get">
<input type="text" name="aaa">
<input type="text" name="bbb">
<input type="submit" value="提交">
form>
运行效果
输入1, 2之后
点击提交之后
地址栏显示 GET https://www.sogou.com/abc/def?aaa=1&bbb=2
(2) 构造 POST 请求
<form action="https://www.baidu.com/abc/def" method="post">
<input type="text" name="aaa">
<input type="text" name="bbb">
<input type="submit" value="提交">
form>
运行效果
输入111, 222之后
点击提交之后
地址栏显示 POST https://www.sogou.com/abc/def
form 表单构造 HTTP 请求只支持 GET 和 POST 方法
PUT, DELETE, OPTIONS 等其他方法均不可行
ajax 全称为 Asynchronous Javascript And XML
Asynchronous (异步)
Synchronized (同步)
对于 同步 与 异步 的解释
举个栗子
故事背景
滑稽老哥来到了饭馆, 对老板说: 来份蛋炒饭, 老板~
滑稽老哥就在出餐口等待老板做好蛋炒饭, 当老板做好蛋炒饭后, 自己将蛋炒饭拿到就餐的地方开吃
(同步)
滑稽老哥坐在就餐的地方等待老板将做好的蛋炒饭端到自己面前
(异步)
异步: 请求的发起者不关心结果, 而是由被请求的一方计算出结果后, 将结果交付给请求的发起者
ajax 属于前后端异步交互的一种方式
利用 Jquery 编写 ajax
<head>
<script src="引入Jquery的路径">script>
head>
<body>
<script>
$.ajax({
url: "https://www.sogou.com/",
type: "POST",
data: "this is body", // body
contentType: "text/plain",
success: function(body) {
// 处理响应的代码
console.log(body);
}
});
script>
body>
这里的 success: function() { }
属于回调函数
会在服务器返回正确响应时, 被浏览器自动执行(这个过程就是 “异步” 的过程)
意思是
在 JS 中, 将请求发送出去就继续执行后面的代码
直到响应回来之后, 浏览器调用上述的 success: function() { }
回调函数, 执行处理响应的逻辑
运行上述代码, 发现产生如下错误
这是由于 ajax 的跨域问题导致的
解释
假设现在运行的 ajax 代码页面的域名是 abc.com
但是 ajax 里的请求, 访问的域名是 def.com
这就是典型的跨域问题
创作不易,如果对您有帮助,希望您能点个免费的赞
大家有什么不太理解的,可以私信或者评论区留言,一起加油