http 请求包含哪几个部分,分别有何作用?
Posted 苛学加
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了http 请求包含哪几个部分,分别有何作用?相关的知识,希望对你有一定的参考价值。
http 协议
用了这么久的http请求,你有全面了解过吗?
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。
一、HTTP协议特点
- 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。
- 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
- 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
二、工作流程
- 网址解析
通过DNS域名解析得到主机IP地址
- 封装HTTP请求数据包
将相关参数结合本机信息封装成一个HTTP请求数据包
- 封装成TCP包,建立TCP连接
TCP的三次握手
- 客户机发送请求命令
建立连接后,客户机发送一个请求给服务器
- 服务器响应
服务器接到请求后,给予相应的响应信息
- 服务器关闭TCP连接
一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接
在头部添加
Connection:keep-alive
可以避免TCP链接关闭,节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
三、请求报文
1. 请求行 (general)
求方法字段、URL字段和HTTP协议版本。
请求URL地址 (Request URL)
具体要访问的接口地址,一般为域名或ip加上路径。
如:http://www.xxx.com/api/geiuser
请求方法(Request Method)
常用的HTTP动词有下面五个:
GET
:从服务器取出资源(单个或多个)。POST
:在服务器新建资源。PUT
:在服务器更新资源(客户端提供改变后的完整资源)。PATCH
:在服务器更新(更新)资源(客户端提供改变的属性,比如说某个字段+1)。DELETE
:从服务器删除资源。
还有两个不常用的HTTP动词:
HEAD
:获取资源的元数据。OPTIONS
:获取信息,关于资源的哪些属性是客户端可以改变的。
2. 请求头 (request headers)
以键值对的方式传递数据,常见如:用 Authorization
传递用户 token
值。
Accept
:指定客户端能够接收的内容类型Accept-Charset
:浏览器可以接受的字符编码集。Accept-Encoding
:指定浏览器可以支持的web服务器返回内容压缩编码类型。Accept-Language
:浏览器可接受的语言Accept-Ranges
:可以请求网页实体的一个或者多个子范围字段Authorization
:HTTP授权的授权证书Cache-Control
:指定请求和响应遵循的缓存机制Connection
:表示是否需要持久连接。(HTTP 1.1默认进行持久连接)Cookie
:HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。Content-Length
:请求的内容长度Content-Type
:请求的与实体对应的MIME信息Date
:请求发送的日期和时间Expect
:请求的特定的服务器行为From
:发出请求的用户的EmailHost
:指定请求的服务器的域名和端口号If-Match
:只有请求内容与实体相匹配才有效If-Modified-Since
:如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码If-None-Match
:如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变If-Range
:如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。参数也为EtagIf-Unmodified-Since
:只在实体在指定时间之后未被修改才请求成功Max-Forwards
:限制信息通过代理和网关传送的时间Pragma
:用来包含实现特定的指令Proxy-Authorization
:连接到代理的授权证书Range
:只请求实体的一部分,指定范围Referer
:先前网页的地址,当前请求网页紧随其后,即来路TE
:客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息Upgrade
:向服务器指定某种传输协议以便服务器进行转换(如果支持)User-Agent
:User-Agent的内容包含发出请求的用户信息Via
:通知中间网关或代理服务器地址,通信协议Warning
:关于消息实体的警告信息其他自定义参数
:
3. 请求数据
URL参数
不管是get请求还是post请求,都可以通过url进行传参,参数可以直接拼接在URL后面,问好前面是接口请求的地址,后面是传递的参数,可以是多个用&
连接。URL的传参方式通常用在get请求中,比如获取指定编码对应的详情。
如:百度搜索http关键字https://www.baidu.com/s?wd=http
,其中?
之后的wd=http
就是参数相关信息。
优点: 简单方便,页面跳转比较快。
缺点: 参数长度有限制,过长会被截断;明文传递参数,安全性低;传递特殊字符串时需要进行UrlEncode
编码。
content-type
在请求头中,一般会包含一个content-type
参数,用于告诉服务端传递的什么格式的数据。
常用的格式有:
-
content-type:application/x-www-form-urlencoded
默认的,如果不指定content-type,默认使用此格式。
传递参数同URL的拼接方式:name=xxx&sex=0
。 -
content-type:multipart/form-data
在web端需要上传文件的时候一般使用这个。 -
content-type:application/json
在前后端分离开发的中,json格式是最常用。
传递参数为json对象:{ name:'xxx', sex: 0 }
四、响应报文
1. 状态行
Status Code 表示本次请求的状态。
常见的状态码
-
100:继续 客户端应当继续发送请求。客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应。
-
101: 转换协议 在发送完这个响应最后的空行后,将会切换到在Upgrade 消息头中定义的那些协议。只有在切换新的协议更有好处的时候才应该采取类似措施。
-
102:继续处理 由WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行。
-
200:请求成功 处理方式:获得响应的内容,进行处理
-
201:请求完成,结果是创建了新资源。新创建资源的URI可在响应的实体中得到 处理方式:爬虫中不会遇到
-
202:请求被接受,但处理尚未完成 处理方式:阻塞等待
-
204:服务器端已经实现了请求,但是没有返回新的信 息。如果客户是用户,则无须为此更新自身的文档视图。 处理方式:丢弃
-
300:该状态码不被HTTP/1.0的应用程序直接使用, 只是作为3XX类型回应的默认解释。存在多个可用的被请求资源。 处理方式:若程序中能够处理,则进行进一步处理,如果程序中不能处理,则丢弃
-
301:请求到的资源都会分配一个永久的URL,这样就可以在将来通过该URL来访问此资源 处理方式:重定向到分配的URL
-
302:请求到的资源在一个不同的URL处临时保存 处理方式:重定向到临时的URL
-
304:请求的资源未更新
-
400:非法请求
-
401:未授权 处理方式:丢弃
-
403:禁止 处理方式:丢弃
-
404:没有找到 处理方式:丢弃
-
500:服务器内部错误 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在的源代码出现错误时出现。
-
501:服务器无法识别 服务器不支持当前请求所需要的某个功能。当服务器无法识别请求的方法,并且无法支持其对任何资源的请求。
-
502:错误网关 作为网关或者工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
-
503:服务出错 由于临时的维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间以后恢复。
2. 消息报头
包含服务器类型,日期,长度,内容类型等,常见的如下:
-
Age
:(从最初创建开始)响应持续时间 -
Public
:服务器为其资源支持的请求方法列表 -
Retry-After
:如果资源不可用的话,在此日期或时间重试 -
Server
:服务器应用程序软件的名称和版本 -
Title
:对html文档来说,就是HTML文档的源端给出的标题 -
Warning
:比原因短语更详细一些的警告报文 -
Accept-Ranges
:对此资源来说,服务器可接受的范围类型 -
Vary
:服务器会根据这些首部的内容挑选出最适合的资源版本发送给客户端 -
Proxy-Authenticate
:来自代理的对客户端的质询列表 -
Set-Cookie
:在客户端设置数据,以便服务器对客户端进行标识 -
Set-Cookie2
:与Set-Cookie类似 -
WWW-Authenticate
:来自服务器的对客户端的质询列表
3. 响应正文
响应正文响应正文就是服务器返回的HTML页面或者json等格式的数据。
一般常用的是返回json数据,拿到数据后页面进行相应的处理。
以上是关于http 请求包含哪几个部分,分别有何作用?的主要内容,如果未能解决你的问题,请参考以下文章