01_HTTP 协议
Posted Timber
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了01_HTTP 协议相关的知识,希望对你有一定的参考价值。
这是 Timber 的第 1 篇文章
写在之前
最近在学习 JavaWeb,未来一段时间会一直更新记录相关的知识,一来方便自己总结和复习,二来可以给后来人些许帮助。在这条路上,我一直在前行。欢迎交流学习。
概述
什么是 HTTP 协议
HTTP 代表超文本传输协议 ( HyperText Transfer Protocol ),是用于从万维网服务器传输超文本到本地浏览器的传送协议。
HTTP 协议是 TCP/IP 的上层协议。它使用一个请求/响应模型,客户做出一个 HTTP 请求,Web 服务器返回一个 HTTP 响应,再由浏览器确定如何进行处理。
HTTP 协议的版本
HTTP/1.0: 短连接。每一个请求建立一次连接,可以获得一个 Web 资源,请求完成后立刻断开。
HTTP/1.1: 长连接。多个 HTTP 请求可以复用一个连接,也就是建立一次连接可以获得多个 Web 资源,服务器端按照 FIFO 原则来处理请求
增加 connection header,用来说明连接方式为短连接还是长连接,若为 close,则使用短连接,反之亦然
HTTP/2: 允许同时通过单一的 HTTP 连接发起多重的请求-响应消息
HTTP请求
HTTP 请求包括 HTTP 方法( GET. POST ). URL ( 客户想要访问的资源 ). HTTP协议版本 以及 ( 可选 ) 表单数据 ( 也称为 "查询字符串" ) 等。
请求方法
HTTP 方法告诉服务器作出哪一类请求,并指出消息中余下的部分该如何格式化。HTTP/1.1 协议中共有 8 种方法,分别为 GET. POST. HEAD. PUT. DELETE. TRACE. OPTIONS. CONNECT. 其中最常用的就是 GET 和 POST.
GET
GET 要求服务器获得一个资源并把资源发回来,可能是 html 页面. JPEG. PDF 文档等等
特点:
GET 中的总字符是有限的(取决于服务器)
1http://127.0.0.1:8020/register.html?username=12&password=12&repassword=12
2//<---- 额外参数之外的URL ----><--- "?" 将路径和参数分隔开,各参数用 "&" 分隔
使用 GET 不能对表单提交书签
GET 请求剖析
1GET /select/selectBeerTaste.jsp?color=dark&taste=malty HTTP/1.1
2Host:www.wichedlysmart.com
3User-Agent:Mozilla/5.0 (Macintosh;U;PPC Max OS X Mach-O;en-US;rv:1.4) Gecko/20030624 Netscape7.1
4Accept:text/xml,application/xml,application/xhtml+xml,text/html,q=0.9,text/plain,q=0.8,video/x-mng,image/png,image/jpeg,image/gif,q=0.2,*/*;q=0.1
5Accept-Language:en-US,en;q=0.5
6Accept-Encoding:gzip,deflate
7Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.7
8Keep-Alive:300
9Connection:keep-alive
细节:
GET
: 第一行为请求行。GET 为 HTTP 方法,用来说明请求类型/select/selectBeerTaste.jsp
: Web 服务器上资源的路径?color=dark&taste=malty
: 参数会追加到请求 URL 第一部分的后面,以 "?" 开头。各参数之间用 "&" 分隔HTTP/1.1
: Web 浏览器所请求的协议的版本请求首部:说明服务器要使用的附加消息
POST
POST 可以请求某个东西,与此同时向服务器发送一些表单数据。发回给服务器的数据称为"消息体"或"负载",消息体可以非常大
特点:
POST 方法提交的数据大小理论上没有限制
发送给服务器的数据放在消息体中
POST 请求剖析
1POST /advisor/selectBeerTaste.do HTTP/1.1
2Host:www.wichedlysmart.com
3User-Agent:Mozilla/5.0 (Macintosh;U;PPC Max OS X Mach-O;en-US;rv:1.4) Gecko/20030624 Netscape7.1
4Accept:text/xml,application/xml,application/xhtml+xml,text/html,q=0.9,text/plain,q=0.8,video/x-mng,image/png,image/jpeg,image/gif,q=0.2,*/*;q=0.1
5Accept-Language:en-US,en;q=0.5
6Accept-Encoding:gzip,deflate
7Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.7
8Keep-Alive:300
9Connection:keep-alive
10color:dark&taste=malty
细节:
POST
: 第一行为请求行。POST 为 HTTP 方法/advisor/selectBeerTaste.do
: 资源在 Web 服务器上的路径HTTP/1.1
: Web 浏览器所请求的协议的版本请求首部:说明附加信息
color=dark&taste=malty
: 消息体,有时也称为"负载"。参数放在体中
HTTP响应
HTTP 响应包括一个首部和一个体。首部包括 HTTP 协议版本. 状态码. 状态消息以及 消息报头 ,告诉浏览器使用了什么协议,请求是否成功,以及是否包括何种类型的内容。体包含了让浏览器显示的具体内容
1HTTP/1.1 200 OK
2Set-Cookie:JSESSIONID=···;Path=/testEL
3Content-Type:text/html
4Content-Length:397
5Date:Wed,19 Nov 2003 03:25:40 GMT
6Server:Apache-Coyote/1.1
7Connection:close
8<html>
9···
10</html>
细节:
HTTP/1.1
: Web 服务器使用的协议的版本200
: 响应的 HTTP 状态码OK
: 状态码的相应文本HTTP 响应首部:客户端要使用的附加消息
Content-Type
: (内容类型) 响应首部的值称为 MIME 类型。MIME 类型告诉浏览器要接收的数据是什么类型。MIME 类型值与 HTTP 请求 "Accept" 首部中所列的值相关<html>···</html>
: 体中包含 HTML, 或其他要显示的内容
状态码
状态码有三位数字,第一个数字定义了响应的级别,共分为 5 种类型:
1xx:提示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收. 理解. 接收
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器为能实现合法要求
常见状态码:
1200 OK //客户端请求成功
2403 Forbidden //服务器收到请求,但是拒绝提供服务
3404 Not Found //请求资源不存在,eg: 输入错误的 URL
4503 Server Unavilable //服务器当前不能处理客户端请求,一段时间可能恢复正常
URL
URL,就是统一资源定位符
1http://www.wickedlysmart.com:80//beeradvice/select/beer1.html
细节:
http
: 协议,告诉服务器使用什么通信协议80
: 端口,一个服务器可以支持多个端口,一个服务器应用由端口标识。如果没有指定端口,默认端口是端口 80/beeradvice/select/
: 路径,所请求资源在服务器上的路径beer1.html
: 资源,所请求内容的名字。如果没有这一部分,大多数 Web 服务器都会默认查找index.html
TCP端口
端口是一个 16 位数,表示服务器硬件上一个特定的软件程序。也可看作是唯一的标识符,表示与服务器硬件上运行的一个特定软件的逻辑连接
HTTP 工作原理
HTTP 请求/ 响应的步骤:
客户端连接到服务器。通常是浏览器,与 Web 服务器的 HTTP 端口 ( 默认为 80 ) 建立套接字连接
浏览器创建一个 HTTP 请求,HTTP GET 发送到服务器
服务器接受请求,找到请求资源,并生成一个 HTTP 响应
释放连接。根据 connection header 的值来确定是否关闭连接
客户端浏览器解析 HTML。
Just coding !!!
『点赞是一种态度』
以上是关于01_HTTP 协议的主要内容,如果未能解决你的问题,请参考以下文章
Flutter 报错 DioError [DioErrorType.DEFAULT]: Bad state: Insecure HTTP is not allowed by platform(代码片段