阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

深入HTTP请求流程

125次阅读
没有评论

共计 5367 个字符,预计需要花费 14 分钟才能阅读完成。

HTTP 协议解析

http 即超文本传输协议,是一种详细规定了浏览器和万维网服务器之间相互通信的规则。他是万维网交换嘻嘻的基础,他允许将 HTML 文档从 web 服务器传到 web 浏览器。发送一个 HTTP 请求很简单,只需要在搜索引擎上输入 url。

HTTP 协议详解

当浏览器向 Web 服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息,HTTP请求信息由 3 部分组成:

l   请求方法 URI 协议 / 版本

l   请求头(Request Header)

l   请求正文

下面是一个 HTTP 请求的例子:

GET/sample.jspHTTP/1.1

 

Accept:image/gif.image/jpeg,*/*

Accept-Language:zh-cn

Connection:Keep-Alive

Host:localhost

User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)

Accept-Encoding:gzip,deflate

 

username=jinqiao&password=1234

1)请求方法 URI 协议 / 版本

请求的第一行是“方法 URL/版本”:GET/sample.jsp HTTP/1.1

以上代码中“GET”代表请求方法,“/sample.jsp”表示 URI,“HTTP/1.1 代表协议和协议的版本。

根据 HTTP 标准,HTTP请求可以使用多种请求方法。例如:HTTP1.1目前支持 7 种请求方法:GETPOSTHEADOPTIONSPUTDELETETARCE

GET      请求获取由 Request-URI 所标识的资源。
POST 
Request-URI 所标识的资源后附加新的数据。
HEAD 
请求获取由 Request-URI 所标识的资源的响应消息报头。

OPTIONS 请求查询服务器的性能,或查询与资源相关的选项和需求。
PUT 
请求服务器存储一个资源,并用 Request-URI 作为其标识。
DELETE 
请求服务器删除由 Request-URI 所标识的资源。
TRACE 
请求服务器回送收到的请求信息,主要用语测试或诊断。
Internet 应用中,最常用的方法是 GETPOST

URI完整地指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以“/”开头,最后,协议版本声明了通信过程中使用 HTTP 的版本。

 

2)请求头(Request Header)

请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长度等。

Accept:image/gif.image/jpeg.*/*

Accept-Language:zh-cn

Connection:Keep-Alive

Host:localhost

User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)

Accept-Encoding:gzip,deflate.

 

3)请求正文

请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。请求正文中可以包含客户提交的查询字符串信息:

username=jinqiao&password=1234

在以上的例子的 HTTP 请求中,请求的正文只有一行内容。当然,在实际应用中,HTTP请求正文可以包含更多的内容。

 

首部

类型

描述

Date

通用

提供日期和时间标志,说明报文是什么时候创建的

Content-Length

实体

报文中实体主体的字节大小。如果进行了 gzip 压缩,这个大小就是压缩后的大小。客户端通过它确定报文截尾

Accept

请求

客户端通知服务器可以接收哪些媒体类型

Content-Type

实体

报文中对象的媒体类型

Cache-Control

通用

见“缓存首部”

Connection

通用

Connection:close 响应结束之后,连接会被关闭。不支持持久连接的 HTTP/1.1 应用程序要在所有请求和响应中插入 Connection:close。

Server

响应

识别服务器软件

Set-Cookie

响应

设置服务器产生的 ID

 

HTTP 请求其他首部

首部

类型

描述

Expect:100-continue

请求

客户端告知服务器它们需求某种行为。

Transfer-Encoding:chunk

通用

使用分块传输

User-Agent

请求

用户的浏览器软件

Host

请求

请求资源所在的服务器。(Apache 中按 Host 区分虚拟主机)

Location

响应

令客户端重定向至 URL

Vary

响应

服务端通知客户端,在服务端的协商中会使用哪些来自客户端的首部。它的值是一个首部列表,服务器会去查看这些首部,以确定什么内容作为响应发回给客户端。

 

HTTP应答与 HTTP 请求相似,HTTP响应也由 3 个部分构成,分别是:

状态行

响应头(Response Header)

响应正文

在接收和解释请求消息后,服务器会返回一个 HTTP 响应消息。

状态行由协议版本、数字形式的状态代码、及相应的状态描述,各元素之间以空格分隔。

格式:    HTTP-Version Status-Code Reason-Phrase CRLF

例如:    HTTP/1.1 200 OK \r\n

 

Get 和 Post 方法的区别

Http 协议定义了很多与服务器交互的方法,最基本的有 4 种,分别是 GET,POST,PUT,DELETE. 一个 URL 地址用于描述一个网络上的资源,而 HTTP 中的 GET, POST, PUT, DELETE 就对应着对这个资源的查,改,增,删 4 个操作。我们最常见的就是 GET 和 POST 了。GET 一般用于获取 / 查询资源信息,而 POST 一般用于更新资源信息。

我们看看 GET 和 POST 的区别

1. GET 提交的数据会放在 URL 之后,以? 分割 URL 和传输数据,参数之间以 & 相连,如 EditPosts.aspx?name=test1&id=123456.  POST 方法是把提交的数据放在 HTTP 包的 Body 中.

2. GET 提交的数据大小有限制(因为浏览器对 URL 的长度有限制),而 POST 方法提交的数据没有限制.

3. GET 方式需要使用 Request.QueryString 来取得变量的值,而 POST 方式通过 Request.Form 来获取变量的值。

4. GET 方式提交数据,会带来安全问题,比如一个登录页面,通过 GET 方式提交数据时,用户名和密码将出现在 URL 上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.

HTTP 状态码

Response 消息中的第一行叫做状态行,由 HTTP 协议版本号,状态码,状态消息 三部分组成。

