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 请求/ 响应的步骤:

  1. 客户端连接到服务器。通常是浏览器,与 Web 服务器的 HTTP 端口 ( 默认为 80 ) 建立套接字连接

  2. 浏览器创建一个 HTTP 请求,HTTP GET 发送到服务器

  3. 服务器接受请求,找到请求资源,并生成一个 HTTP 响应

  4. 释放连接。根据 connection header 的值来确定是否关闭连接

  5. 客户端浏览器解析 HTML。

     


Just coding !!!

点赞是一种态度

以上是关于01_HTTP 协议的主要内容,如果未能解决你的问题,请参考以下文章

01_HTTP 协议

01_Http网络协议包

01_OSI协议层次

01_OSI协议层次

Flutter 报错 DioError [DioErrorType.DEFAULT]: Bad state: Insecure HTTP is not allowed by platform(代码片段

Apache搭建http协议版本库