网络原理-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 Host: gitee.com Connection: keep-alive Content-Length: 107389 sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91" Accept: */* X-CSRF-Token: 6ROfZGr4Y7Qx8td1TuKCnrG8gbODLCSUqUBZSw2b+ac= X-Requested-With: XMLHttpRequest sec-ch-ua-mobile: ?0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Origin: https://gitee.com Sec-Fetch-Site: same-origin Sec-Fetch-Mode: cors Sec-Fetch-Dest: empty Referer: https://gitee.com/HGtz2222 Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9,en;q=0.8 Cookie: oschina_new_user=false; user_locale=zh-CN; yp_riddler_id=1ce4a551-a160-4 avatar=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAPgAAAD4CAYAAADB0Ss |

2.multipart/form-data

对上传简历功能进行抓取:

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| POST https://v.bitedu.vip/tms/oss/upload/file HTTP/1.1 Host: v.bitedu.vip Connection: keep-alive Content-Length: 293252 sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91" Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjFiYThjMDM5L sec-ch-ua-mobile: ?0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, Content-Type: multipart/form-data; boundary=----WebKitFormBoundary8d5Rp4eJgrUSS3 Accept: */* Origin: https://v.bitedu.vip Sec-Fetch-Site: same-origin Sec-Fetch-Mode: cors Sec-Fetch-Dest: empty Referer: https://v.bitedu.vip/personInf/student?userId=665 Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9,en;q=0.8 Cookie: rememberMe=true; username=18691491410; Admin-Token=eyJhbGciOiJIUzUxMiJ9 ------WebKitFormBoundary8d5Rp4eJgrUSS3wT Content-Disposition: form-data; name="file"; filename="李星亚 Java开发⼯程师.pdf" Content-Type: application/pdf %PDF-1.7 %³ 1 0 obj <</Names <</Dests 4 0 R>> /Outlines 5 0 R /Pages 2 0 R /Type /Catalog>> endobj 3 0 obj <</Author ( N v~N) /Comments () /Company () /CreationDate (D:20201122145133+06' endobj 13 0 obj <</AIS false /BM /Normal /CA 1 /Type /ExtGState /ca 1>> endob |

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} |

相关推荐
渡我白衣3 小时前
HTTPS协议原理
网络协议·http·https
智能化咨询3 小时前
“爬虫逆向——RPC技术”在反爬对抗中的破局实践:从Hook到链路级伪造
网络
豆浆whisky4 小时前
netpoll性能调优:Go网络编程的隐藏利器|Go语言进阶(8)
开发语言·网络·后端·golang·go
无敌最俊朗@5 小时前
TCP/IP 四层模型协作流程详解
服务器·网络·网络协议·tcp/ip·dubbo
梅见十柒5 小时前
Linux/UNIX系统编程手册笔记:POSIX
linux·服务器·网络·笔记·tcp/ip·udp·unix
青草地溪水旁6 小时前
SOME/IP-SD报文结构和交互详解
网络协议·tcp/ip·交互
深圳南柯电子6 小时前
纯电汽车emc整改:设计缺陷到合规达标的系统方案|深圳南柯电子
网络·人工智能·汽车·互联网·实验室·emc
弗里德姆6 小时前
DIY主机无网络安装PVE全记录:手机热点+笔记本网络共享实战
服务器·网络·pve
科技风向标6 小时前
2025 随身 WiFi 行业报告:格行 WiFi6 技术下放百元市场,中兴华为机型竞争力分析;五款机型芯片方案 / 网速 / 质保深度横评
网络·科技·物联网·华为·随身wifi·格行