状态码用来告诉 HTTP 客户端,HTTP 服务器是否产生了预期的 Response.

HTTP/1.1 中定义了 5 类状态码,状态码由三位数字组成,第一个数字定义了响应的类别

1XX  提示信息 – 表示请求已被成功接收,继续处理

2XX  成功 – 表示请求已被成功接收,理解,接受

3XX  重定向 – 要完成请求必须进行更进一步的处理

4XX  客户端错误 –  请求有语法错误或请求无法实现

5XX  服务器端错误 –  服务器未能实现合法的请求

看看一些常见的状态码

200 请求成功

最常见的就是成功响应状态码 200 了,这表明该请求被成功地完成,所请求的资源发送回客户端

详细的

1**(信息类):表示接收到请求并且继续处理
100——客户必须继续发出请求
101——客户要求服务器根据请求转换 HTTP 协议版本

2**(响应成功):表示动作被成功接收、理解和接受
200——表明该请求被成功地完成,所请求的资源发送回客户端
201——提示知道新文件的 URL
202——接受和处理、但处理未完成
203——返回信息不确定或不完整
204——请求收到,但返回信息为空
205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件
206——服务器已经完成了部分用户的 GET 请求

3**(重定向类):为了完成指定的动作,必须接受进一步处理
300——请求的资源可在多处得到
301——本网页被永久性转移到另一个 URL
302——请求的网页被转移到一个新的地址,但客户访问仍继续通过原始 URL 地址,重定向,新的 URL 会在 response 中的 Location 中返回,浏览器将会使用新的 URL 发出新的 Request。
303——建议客户访问其他 URL 或访问方式
304——自从上次请求后,请求的网页未修改过,服务器返回此响应时,不会返回网页内容,代表上次的文档已经被缓存了,还可以继续使用
305——请求的资源必须从服务器指定的地址得到
306——前一版本 HTTP 中使用的代码,现行版本中不再使用
307——申明请求的资源临时性删除

4**(客户端错误类):请求包含错误语法或不能正确执行
400——客户端请求有语法错误,不能被服务器所理解
401——请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用
HTTP 401.1 – 未授权:登录失败
HTTP 401.2 – 未授权:服务器配置问题导致登录失败
HTTP 401.3 – ACL 禁止访问资源
HTTP 401.4 – 未授权:授权被筛选器拒绝
HTTP 401.5 – 未授权:ISAPI 或 CGI 授权失败
402——保留有效 ChargeTo 头响应
403——禁止访问,服务器收到请求,但是拒绝提供服务
HTTP 403.1 禁止访问:禁止可执行访问
HTTP 403.2 – 禁止访问:禁止读访问
HTTP 403.3 – 禁止访问:禁止写访问
HTTP 403.4 – 禁止访问:要求 SSL
HTTP 403.5 – 禁止访问:要求 SSL 128
HTTP 403.6 – 禁止访问:IP 地址被拒绝
HTTP 403.7 – 禁止访问:要求客户证书
HTTP 403.8 – 禁止访问:禁止站点访问
HTTP 403.9 – 禁止访问:连接的用户过多
HTTP 403.10 – 禁止访问:配置无效
HTTP 403.11 – 禁止访问:密码更改
HTTP 403.12 – 禁止访问:映射器拒绝访问
HTTP 403.13 – 禁止访问:客户证书已被吊销
HTTP 403.15 – 禁止访问:客户访问许可过多
HTTP 403.16 – 禁止访问:客户证书不可信或者无效
HTTP 403.17 – 禁止访问:客户证书已经到期或者尚未生效
404——一个 404 错误表明可连接服务器,但服务器无法取得所请求的网页,请求资源不存在。eg:输入了错误的 URL
405——用户在 Request-Line 字段定义的方法不允许
406——根据用户发送的 Accept 拖,请求资源不可访问
407——类似 401,用户必须首先在代理服务器上得到授权
408——客户端没有在用户指定的饿时间内完成请求
409——对当前资源状态,请求不能完成
410——服务器上不再有此资源且无进一步的参考地址
411——服务器拒绝用户定义的 Content-Length 属性请求
412——一个或多个请求头字段在当前请求中错误
413——请求的资源大于服务器允许的大小
414——请求的资源 URL 长于服务器允许的长度
415——请求资源不支持请求项目格式
416——请求中包含 Range 请求头字段,在当前请求资源范围内没有 range 指示值,请求也不包含 If-Range 请求头字段
417——服务器不满足请求 Expect 头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求长。

5**(服务端错误类):服务器不能正确执行一个正确的请求
HTTP 500 – 服务器遇到错误,无法完成请求
HTTP 500.100 – 内部服务器错误 – ASP 错误
HTTP 500-11 服务器关闭
HTTP 500-12 应用程序重新启动
HTTP 500-13 – 服务器太忙
HTTP 500-14 – 应用程序无效
HTTP 500-15 – 不允许请求 global.asa
Error 501 – 未实现
HTTP 502 – 网关错误
HTTP 503:由于超载或停机维护,服务器目前无法使用,一段时间后可能恢复正常

HTTP 与 HTTPS 有什么区别?

HTTP 协议传输的数据都是未加密的,也就是明文的,因此使用 HTTP 协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了 SSL(Secure Sockets Layer)协议用于对 HTTP 协议传输的数据进行加密,从而就诞生了 HTTPS。简单来说,HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 http 协议安全。

HTTPS 和 HTTP 的区别主要如下:

1、https 协议需要到 ca 申请证书,一般免费证书较少,因而需要一定费用。

2、http 是超文本传输协议,信息是明文传输,https 则是具有安全性的 ssl 加密传输协议。

3、http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。

4、http 的连接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 http 协议安全。

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-08/146400.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计5367字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中