HTTP 协议

HTTP请求:Hyper Text Transfer Protocol的缩写,即超文本传输协议。

请求头
GET :获取一个资源,同时参数直接跟在URL后面,url长度受限制2048字节
POST:不仅可以获取资源,还可以提交资源(譬如上传文件),参数放在请求体中,包大小4G
HEAD:只要响应头,没有响应体,通常用于测试URL是否存在
DELETE:删除一个资源
PUT:通常修改一个资源

常用的头字段
Host:ip 指定主机名称
Connection:Keep-Alive 或者 close 建立的请求通路保持激活
Accept:能接受的文件类型
Accept-Encoding :接受的内容类型,通常是gzip压缩的格式
Accept-Language :能接受的语言 zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 q优先级
User-Agent:指定客户端的信息
Range:bytes=100-200 只访问某部分内容,访问100-200字节的内容
Range:bytes= 100- 访问从100个字节之后的所有内容,实现断点续传的原理
Authorization:认证字段 ,把你的用户名和密码放到该字段后
Cache-control:是否缓存,如果缓存,从本地拿数据,不会请求网络
If-Modified-Since :日期,如果服务器判断指定的日期,决定缓存是否失效

响应头
Content-Length:响应体的长度
Server:服务器的信息
Content-Type:内容的类型,text/html,xml等
Last-Modified :最有的修改日期,通常跟缓存相关 20151108
Location: 新的地址
 

一、HTTP协议的结构

HTTP报文由客户机到服务器的请求和从服务器到客户机的相应构成。

1、请求报文的组成:

请求行信息头请求头实体头报文主体

请求行的格式如下:

Method [分隔符] Request - URL [分隔符] HTTP-Version CRLF

解释说明:

  (1)Method 表示完成Request - URL的方法,该字段是大小写敏感的,据RFC2616标准(现行的HTTP/1.1)得知,通常有以下8种方法:

OPTIONS请求获得由Request-URI标识的资源在请求/响应的通信过程中可以使用的功能选项
HEADHEAD方法跟GET方法相同,只不过服务器响应时不会返回消息体
PUT把消息本体中的消息发送到一个URL,跟POST类似
TRACE是用来调用一个远程的请求信息应用程序层的循环后退
CONNECTHTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
DELETE请求服务器删除Request-URI所标识的资源
GET由客户端请求服务端获取Request-URI所标识的资源的方法
POST由客户端向服务端提交Request-URI所标识的资源后附加新的数据

  (2)[分隔符]为空格

  (3)Request - URL: 遵循URL格式,此字段为星号(*)时,说明请求并不用于某个特定的资源地址,而是用于服务本身。

  (4)HTTP-Version:表示支持的HTTP版本,如HTTP/1.1

  (5)CRLF:表示换行回车符

    HTTP的头包括通用的信息头、请求头、响应头、实体头4部分,每个头域由一个域名、冒号和值域3部分组成。域名是大小写无关的;域值前可以添加任何数量的空格,每个HTTP请求可以包含多个HTTP头域。

    HTTP报文主体则包含了HTTP请求的内容,对于get方法,报文主体为空,对于post方法,报文主体则包含需要发送给服务器的数据。

2、响应报文的组成:

状态行信息头响应头实体头报文主体

解释说明:

  (1)状态行由状态码和原因分析两部分组成,其中,状态码由3位数字组成,表示请求是否被理解或被满足,用来支持自动操作;原因分析是对原文的状态码作简单的描述,用于供用户使用。

3、无论是请求报文还是响应报文,虽然分别由以上五个部分组成,但是在一定情况下有些并不是必须要的,但是对于:General-header(通用头部)、请求头(客户端->服务器[Request  Header])、响应头(服务端->客户端[Response Header])  这三部分是必须要有的。于是我那一个实例来对这三部分的内容进行说明记录:

(1)General-header(通用头部)

1 Request URL: http://115.148.141.110:8980/v1/purchase/list     # 请求的URL地址(包含请求类型、请求域名、请求端口、请求地址)
2 Request Method: POST                               # 请求方式
3 Status Code: 200 OK                                            # 响应的状态码、结果 
4 Remote Address: 127.0.0.1:8899                                 # 请求的远程地址       
5 Referrer Policy: no-referrer-when-downgrade                    # referrer策略(五种方法)

