网络原理-HTTP补充1
HTTP请求
认识URL
URL基本格式
平时我们俗称的"⽹址"其实就是说的URL统⼀资源定位符.互联⽹上的每个⽂件都有⼀个唯⼀的URL,它包含的信息指出⽂件的位置以及浏览器应该怎么处理它.
http: 协议方案名,常见有http,https,jdbc.
user:pass :登陆信息.现在的⽹站进⾏⾝份认证⼀般不再通过URL进⾏了.
www.example.jp :服务器地址.此处是⼀个"域名",域名会通过DNS系统解析成⼀个具体的IP地址.
80 :服务器端口号,当端⼝号省略的时候,浏览器会根据协议类型⾃动决定使⽤哪个端⼝.例如http协议默认使⽤80端⼝,https协议默认使⽤443端⼝.
dir/index.html :带层次的文件路径,通过文件路径对文件进行访问.
uid=1 :查询字符串(query string).本质是⼀个键值对结构.键值对之间使⽤&分隔.键和值之间使用=分隔.是客户端给服务器传递信息的重要途经.
ch=1 :片段标识,⽚段标识主要⽤于⻚⾯内跳转.
URL中可以省略的部分:
1.协议方案名:省略后默认为http://
2.ip地址/域名:在HTML中可以省略(比如mg,link,script,a标签的src或者href属性).省略后表⽰服务器的ip/域名与当前HTML所属的ip/域名⼀致.
3.端口号:省略后如果是http协议,端⼝号⾃动设为80;如果是https协议,端⼝号⾃动设为443.
4.带层次的文件路径:省略后默认为/.
5.查询字符串/片段标识:省略后认为无需进行这两部分操作.
关于URL encode
像/ ?这样的字符已经被URL特殊处理了,因此这些字符不能随意出现,但是当某个参数中包含这些字符时,就需要对字符进行转译.
转义的规则如下:将需要转码的字符转为16进制,然后从右到左,取4位(不⾜4位直接处理),每2位做⼀位,前⾯加上%,编码成%XY格式.例如:c++会被转义为c%2B%2B.
认识方法
方法 | 说明 | 支持的协议版本 |
GET | 获取资源 | 1.0,1.1 |
POST | 传输实体主体 | 1.0,1.1 |
PUT | 传输文件 | 1.0,1.1 |
HEAD | 获得报文首部 | 1.0,1.1 |
DELETE | 删除文件 | 1.0,1.1 |
OPTIONS | 询问支持的方式 | 1.1 |
TRACE | 追踪路径 | 1.1 |
CONNECT | 要求用隧道协议链接代理 | 1.1 |
LINK | 建立和资源之间的联系 | 1.0 |
UNLINK | 断开链接关系 | 1.0 |
这些方法的语义,只是开发者文档中的一个软性要求.在实际开发时,程序员用这个方法干了什么,开发者文档没有进行硬性规定.
1.GET方法
GET是最常⽤的HTTP⽅法.常⽤于获取服务器上的某个资源.
在浏览器中直接输⼊URL,此时浏览器就会发送出⼀个GET请求.
另外,HTML中的link,img,script等标签,也会触发GET请求.
访问百度主页:
GET请求的特点
1.⾸⾏的第⼀部分为GET
2.URL的query string可以为空,也可以不为空.
3.header部分有若⼲个键值对结构.
4.body部分为空.
2.POST方法
POST⽅法也是⼀种常⻅的⽅法.多⽤于提交⽤⼾输⼊的数据给服务器(例如登陆⻚⾯).
登录某网页:
POST请求的特点:
1.⾸⾏的第⼀部分为POST
2.URL的query string⼀般为空(也可以不为空)
3.header部分有若⼲个键值对结构.
4.body部分一般不为空.
GET与POST的区别
1.GET与POST没有本质区别,因为开发者文档中没有对这两个方法进行硬性规定.
2.从常用角度来看:
1)语义不同,GET常用于获取资源,POST常用于给服务器提交资源.
2)GET的body⼀般为空.需要传递的数据过query string传递,POST的query string⼀般为空,需
要传递的数据通过body传递.
3.GET被建议实现幂等性,而POST无要求.(幂等性为:如果多次请求得到的结果⼀样,就视为请求是幂等的).
4.GET可以被缓存,而POST不能缓存.(继承幂等性).
3.其他方法
PUT与POST相似,只是具有幂等特性,⼀般⽤于更新
DELETE删除服务器指定资源
OPTIONS返回服务器所⽀持的请求⽅法
HEAD类似于GET,只不过响应体不返回,只返回响应头
TRACE回显服务器端收到的请求,测试的时候会⽤到这个
CONNECT预留,暂⽆使⽤
认识请求报头
报头的整体格式,也是键值对形式.每个键值对占一行,键和值之间使用分号分割.
HOST:标识服务器主机的地址和端口,少数情况中和URL的ip端口不一样.
Content-Length:标识body中数据的长度.
Content-Type:标识body中的数据格式.常见选项有:
application/x-www-form-urlencoded: form表单提交的数据格式.此时body的格式形如:
title=test&content=hello |
multipart/form-data: form表单提交的数据格式(在form标签中加上enctyped="multipart/form-data").通常用于提交图片/文件,body格式形如:
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3Trw ------WebKitFormBoundaryrGKCBY7qhFd3TrwA Content-Disposition: form-data; name="text" title ------WebKitFormBoundaryrGKCBY7qhFd3TrwA Content-Disposition: form-data; name="file"; filename="chrome.png" Content-Type: image/png PNG ... content of chrome.png ... ------WebKitFormBoundaryrGKCBY7qhFd3TrwA-- |
application/json:数据为json格式.body格式形如:
{"username":"123456789","password":"xxxx","code":"jw7l","uuid":"d110a05ccde64b16} |
User-Agent(简称UA):标识浏览器/操作系统的属性,可以根据不同的操作系统或浏览器来真是不同的页面,如:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0 |
Refer:表示这个页面是从哪个页面跳转来的.
Cookie:Cookie中存储了⼀个字符串,这个数据可能是客⼾端⾃⾏通过JS写⼊的,也可能来⾃于服务器.
关于Cookie:
1.Cookie从哪里来?一般为第一次访问服务器时,服务器返回的.
2.Cookie到哪去?Cookie会存储在浏览器本机的硬盘上,后续每次访问服务器都会带上Cookie.不同的客户端/浏览器,访问同一个服务器,保存到Cookie是不同的.
3.Cookie中存储的是程序员自行规划的键值对数据.
4.Cookie在本地硬盘中按照不同的域名进行存储.
5.Cookie用来在客户端保存数据,其中最重要的是用户的身份标识.
认识请求正文
正⽂中的内容格式和header中的Content-Type密切相关.上⾯也罗列了三种常⻅的情况.下⾯可以通过抓包来观察这⼏种情况:
1.application/x-www-form-urlencoded
对上传头像进行抓取:
POST https://gitee.com/profile/upload_portrait_with_base64 HTTP/1.1
|
2.multipart/form-data
对上传简历功能进行抓取:
POST https://v.bitedu.vip/tms/oss/upload/file HTTP/1.1 ------WebKitFormBoundary8d5Rp4eJgrUSS3wT |
3.application/json
对登录进行抓取:
POST https://v.bitedu.vip/tms/login HTTP/1.1 Host: v.bitedu.vip Connection: keep-alive Content-Length: 105 sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91" sec-ch-ua-mobile: ?0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, Access-Control-Allow-Methods: PUT,POST,GET,DELETE,OPTIONS Content-Type: application/json;charset=UTF-8 Access-Control-Allow-Origin: * Accept: application/json, text/plain, */* Access-Control-Allow-Headers: Content-Type, Content-Length, Authorization, Accep Origin: https://v.bitedu.vip Sec-Fetch-Site: same-origin Sec-Fetch-Mode: cors Sec-Fetch-Dest: empty Referer: https://v.bitedu.vip/login Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9,en;q=0.8 Cookie: rememberMe=true; username=123456789 {"username":"123456789","password":"xxxx","code":"u58u","uuid":"9bd8e09ea27b48cd} |