前置知识
- HTTP特点
- HTTP协议是基于TCP/IP协议的应用层传输协议,即规范数据传输的一种规则。当客户端和服务器建立TCP连接后,发送HTTP请求和接收HTTP响应都是通过访问Socket接口调用TCP协议实现数据传输
- HTTP是无连接的,即每个连接都只能处理一个请求,当服务器处理完客户端请求并接收到客户端的应答后断开连接。好处在于节省传输时间。可以通过
Connection:Keep-Alive
实现长连接 - HTTP是无状态的,即协议对于事务处理没有记忆功能,若后续的请求处理需要前一次的信息则需要重传,会导致每次传输数据量增大同时服务器响应时间慢。统一通过
Cookie
和Session
技术记录管理状态 - HTTP传输数据多样,允许传输任意类型的数据对象,通过
Content-Type
加以区分数据对象类型
- HTTP常用的请求方法
- GET:用于请求指定页面信息并返回实体主题
- POST:向指定资源提交数据进行处理请求,数据包含在请求体中。POST请求可用于数据新增或修改
- PUT:从客户端先服务器传输数据取代指定文档内容,说白了就是数据更新
- DELETE:请求服务器删除指定的数据
- URL和URI
- URL(统一资源定位符)是对资源的引用和访问该资源的方法,分为绝对URL (http://localhost:8080/images/logo.png) 和相对URL (/images/logo.png),URL组成结构
protocol://hostname:port/path?query#fragment
- URI(统一资源标识符)提供了一种识别资源的方法,但与URL不同的是,URI不提供定位所述资源的方法。URI包含URL
- URL(统一资源定位符)是对资源的引用和访问该资源的方法,分为绝对URL (http://localhost:8080/images/logo.png) 和相对URL (/images/logo.png),URL组成结构
HTTP请求格式说明
HTTP请求由请求行、请求头、请求空行、请求数据四部分组成。以GET和POST方法作为举例说明
请求行
请求行由请求方法、URL、HTTP协议版本组成,用空格分隔。如:GET /images/logo.png HTTP/1.1
请求方法有:GET、POST、DELETE、PUT、HEAD、OPTIONS、TRACE、CONNECT
请求头
请求头由关键字、值组成的键值对,关键字和值之间使用冒号隔开。主要用于告知服务器关于客户端的请求信息。常见的请求头如下
- User-Agent:产生请求的浏览器类型
- Accept:客户端可识别接收的MIME类型
- Accept-Charset:客户端可接受的字符集
- Accept-Encoding:客户端能够进行解码的数据编码方式,如gzip
- Accept-Language:客户端希望的语言种类,当服务器提供多种语言版本可用上
- Host:请求主机名,允许多个域名同处于一个IP地址,即虚拟主机
- Authorization:授权信息
- Content-Type:请求数据格式:
application/x-www-form-urlencoded;charset=utf-8
、multipart/form-data
、application/json;charset=utf-8
- Content-Length:请求信息正文长度
- If-Modified-Since:客户端告知服务器资源缓冲时间。只有当请求的内容在指定的时间后有经过修改才返回它,否则返回 304 Not Modified
- Referer:客户端告知服务器,它是从哪个资源来访问服务器的,用于防盗链。包含一个URL,用户从该URL代表的页面出发访问当前的请求页面
- Cookie:客户端可通过该字段向服务器携带数据。常用语会话
- Cache-Control:是否缓存响应数据
- Connection:处理完此次请求后是否断开连接,HTTP 1.1默认进行持久连接,即
Connection:Keep-Alive
请求空行
请求空行用于告知服务器不再有请求头信息
请求数据
请求数据主要用于携带客户端请求数据,而对于GET方法来说是没有请求数据的。与请求数据相关的请求头字段Content-Type、Content-Length
GET方法请求格式
GET /track-order/orderList?size=10 HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
Cache-Control: no-cache
Connection: keep-alive
Cookie: Hm_lvt_1cd9bcbaae133f03a6eb19da6579aaba=1650029076,1650101520
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36
请求空行
请求数据,由于GET请求方法没有请求体,所以为空
POST方法请求格式
POST /track-order/save HTTP/1.1
Host: localhost:8080
Accept: application/json
Connection: keep-alive
Cookie: Hm_lvt_1cd9bcbaae133f03a6eb19da6579aaba=1650029076,1650101520
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
Accept-Encoding: gzip, deflate, br
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36
Content-Type: application/json;charset=utf-8
Content-Length: 69
{
"orderTime": "2023-02-27 14:32:45",
"orderState": "打开"
}
HTTP响应格式说明
HTTP响应由四部分组成:响应行(状态行)、响应头、响应空行、响应体
响应行(状态行)
响应行组成由:协议版本号、服务器返回的响应状态码、状态码描述
常见状态代码、状态描述
- 200 OK:客户端请求成功
- 3XX:重定向,表示请求没有成功,客户需采取进一步的动作
- 400 Bad Request:客户端请求有语法错误,不能被服务器所理解
- 401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
- 403 Forbidden:服务器收到请求,但是拒绝提供服务
- 404 Not Found:请求资源不存在
- 500 Internal Server Error:服务器发生不可预期的错误
- 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常
响应头
和请求头一样,响应头也包含许多有用的信息,比如服务器类型、日期时间、内容类型和长度等。常见响应头如下
- Allow:服务器支持的请求方法
- Content-length:响应报文的长度,只有当客户端使用持久HTTP连接才需要这个字段
- Content-Type:响应报文的MIME类型,Servlet默认为text/plain,但通常需要显示指定为text/html
- Expires:请求文档过去时间
- Date:当前的GMT时间
- trasfer-encoding:指定报文主体的传输编码方式
- Set-Cookie:设置和页面关联的Cookie
- Refresh:表示客户端应该多少时间后刷新文档,以秒计
响应数据
也就是响应报文,返回格式有JSON、HTML等
响应格式实例
HTTP/1.1 200 OK
transfer-encoding: chunked
Content-Type: application/json;charset=UTF-8
Date: Sat, 04 Mar 2023 07:34:33 GMT
响应主体
标签:HTTP,请求,URL,响应,服务器,格式,客户端
From: https://www.cnblogs.com/52-IT-y/p/17178194.html