目录
前言
我又来了,更新速度有点快,莫得办法,贼无聊~~~
想不出骚话了,略过~~~~
正文
http的工作流程(快速理解)
什么是客户端?
客户端可以理解成用户 指浏览器
什么是服务端?
服务端可以理解成商店 指服务器
一个http工作流程
可以看成 “用户到商店需要买苹果。然后服务员去拿苹果给用户 “ 简简单单一句话
用户到商店买苹果 这是一个请求
服务员把苹果给用户 这是一个回响
理解的话就已经完全理解了
这就是一个http工作流程,分请求包与回响包(一般都叫返回包)
(1)客户端连接到Web服务器
(2)发送HTTP请求
(3)服务器接受请求并返回HTTP响应
(4)释放连接TCP连接
(5)客户端浏览器解析HTML内容
关于url的构成
http://www.test.com/aboutus.php?id=117 (这个url是我找的,然后我改成www.test.com)
http:// 首先是http协议(protocol)
www.test.com 然后就是主机(host)
aboutus.php 然后再路径(path)
?id=117 然后就是参数
路径就是host后面的部分
HTTP请求包与返回包
HTTP/1.1 定义的请求方法有8种:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE
GET: 是最常用的方法,通常用于请求服务器发送某个资源
PUT: 用于向服务端写入文档
POST: 是常用的方法之一,用于向服务端提交数据,有主体
HEAD: 与GET类似,但在响应中只有首部,不返回具体数据,可以用来查看资源是否存在
TRACE: 用于跟踪某个请求
DELETE: 用于删除服务端某个资源
OPTIONS: 用于查询服务端支持的方法
请求包:
请求行: POST /users/login/ HTTP/1.1
请求头: Host: xxxxxxxx.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 250
Origin: http://XXXXXX.net
Connection: close
Referer: http://XXXXXXX.net/users/login/?next=/courses/
Cookie: csrftoken=7nHRuim6Ost14JzABrAy38lb7ZW2PmU5d1LIX99pafrq1MVsTo2APP55duHAj0K8
Upgrade-Insecure-Requests: 1
空行
请求体: csrfmiddlewaretoken=SIQUCuyvhyOpOdwDVVYTyBP0EMtLsf6sYmUL5llODlMOLgSvdSqVkizUKhejWTWv&opt_type=account&redirect_url=%2Fcourses%2F&account=aaaaaa&password=aaaaaa&mobile=&captcha_0=9215a8da15a3412e58477a0a0f1dd748d9211041&captcha_1=aaaaaaaa&mobile_code=
请求包分三个部分,请求行,请求头,请求体
请求行: POST /users/login/ HTTP/1.1
传参方式post,然后路径/users/login/,协议是http 1.1
然后请求头,我下面贴出了常见head解释
关于head可以进行head头注入
然后再请求体,有些表单,或者登陆框登陆的时候用户名和密码都会在这里
爆破的时候也是在这爆破
返回包:
HTTP/1.1 200 OK
Server: openresty/1.13.6.2
Date: Fri, 07 Feb 2020 16:00:11 GMT
Content-Type: text/html; charset=utf-8
Connection: close
Vary: Accept-Encoding
X-Frame-Options: SAMEORIGIN
Vary: Cookie
Set-Cookie: csrftoken=7nHRuim6Ost14JzABrAy38lb7ZW2PmU5d1LIX99pafrq1MVsTo2APP55duHAj0K8; expires=Fri, 05-Feb-2021 16:00:11 GMT; Max-Age=31449600; Path=/
Content-Length: 600
<head>
<meta charset="UTF-8">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" >
<title>ç»å½ | 红æ¥å®å¨</title>
<link rel="stylesheet" type="text/css" href="/static/css/reset.css">
<link rel="stylesheet" type="text/css" href="/static/css/commons.css">
<link rel="stylesheet" type="text/css" href="/static/js/plugins/toastr-2.1.1/toastr.min.css" />
<style type="text/css">
div.hd-login {
background-image: url('/sssssssso/logo_200_100.jpg');
}
</style>
</head>
返回包先是协议,然后状态码,是否正常
然后一些head等等
下面的html就是跳转返回的页面,只不过太多了,我就删掉了好多,这样看着好看,比较明显
状态码分为五大类:
信息性状态码:100~199
成功状态码:200~299
重定向状态码:300~399
客户端错误状态码:400~499
服务端错误状态码:500~599
常见的header:
Content-Type | 请求体/响应体的类型,如:text/plain、application/json | ||
Accept | 说明接收的类型,可以多个值,用,(半角逗号)分开 | ||
Content-Length | 请求体/响应体的长度,单位字节 | ||
Content-Encoding |
| ||
Accept-Encoding |
| ||
ETag | 给当前资源的标识,和Last-Modified、If-None-Match、If-Modified-Since配合,用于缓存控制 | ||
Cache-Control | 取值为一般为no-cache或max-age=XX,XX为个整数,表示该资源缓存有效期(秒) | ||
Authorization |
| ||
User-Agent |
| ||
If-Modified-Since |
| ||
If-None-Match | 值为上一次服务器返回的 ETag 值,一般会和If-Modified-Since一起出现 | ||
Cookie | 已有的Cookie | ||
Referer | 表示请求引用自哪个地址,比如你从页面A跳转到页面B时,值为页面A的地址 | ||
Host |
| ||
Date | 服务器的日期 | ||
Last-Modified | 该资源最后被修改时间 | ||
Transfer-Encoding | 取值为一般为chunked,出现在Content-Length不能确定的情况下,表示服务器不知道响应版体的数据大小,一般同时还会出现Content-Encoding响应头 | ||
Set-Cookie | 设置Cookie | ||
Location | 重定向到另一个URL,如输入浏览器就输入baidu.com回车,会自动跳到 https://www.baidu.com ,就是通过这个响应头控制的 | ||
Server | 服务器应用程序软件的名称和版本 |
接下来就差不多了,就可以理解啦
文末:
欢迎加我微信,一起讨论问题。技术有限,根据网上,以及自己理解写的
如果有什么不对的话可以评论指出来