1.请求结构
请求包含:请求头和请求体
一般post请求中包好请求体
2. 请求方式
http1.0定义了三种请求方法:get、post、head方法
http1.1新增了五种请求方法:options、put、delete、trace和connect方法。
序号 | 方法 | 描述 |
1 | get | 请求指定的页面信息,并返回实体主体 |
2 | post | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。post请求可能会导致新的资源的建立或资源的修改;一般不会被删除。 |
3 | head | 类似于get请求,只不过返回的相应内容没有具体的内容,用于获取报头。这一方法可以在不必传输整个响应内容的情况下,就可以获取版旱灾响应消息头中的信息。 |
4 | put | 从客户端向服务器传送的数据取代指定的文档的内容。向指定资源位置上传最新内容; |
5 | delete | 请求服务器删除指定页面 |
6 | connect | http1.1协议中预留给能够将连接改为管道方式的代理服务器 |
7 | options | 允许客户端查看服务器的性能。返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送’*‘的请求来测试服务器的功能性; |
8 | trace | 回显服务器收到的请求,主用于测试或诊断; |
3.请求头
(1)解析
例:fiddle抓包下图
第一行为请求行
请求行中 第一部分为请求方法(下图为get方法)
第二部分为请求地址即URL
第三部分为http版本
其他部分为request-head请求首部
(2)首部常用部分:
参考:https://www.jianshu.com/p/18d7b0c08393
head | 解释 | 示例 |
host | 用于指定请求资源的主机IP和端口号,其内容为请求URL的原始服务器或网关的位置。从http1.1开始请求中必须包含此内容; | host:www.fiddler2.com |
Accept | 请求对象类型,用于指定客户端可以接收哪些类型的信息; | Accept:text/plain,text/html |
Accept-Encoding | 指定浏览器可以支持的web服务器返回内容压缩编码类型 | Accept-Encoding:compress,gzip |
Accept-Language | 指定浏览器可接受的语言 | Accept-Language:en,zh |
connection | 表示是否需要持久连接 | connection:close |
Cookie | http请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器;cookie是网站为了辨别用户进行session跟踪而存储在用户本地的数据。 | cookie:$Version=1;skin=new; |
Content-Type | 互联网媒体类型,也叫做MIME类型。使用它来表示具体请求中的媒体类型 | Content-Type:application/x-www-form-urlencoded【表示表单数据】; text/html【表示HTML格式】; image/gif【表示GIF图片】; application/json【表示json类型】; |
Referer | 此内容用来标识这个请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理,如做来源统计 | Referer:http://www.zcmhi.com/archives/71.html |
User-Agent | User-Agent的内容包含发出请求的客户端使用的操作系统、浏览器、及版本等信息; | User-Agent:Mozilla/5.0(Linux;x11) |
Accept-Charset | 浏览器可以接受的字符编码集 | Accept-Charset:iso-8859-5 |
Accept-Ranges | 可以请求网页实体的一个或者多个子范围字段 | Accept-Ranges:bytes |
Authorization | http授权的授权证书 | Authorization:Basic AWxhZGRpbjpvcGVuIHNlc2FtZQ== |
cache-Control | 指定请求和响应遵循的缓存机制 | cache-Control:no-cache |
content-Length | 请求的内容长度 | content-Length:348 |
Date | 请求发送的日期和时间 | Date:Tue,15 nov 2010 08:12:31GMT |
Expect | 请求的特定的服务器行为 | Expect:100-continue |
From | 发出请求的服务器的域名和端口号 | host:www.zcmhi.com |
if-Match | 只有请求内容与实体相匹配才有效 | if-Match:“737060cd8c284d8af7ad3082f209582d” |
if-Modified-Since | 如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码 | if-Modified-Since:sat,29 oct 2010 19:43:31 GMT |
if-none-match | 如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变 | if-none-match:“737060cd8c284d8af7ad3082f209582d” |
if-Range | 如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。参数也为Etag | if-Range:"737060cd8c284d8af7ad3082f209582d " |
if-Unmkdified-Since | 只在实体在指定时间之后未被修改才请求成功 | if-Unmkdified-Since:sat,29 oct 2010 19:43:31 GMT |
max-Forwards | 限制信息通过代理和网关传送的时间 | max-Forwards:10 |
pragma | 用来包含实现特定的指令 | pragma:no-cache |
proxy-Authorization | 连接到代理的授权证书 | proxy-Authorization:Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== |
Range | 只请求实体的一部分,指定范围 | Range :byte=500-999 |
TE | 客户端愿意接受的传输编码,并通知服务器接受尾加头信息 | TE:trailers,deflate;q=0.5 |
Upgrade | 向服务器指定某种传输协议以便服务器进行转换(如果支持) | Upgrade:Http/2.0,SHTTP/1.3,IRC/ |
Via | 通知中间网关或代理服务器地址,通信协议 | Vis:1.1 fred,1.1 nowhere.com(Apache/1.1) |
Warning | 关于消息实体的警告信息 | warn:199 Miscellaneous warning |
4.请求体
(1)一般用于post请求中,主要定义向服务器提交的数据类型,而对于Get请求Request body则为空。比如:在登录时我们填写的用户名和密码信息,提交时这些信息就会以data的形式提交给服务器。
(2)常用的content-type与post提交数据方式的关系
Content-type | 提交数据方式 |
application/x-www-form-urlencoded | form表单提交 |
multipart/form-data | 表单文件上传提交 |
application/json | 序列化json数据提交 |
text/xml | xml数据提交 |
PS:application/x-www-form-urlencoded 与 multipart/form-data的区别
- 在没有type-file的时候,用默认的application/x-www-form-urlencoded就行
- 在有type-file的时候,要用multipart/form-data编码方式。浏览器会把表单以控件为单位分隔,并且为每个部分加上content-pispostion(form-data或file)/content-type(默认text/plain)、name(控件name)信息,并加上分隔符(boundary)
5. get请求与post请求的区别
(1)get请求内容在URL里面,post请求内容在请求体中;
(2)get请求向特定的资源发送请求;
(3)post请求向指定资源提交数据进行处理请求(例如提交表单);
(4)post请求可能会导致新的资源的建立或已有资源的修改;