HTTP协议

目录

1、HTTP工作流程

1、HTTP报文格式

1.1 HTTP请求报文(request)

1.1.1 请求行

①Request Method

②Request URL

③Request Version

1.1.3 请求头Request Header

①Host

②Content-Length

③Content-Type

④User-Agent

⑤Referer

⑥Cookie

1.1.4 请求体Request Body

1.2 HTTP响应(Response)

1.2.1 状态行

①Response Version

②Status Code

③Response Phrase

1.2.2 响应头

①Date

②Server

③Location

④Cache-Control

⑤Connection

⑥Content-Length

⑦Content-Type

1.2.3 响应体


1、HTTP工作流程

 

2、HTTP报文格式

HTTP报文格式均为“请求/状态行+消息头+消息体”的格式,分为两类报文:请求报文、响应报文。

HTTP事务=HTTP请求+HTTP响应

2.1 HTTP请求报文(request)

由客户端发往服务器,分为四部分:请求方法(Request Method)、请求的网址(Request URL)、请求头(Request Headers)、请求体(Request Body)

2.1.1 请求行
①Request Method

其中GET、POST较为常用:

GET:是最常用的 HTTP 方法,常用于获取服务器上的某个资源。GET 传递数据时,会把数据放到 URL的 query 中。例如在百度中搜索“any”,则发起一个GET请求,地址中就会出现若干键值对,其中一个就包含我们的输入的请求“any”。

常见的构造GET请求的场景:

        -浏览器地址栏中输入URL

        -form表单<form method="get">

        -html里img标签引入图片

POST:也是一种常见的方法,常用于提交用户输入的数据给服务器,例如登陆页面等。

常见的构造POST请求的场景:

        -form表单<form method="post">

②Request URL

请求网址,可以唯一确定客户端想要请求的资源,也就是URL。

③Request Version

协议版本号,如HTTP/1.1、HTTP/2.0等

2.1.3 请求头Request Header

请求头,用来说明服务器要使用的附加信息,这些信息一般不止一条,整体结构呈现“键值对”的格式,每个键值对占一行,键和值之间用分号分割。这些信息种类很多,主要有:

①Host

表示服务器主机的地址和端口,一般Host的值就是 地址 + 端口,此处地址可以是域名也可以是IP,端口可以省略。

②Content-Length

表示body中的数据长度。若报文没有body,则不带content-length字段。

③Content-Type

表示请求的body中的数据格式。body 中的数据可以放很多种格式,决定文件接收方将以什么形式、什么编码解析这个文件。

常见的形式:

application/x-www-form-urlencoded: form 表单提交的数据格式

multipart/form-data: form 表单提交的数据格式(在 form 标签中加上enctyped="multipart/form-data" ,通常用于提交图片/文件)

application/json: 数据为 json 格式

④User-Agent

简称UA,这是一个特殊的字符串头,可以是服务器识别客户端使用的操作系统即版本、浏览器即版本等信息。

⑤Referer

用于标识请求是从哪个页面发送过来的,服务器可以拿到这一信息并做相应的处理,如做来源设计、防盗链等处理。

⑥Cookie

Cookie 是浏览器提供的一种让程序员在本地存储数据的能力。

如果没有 Cookie,直接将要存储的数据保存在客户端浏览器所在的主机的硬盘上,那么就会出现很大的安全风险,比如当你不小心打开某个不安全的网站,该网站就可以在你的硬盘上写一个病毒程序,那么你的电脑就挂了!因此浏览器为了保证安全性,就禁止网页中的代码访问主机的硬盘(无法在 JS 中读写文件),因此也就失去了持久化存储的能力,故 Cookie 就很重要!

Cookie 中存储了一个字符串,是键值对结构的。这个数据可能是客户端(网页)自行通过 JS 写入的,也可能来自于服务器在 HTTP 响应的 header 中通过 Set-Cookie 字段给浏览器返回数据。

2.1.4 请求体Request Body

请求体,一般承载的内容是 POST 请求中的表单数据,对于 GET 请求,请求体为空。

2.2 HTTP响应(Response)

由服务器返回给客户端,可以分为三个部分: 状态行、响应头、响应体。

2.2.1 状态行

状态行 = 协议版本 + 状态码 + 状态码描述。

①Response Version

协议版本与请求报文一致

②Status Code

状态码,是一个数组。描述了当前这次请求的“状态”(成功,失败,失败的原因)

状态码有很多种,主要分为五类:1xx、2xx、3xx、4xx、5xx。下面列举出各个分类常见的状态码:

1xx:信息响应
2xx:成功响应
3xx:重定向
4xx:客户端错误
5xx:服务器错误
③Response Phrase

对状态码的简单描述,如:200描述为“OK”,204为“No Content”,302描述为“Found”。

2.2.2 响应头

响应头包含可选的头部信息,用于补充响应的内容和其他信息。提供了关于响应的资源、服务器、缓存验证等信息。响应头中的每个头部字段由“键值对”的格式呈现,每组属性各占一行。常见字段如下:

①Date

消息发送的日期和时间

②Server

服务器告诉浏览器,当前响应的服务类型和版本

③Location

通过该字段携带重定向的目标 URL。

④Cache-Control

指定缓存策略,如缓存的有效期、是否可以缓存等。常见的取值有private、no-cache、max-age、must-revalidate等,默认为private。其作用根据不同的重新浏览方式分为以下几种情况。

public:所有内容都可被缓存(客户端和代理服务器都可缓存)

private:内容只缓存到私有缓存中(仅客户端可以缓存,代理服务器不可缓存)

no-cache:如果存在合适的验证令牌 (ETag),no-cache 会发起往返通信来验证缓存的响应,如果资源未被更改,可以避免下载。

must-revalidation/proxy-revalidation:如果缓存的内容失效,请求必须发送到服务器/代理以进行重新验证

max-age=xxx :缓存的内容将在 xxx 秒后失效, 这个选项只在HTTP 1.1可用, 并如果和Last-Modified一起使用时, 优先级较高

⑤Connection

表示是否为持久连接

Connection:Keep-Alive        表示连接是持久化连接,HTTP1.1版本默认状态。

Connection:close                表示为非持久化连接,每次请求响应后都会断开TCP连接。

⑥Content-Length

指定响应体的长度(以字节为单位)。

⑦Content-Type

指定响应体的媒体类型,以及采用的编码格式。常用类型:

ext/plain:纯文本类型,没有指定字符集,默认使用 ASCII 编码。

text/html:HTML 文档类型,用于表示网页内容。

text/css:CSS 文件类型,用于表示样式表。

application/json:JSON 数据类型,用于表示结构化数据。

application/xml:XML 数据类型,用于表示可扩展标记语言数据。application/octet-stream:二进制流数据类型,用于表示任意二进制数据。

multipart/form-data:在 HTML 表单中上传文件时,将表单数据和文件一起提交。

image/jpeg、image/png、image/gif:表示不同格式的图像文件。

2.2.3 响应体

用于存放需要返回给客户端的数据信息

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值