(2)请求头(客户端->服务器[Request  Header]) --以下数据是通过fidder抓取所得(关于Fidder基本说明的去这里:https://www.cnblogs.com/Zhan-W/p/9813218.html)。

复制代码

 1 POST /v1/purchase/list HTTP/1.1                      # 请求方式、请求地址、请求所使用的协议和版本
 2 Host: 115.157.151.673:8180                           # 目标主机地址和端口号
 3 Connection: keep-alive                                  # 维护客户端和服务端的连接关系 
 4 Content-Length: 68                                      # 描述HTTP消息实体的传输长度
 5 Accept: application/json, text/javascript, */*; q=0.01         #发送端(客户端)希望接受的数据类型、q 是权重系数,范围 0 =< q <= 1,q 值越大,请求越倾向于获得其“;”之前的类型表示的内容
 6 Origin: http://apptest.zhidianlife.com:8007            # 浏览器在referrer字段中只显示源网站的源地址(即协议、域名、端口),而不包括完整的路径  
 7 Authorization: c81e7286507f4aa4b6179f4c381b4c64          # 请求所需的认证信息
 8 User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64)      AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36          # 客户端版本号的名字
 9 Content-Type: application/json                     # 请求实体,文档类型
10 Referer: http://apptest.zhidianlife.com:8007/procurement/order?_t=756512&_winid=w9290         #  从来于哪里
11 Accept-Encoding: gzip, deflate                        # 客户端接收编码类型,一些网络压缩格式: gzip, deflate
12 Accept-Language: zh-CN,zh;q=0.9                      # 客户端接收的语言类型 、中文

复制代码

(3)响应头(服务端->客户端[Response Header])

复制代码

1 HTTP/1.1 200 OK                                       # 请求协议以及本版、请求状态码
2 Date: Tue, 02 Jul 2019 14:07:31 GMT                     # 服务端响应客户端的内容过期时间
3 Content-Type: application/json; charset=utf-8                 # 服务端发送的类型及采用的编码方式
4 Server: Kestrel                                   # WEB 服务器 服务端的Web服务端名
5 Vary: Origin                                   # WEB服务器用该头部的内容告诉 Cache 服务器,在什么条件下才能用本响应所返回的对象响应后续的请求
6 Access-Control-Allow-Credentials: true                  # 允许运行客户端携带证书式访问   
7 Access-Control-Allow-Origin: http://apptest.zhidianlife.com:8007
8 Content-Length: 33310                             # 允许指定的域名、地址访问

复制代码

 其中涉及到前端页面性能问题的字段主要有以下:Accept-Encoding、Connection、Date

3、GET与POST请求过程

复制代码

POST请求的过程:

  1. 浏览器请求tcp连接(第一次握手)
  2. 服务器答应进行tcp连接(第二次握手)
  3. 浏览器确认,并发送post请求头(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
  4. 服务器返回100 Continue响应
  5. 浏览器发送数据
  6. 服务器返回200 OK响应

GET请求的过程:

  1. 浏览器请求tcp连接(第一次握手)
  2. 服务器答应进行tcp连接(第二次握手)
  3. 浏览器确认,并发送get请求头和数据(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
  4. 服务器返回200OK响应

复制代码

4、HTTP状态码的分类

分类分类描述
1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4**客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误

常用字段说明

URI:统一资源标识符,不仅可以标识http,ftp等其他的网络资源
URL:统一资源定位符

通用首部字段(General Header Fields):

请求报文和响应报文两方都会使用的首部。

Cache-Control:控制缓存的行为

例:Cache-Control: private, max-age=0, no-cache

缓存请求指令
指令参数说明
no-cache强制向源服务器再次验证
no-store不缓存请求或响应的任何内容
max-age=[秒]必需响应的最大Age值
max-stale(=[秒])可省略接收已过期的响应
min-fresh=[秒]必需期望在指定时间内的响应仍有效
no-transform代理不可更改媒体类型
only-if-cached从缓存获取资源
cache-extension-新指令标记(token)

缓存响应指令
指令参数说明
public可向任意方提供响应的缓存
private可省略仅向特定用户返回响应
no-cache可省略缓存前必须先确认其有效性
no-store不缓存请求或响应的任何内容
no-transform代理不可更改媒体类型
must-revalidate可缓存但必须再向源服务器进行确认
proxy-revalidate要求中间缓存服务器对缓存的响应有效性再进行确认
max-age=[秒]必需响应的最大Age值
s-maxage=[秒]必需公共缓存服务器响应的最大Age值
cache-extension-新指令标记(token)

Connection:逐跳首部、管理持久连接。不再转发的首部字段名。

Date:创建报文的日期时间

Pragma:报文指令

Trailer:报文末端的首部一览

Transfer-Encoding:指定报文主体的传输编码方式

Upgrade:升级为其他协议

Via:代理服务器的相关信息

Warning:错误通知

请求首部字段(Request Header Fields)

从客户端向服务器发送求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关优先级等信息。

Accept:用户代理可处理的媒体类型

Accept-Charset:优先的字符集

Accept-Encoding:优先的内容编码

Accept-Language:优先的语言(自然语言)

Authorization:Web认证信息

Expect:期待服务器的特定行为

From:用户的电子邮箱地址

Host:请求资源所在服务器

If-Match:比较实体标记(ETag)

If-Modified-Since:比较资源的更新时间

If-None-Match:比较实体标记(与If-Match相反)

If-Range:资源未更新时发送实体Byte的范围请求

If-Unmodified-Since:比较资源的更新时间(与If-Modified-Since相反)

Max-Forwards:最大传输逐跳数

Proxy-Authorization:代理服务器要求客户端的认真信息

Range:实体的直接范围请求

Referer:对请求中URI的原始获取方

TE:传输编码的优先级

User-Agent:HTTP客户端程序的信息

响应首部字段(Response Header Fields)

从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会请求客户端附加额外的内容信息。

Accept-Ranges:是否接受字节范围请求

Age:推算资源创建经过时间

ETag:资源的匹配信息

Location:令客户端重定向至指定URI

Proxy-Authenticate:代理服务器对客户端的认真信息

Retry-After:对再次发起请求的时机请求

Server:HTTP服务器的安装信息

Vary:代理服务器缓存的管理信息

WWW-Authenticate:服务器对客户端的认真信息

实体首部字段(Entity Header Fields)

针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体相关的信息。

Allow:资源可支持的HTTP方法

Content-Encoding:实体主体适用的编码方法

Content-Language:实体主体的自然语言

Content-Length:实体主体的大小(单位:字节)

Content-Location:替代对应资源的URI

Content-MD5:实体主体的报文摘要

Content-Range:实体主体的位置范围

Content-Type:实体主体的媒体类型

Expires:实体主体过期的日期时间

Last-Modified:资源的最后修改日期时间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值