欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

HTTP: 请求/响应报文

程序员文章站 2024-02-08 17:56:52
...

HTTP请求报文

HTTP 请求报文通常由请求行、请求头、请求体3部分组成

// 示例
POST /index  HTTP/1.1     	 			// 请求行
Host: localhost:80          			// 请求头 start   
Connection: keep-alive
Content-Length: 268
Accept: */*
Origin: https://www.csdn.net
User-Agent: Mozilla/5.e (Windows NT 19.0; WOM64) Applelebkit/537.36 (KHTML, like Gecko)
Content-Type: text/plain; charset-UTF-8
Referer: https://mp.csdn.net/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: Hm_ct_6bcd52f51e9b3dce32bec4a3997715ac-1788*1*PC-vC;kd_user_id-14930744-f54942iix19Vxx2HnavjE%2820%28MXW4PT6G82FJ5%2FWCMTrS2fyNokR%2BMn9A48XOLFRyKYA00%2FhhMPW45CM9SyA00%2FhNMPw45catEJSMBcchCJaa3TvilPd7OU3HV9iVCFOgEnLPCJuz22%2FMCY4B6NDb3RolkusnrcEmountain     // 请求头 end

name=tom&k=v&key=value		// 请求体

报文首行为请求行,使用\r\n换行符换行,之后为请求头,请求头每个属性一次换行,当遇到连续两个\r\n时,请求头结束,后面的数据全部是请求体。

请求行

请求行由请求方法、请求地址、协议及版本3部分组成

请求方法

包括GET和POST等HTTP方法

请求地址

对应此次请求的URL路径,和请求头中的Host属性组合为此次请求完整URL

请求头

请求头由若干个形如key:val的属性组成,服务端据此获取客户端信息

常见HTTP请求头属性

Accpet: */ *,text/html,application/xml,image/jpeg
客户端接收的响应数据类型

Accept-Encoding: gzip
客户端接收的响应数据编码格式,通常为压缩形式

Accept-Charset: utf-8
客户端接收的响应数据字符集

Accept-Language: en-US,zh-CN
客户端接受的响应内容语言列表

Cache-Control:max-age=0, private, must-revalidate
指定当前请求缓存控制

Connection: keep-alive
客户端(浏览器)想要优先使用的连接类型

Content-Length: 348
请求体的长度,以8进制表示

Content-Type:application/x-www-form-urlencoded
请求体的MIME类型 (用于POST和PUT方式)

Cookie: key=value; k=v;
客户端的HTTP协议Cookie,服务端通过Set-Cookie设置在

Host: www.baidu.com
请求资源所在虚拟主机和端口

If-Match: “9jd00cdj34pss9ejqiw39d82f20d0ikd”
仅当用户上次更新某个资源后,该资源未被修改的情况下,则更新该资源(主要用于像 PUT 这样的方法)。

If-None-Match: "9jd00cdj34pss9ejqiw39d82f20d0ikd"允许当用户上次更新某个资源后,该资源未被修改的情况下,返回304未修改( 304 Not Modified )

If-Modified-Since: Dec, 26 Dec 2015 17:30:00 GMT
当用户上次更新某个资源后,该资源未被修改的情况下,返回304未修改( 304 Not Modified )

If-Unmodified-Since: Dec, 26 Dec 2015 17:30:00 GMT
仅当用户上次更新某个资源后,该资源未被修改的情况下,则发送回应

Referer: www.baidu.com
请求链接来源,如从百度搜索到csdn文章,当点击搜索结果进入这个文章页面时,这个请求报文的Referer就是www.baidu.com

User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36
客户端用户代理类型及版本,通常是浏览器,也有其他类型,如wget、curl搜索引擎蜘蛛等

Origin: http://www.baidu.com
发起一个针对CORS(跨域资源共享)的请求(该请求要求服务器在响应中加入一个Access-Control-Allow-Origin的消息头,表示访问控制所允许的来源)

请求体

HTTP的请求体为请求多携带的数据,通常以param1=val1&parma=2的键值对形式编码成一个格式化串,既可以通过请求体携带,也可以通过URL参数形式携带

HTTP响应报文

HTTP响应报文与请求报文一样,由三个部分组成(响应行,响应头,响应体)

// 示例
HТТP/1.1 200 OK 		// 响应行 
Server: openresty	    // 响应头 start
Date: Sun, 21 oct 2018 11:06:18 GMT
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=20
Access-Control-Allow-Origin: https://mp.csdn. net
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: DNT, X-CustomHeader, Keep-Alive,User-Agent, X-Reauested-With    // 响应头 end

 "{\"name\":\"tom\"}"   // 响应体

响应行

响应行由协议及版本和状态码组成

响应头

响应头由若干个形如key:val的属性组成,服务端以此指定客户端获取的数据参数

HTTP响应头常见属性

Access-Control-Allow-Origin: *
指定可以跨域源资源共享的来源

Access-Control-Allow-Credentials: true
指定可以跨域源资源共享能否使用cookie

Access-Control-Allow-Method: GET, POST, OPTIONS
指定可以跨域源资源共享的请方式

Access-Control-Allow-Headers: DNT, X-CustomHeader, Keep-Alive,User-Agent, X-Reauested-With
指定可以跨域源资源共享的请求头配置项

Allow: GET,POST
对于特定资源的有效动作;

Cache-Control: max-age=3600
指定返回给客户端内资源使用的缓存机制 ,表示它们是否可以缓存这个对象及缓存有效时间。其单位为秒

Connection: close
针对当前连接所预期的选项

Content-Encoding: gzip
响应资源所使用的编码类型

Content-Language: zh-CN
响应数据所使用的语言

Content-Type: application/json; charset=utf-8
当前内容的MIME类型和字符集

Content-Length: 348
响应消息体的长度,用8进制字节表示

Date: Thu, 01 Dec 2020 16:00:00 GMT
响应的日期

ETag: “737060cd8c284d8af7ad3082f209582d”
请求资源版本标签,如果该资源发生变化,该属性会随之变化

Expires: Thu, 01 Dec 2020 16:00:00 GMT
指定一个日期/时间,超过该时间则认为此回应已经过期

Keep-Alive:timeout=20
设置请求资源的超时时间

Last-Modified: Dec, 26 Dec 2015 17:30:00 GMT
请求资源最后修改日期(按照 RFC 7231 中定义的“超文本传输协议日期”格式来表示)

Location: http://www.itbilu.com/nodejs
在重定向中或者创建新资源时使用

Refresh: 5; url=http://itbilu.com
用于重定向,或者当一个新的资源被创建时。默认会在5秒后刷新重定向。

Server: nginx/1.6.3
服务器的名称

Set-Cookie:UserID=itbilu; Max-Age=3600; Version=1
服务端 设置 客户端的 HTTP cookie

Status: 200 OK
通用网关接口的响应头字段,用来说明当前HTTP连接的响应状态。

响应体

响应体的数据类型由Content-Type属性确定,如果是网页,响应体就是text/html文本,如果是图片,响应体就是图片的二进制数据。
当存在Content-Encoding时,响应体数据是被压缩的,最常见的压缩方式是gzip,当看到Content-Encoding: gzip时,需要将响应体数据先解压缩,才能得到真正的数据。压缩的目的在于减少响应体的大小,加快网络传输。

相关标签: TCP/IP