网络原理-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}

posted @ 2025-10-02 13:23  yxysuanfa  阅读(54)  评论(0)    收藏  举报