大家好,又见面了,我是你们的朋友全栈君。
注意: 客户端与服务器的角色不是固定的,一端充当客户端,也可能在某次请求中充当服务器。这取决与请求的发起端。HTTP协议属于应用层,建立在传输层协议TCP之上。客户端通过与服务器建立TCP连接,之后发送HTTP请求与接收HTTP响应都是通过访问Socket接口来调用TCP协议实现。
协议
无状态
客户端/服务端模型
七层网络模型
以下是 HTTP 请求/响应的步骤:
例如:在浏览器地址栏键入URL,按下回车之后会经历以下流程:
基于 请求-响应 的模式
无状态保存
无连接
URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。
URI一般由三部组成:
URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。
URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,特别是著名的Mosaic。
URL一般由三部组成:
URL,全称是UniformResourceLocator, 中文叫统一资源定位符,是互联网上用来标识某一处资源的地址。以下面这个URL为例,介绍下普通URL的各部分组成:
从上面的URL可以看出,一个完整的URL包括以下几部分:
Http请求消息结构
服务端响应客户端格式:状态行,响应头,响应体
Http响应消息结构
分类
分类描述
1**
信息,服务器收到请求,需要请求者继续执行操作
2**
成功,操作被成功接收并处理
3**
重定向,需要进一步的操作以完成请求
4**
客户端错误,请求包含语法错误或无法完成请求
5**
服务器错误,服务器在处理请求的过程中发生了错误
但一般我们只需要知道几个常见的就行,比如 :
方法
描述
GET
GET请求会显示请求指定的资源。一般来说GET方法应该只用于数据的读取,而不应当用于会产生副作用的非幂等的操作中。它期望的应该是而且应该是安全的和幂等的。这里的安全指的是,请求不会影响到资源的状态。
POST
向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
PUT
PUT请求会身向指定资源位置上传其最新内容,PUT方法是幂等的方法。通过该方法客户端可以将指定资源的最新数据传送给服务器取代指定的资源的内容。
PATCH
DELETE
DELETE请求用于请求服务器删除所请求URI(统一资源标识符,Uniform Resource Identifier)所标识的资源。DELETE请求后指定资源会被删除,DELETE方法也是幂等的。
OPTIONS
允许客户端查看服务器的性能。
CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
HEAD
类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头。
TRACE
回显服务器收到的请求,主要用于测试或诊断。
注意事项:
注意最后一行是空行
POST提交:把提交的数据放置在是HTTP包的包体中。上文示例中红色字体标明的就是实际的传输数据
2. 传输数据的大小
3. 安全性
我们看看GET和POST的区别
名称
作用
Content-Type
请求体/响应体的类型,如:text/html、application/json
Accept
说明接收的类型,可以多个值,用,(半角逗号)分开
Content-Length
请求体/响应体的长度,单位字节
Content-Encoding
请求体/响应体的编码格式,如gzip,deflate
Accept-Encoding
告知对方我方接受的Content-Encoding
ETag
给当前资源的标识,和Last-Modified、If-None-Match、If-Modified-Since配合,用于缓存控制
Cache-Control
取值为一般为no-cache或max-age=XX,XX为个整数,表示该资源缓存有效期(秒)
常见的媒体格式类型如下:
Content-Type(Mime-Type)
描述
text/html
HTML格式
text/plain
纯文本格式
text/xml
XML格式
image/gif
gif图片格式
image/jpeg
jpg图片格式
image/png
png图片格式
以application开头的媒体格式类型:
Content-Type(Mime-Type)
描述
application/xml
XML数据格式
application/json
JSON数据格式
application/pdf
pdf格式
application/msword
Word文档格式
application/octet-stream
二进制流数据(如常见的文件下载)
application/x-www-form-urlencoded
form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)
multipart/form-data
需要在表单中进行文件上传时,就需要使用该格式
名称
作用
Authorization
用于设置身份认证信息
User-Agent
用户标识,如:OS和浏览器的类型和版本
If-Modified-Since
值为上一次服务器返回的 Last-Modified 值,用于确认某个资源是否被更改过,没有更改过(304)就从缓存中读取
If-None-Match
值为上一次服务器返回的 ETag 值,一般会和If-Modified-Since一起出现
Cookie
已有的Cookie
Referer
表示请求引用自哪个地址,比如你从页面A跳转到页面B时,值为页面A的地址
Host
请求的主机和端口号
名称
作用
Date
服务器的日期
Last-Modified
Transfer-Encoding
取值为一般为chunked,出现在Content-Length不能确定的情况下,表示服务器不知道响应版体的数据大小,一般同时还会出现Content-Encoding响应头
Set-Cookie
设置Cookie
Location
Server
后台服务器
所以应充分利用两者各自的优势, 将多种方法组合起来用于通信。 在交换密钥阶段使用公开密钥加密方式,之后的建立通信交换报文阶段 则使用共享密钥加密方式。
HTTPS握手过程的简单描述如下:
客户端在使用HTTPS方式与Web服务器通信时有以下几个步骤,如图所示。