HTTP请求

一个http请求分为四部分:
* 请求行
* 请求头
* 空行(不可缺少,用于告诉服务器以下部分为请求体)
* 请求体

//http请求
<request-line>
<general-headers>//一般包含时间信息
<request-headers>
<entity-headers>
<empty-line>
[<message-body>]

  • 以一个简单请求为例
GET /api/req.html HTTP/1.1   // 请求方法 URL HTTP协议版本
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36zlib/1.2.3   // 用户代理:用户的客户端信息,操作系统信息等
Host: www.baidu.com   //请求的主机
Accept-Language: zh,zh-CN;q=0.9   //请求接收的语言,按优先级以";"分割
Accept:*/*  //表示接收任何资源类型,可以用多个接受类型的先后顺序来约束

<requestBody>
  • 请求行:GET /req.html HTTP/1.1 请求方法、请求资源URI路径、HTTP版本号
  • 请求头:包括 User-Agent 客户端身份信息 ; Cookie;Accept 接收资源类型等
  • 空行:不可缺少
  • 请求体:请求内容,在GET方式中参数params跟在URL后,请求体并不是必须的

request-line 请求行

一个请求行中 必须包含 请求方法 请求URI地址``HTTP协议版本 三项

Request Method 请求方式

常用请求方式分为 GET , POST , PUT , DELETEHEAD,其中常用GET,POST,PUT,DELETE组成restful风格的api,详见阮老师的文章

GET 请求指定的页面信息,并返回实体主体。
POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
PUT 从客户端向服务器传送的数据取代指定的文档的内容。
DELETE 请求服务器删除指定的页面。
HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头

request-headers 请求头

在请求头中,可以做到希望服务器返回的内容对请求的任务进行约束

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding:gzip, deflate, br
Accept-Language:zh,zh-CN;q=0.9
Cache-Control:no-cache
Connection:keep-alive
Cookie:__cfduid=d03e34b9eccc1f667294a1bf3dccf624d1499140725; BIDUPSID=D8A85EC321E363CAFC0E891039886BAA; PSTM=1499860469;
Host:www.baidu.com
Pragma:no-cache
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36
Referer: https://www.baidu.com/link?url=lKY8QyDaqx5KX7uLN7VgDx4OnFmhxUEID6Dw
Accept: 浏览器可接受的媒体类型, */* 表示可接受所有的类型
Accept-Encoding: 声明自己接受的编码方式,通常为压缩gzip
Accept-Language: en-us 声明自己需要的语言 如GBK gb2312等
Connection: close 代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭
Host:www.baidu.com
Referer:告诉服务器是从哪个页面链接过来的
Referrer policy: 用于约束referrer的参数
//对于 referre和referer这两个拼写都是正确的,最开始拼写错误将错就错
  • Referrer policy 报头约束策略
    在请求头中,有Referret属性,表示此链接由何处而来。在推广页面和好友推荐连接中使用,referrer就是为了限制报头内容,referrer的常用属性值有:
"no-referrer" 不提交referrer
"no-referrer-when-downgrade" 降级时不传递,从https:// 向http:// 传递时可传递
"same-origin" 同源
"origin" 过滤 Referrer 报头,仅传输协议域名端口
"strict-origin" 不能降级的origin
"origin-when-cross-origin" 跨域时和 origin 模式相同,否则 Referrer 传递当前页的全路径
"unsafe-url" 最不安全模式,传输全部地址到referrer

请求体

请求体中为请求的主要内容,主要分为三种形式
在请求中指定 Content-type 属性
对于Content-type,常用于响应头中指定响应的内容类型,现在大多数的请求也指定了Content-type用来约束请求体的类型 application/json text/xml application/x-www-form-urlencoded

application/x-www-form-urlencoded

最常见的是使用键值对的方式传递参数

Content-Type: application/x-www-form-urlencoded;charset=utf-8
title=test&sub1=1&su2b=2&sub3=3

在这样的键值对方式中,多个参数用&连接,键值对用=连接
GET方式直接将参数拼接在url中,在键值对的方式中,传递的参数必须为ASCII码,非ASCII字符需使用UrlEncode编码(在使用Node或其他后端方法转发请求的时候,可以使用url_decode url_encode 方法对uri进行转码)

https://www.baidu.com/s?wd=qustion

application/json

常常做为一个ajax请求的内容进行发送,也有人使用键值对的方式将json做为value发送到服务端。

{
  "status":"success",
  "title":"test",
  "sub":[1,2,3]
}

text/xml

即为XML-RPC:它是一种使用 HTTP 作为传输协议,XML 作为编码方式的远程调用规范.
但是还是json格式使用更多

HTMLPOST http://www.example.com HTTP/1.1 
Content-Type: text/xml

<?xml version="1.0"?>
<methodCall>
    <methodName>examples.getStateName</methodName>
    <params>
        <param>
            <value><i4>41</i4></value>
        </param>
    </params>
</methodCall>

发表评论

电子邮件地址不会被公开。 必填项已用*标注