http协议详解

前言

http协议,即hypertext transfer protocol,超文本传输协议,是在互联网上使用最广泛的一种网络协议,所有的www服务器都基于该协议,下面有必要介绍一下http协议的相关知识点。

tcp协议与http协议

很多读者对tcp协议和http协议存在疑问,这两者有何区别,从应用领域来说,tcp协议主要用以数据传输控制,而http协议主要用于应用层面的数据交互,本质上两者没有可比性。
http协议属于应用层协议,是建立在tcp协议的基础上的,http协议以客户端请求和服务端应答为标准,浏览器通常为客户端,而web服务器称之为服务端;客户端打开任意一个端口向服务端的指定端口发起http请求,首先是发起tcp三次握手,tcp三次握手的目的是建立可靠的数据连接通道,tcp三次握手建立完毕,进行http数据交互,如下图:
在这里插入图片描述

http协议请求工作流程、http原理

http协议工作在OSI模型的第7层,即最顶层应用层,http协议的重要应用是www服务,下面是http协议请求工作流程、原理:

1、用户在浏览器输入访问地址:http://www.etiantian.org/index.html
2、浏览器请求DNS进行域名解析,从而得到域名对应的IP地址
3、浏览器将端口号(默认80)从访问地址中解析出来
4、浏览器通过解析出来的IP和端口号与服务器之间进行tcp 3次握手建立一条可靠的tcp连接
5、3次握手建立好tcp连接后,浏览器向服务器发送一条http请求报文
6、服务器响应并读取浏览器的请求信息,然后返回响应报文
7、服务器关闭http连接,关闭tcp连接,浏览器显示访问内容到网页上

统一资源定位符URL

为了唯一定位标识网络上的资源,所以有了统一资源定位符URL(Uniform Resource Locator)
语法如下:
URL由三部分组成:资源类型、存放资源的主机域名、资源文件名
也可认为由4部分组成:协议、主机、端口、路径
URL的一般语法格式为:protocol :// hostname[:port] / path / [;parameters][?query-string]#fragment

格式说明:

protocol(协议):指定使用的传输协议,下表列出 protocol 属性的有效方案名称。 最常用的是http协议,它也是WWW中应用最广的协议,还有ftp协议等,ftp 通过 ftp访问资源,格式 ftp://;
hostname(主机名):是指存放资源的服务器的域名系统(DNS) 主机名或 IP 地址,有时,在主机名前也可以包含连接到服务器所需的用户名和密码(格式:username:password@hostname);
port(端口号):整数,可选,省略时使用服务的默认端口,各种传输协议都有默认的端口号,如http的默认端口为80;
path(路径):由零或多个“/”符号隔开的字符串,一般用来表示主机上的一个目录或文件地址;
parameters(参数):这是用于指定特殊参数的可选项;
query(查询):可选,用于给动态网页(如使用CGI、ISAPI、PHP/JSP/ASP/ASP.NET等技术制作的网页)传递参数,可有多个参数,用“&”符号隔开,每个参数的名和值用“=”符号隔开;
fragment(信息片断):字符串,用于指定网络资源中的片断;例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释;

演示示例:

http://www.jfedu.net/newindex/plus/list.php? tid=2#jfedu
其中,http是协议类型,www.jfedu.net是域名,端口没写,http默认就是80端口,访问的路径文件是newindex/plus/list.php,传递的参数是tid=2,jfedu表示信息片断;

是什么服务端口

随着计算机网络技术的发展,原来物理上的接口(如键盘、鼠标、网卡、显示卡等输入/输出接口)已不能满足网络通信的要求,tcp/ip协议作为网络通信的标准协议就解决了这个通信难题。tcp/ip协议集成到操作系统的内核中,这就相当于在操作系统中引入了一种新的输入/输出接口技术,因为在tcp/ip协议中引入了一种称之为"Socket(套接字)“应用程序接口。有了这样一种接口技术,一台计算机就可以通过软件的方式与任何一台具有Socket接口的计算机进行通信,端口在计算机编程上也就是"Socket接口”。
引入端口的概念后,服务就可以使用该端口与外界输入输出数据,也就可以利用端口号来识别应用程序了,同时还可以利用固定端口号来识别和使用某些公共服务,比如一些常见的服务或协议,如http默认使用80端口,ftp默认使用21、20端口,mysql默认使用3306,ssh协议默认使用22端口,Oracle默认使用1521端口。

http请求方法

在http通信中,每个http请求报文都包含一个方法,用来告诉web服务器需要执行哪些操作,这些操作包括:获取指定web页面、提交内容到web服务器、删除服务器上指定资源文件,这方法我们称之为http请求方法,常用的http请求方法有下面这几种:

GET : 客户端请求指定资源信息,服务器返回指定资源  注意:get方法是没有请求报文主体的,post方法才有
HEAD : 只请求响应报文中的http首部 
POST : 将客户端的数据提交到服务器,例如:注册表单
PUT : 用从客户端向服务器传送的数据取代指定的文档内容,即向指定资源位置上传其最新内容 
DELETE : 请求服务器删除Request-URI所标识的资源
MOVE : 请求服务器将指定的页面移至另一个网页
TRACE : 回显服务器收到的请求,主要用于测试或诊断 
CONNECThttp/1.1 : 协议中预留给能够将连接改为管道方式的代理服务器
OPTIONS : 返回服务器针对特定资源所支持的http请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性 

虽然 http 的请求方式有 多种,但是我们在实际应用中常用的也就是 get 和 post,其他请求方式也都可以通过这两种方式间接的来实现,

http的请求request和响应response

客户端浏览器向服务器发起请求request,服务器收到request后进行处理,会产生响应的response信息返回给浏览器,客户端浏览器收到服务器返回的response信息,会对信息进行解析处理,最终用户看到浏览器展示web服务器的网页内容,客户端发起请求request,服务器响应response

request消息分为3个部分:request line ,request header、空行、body
response消息分为3个部分: response line ,response header,空行、body

request line,包含三部分:请求方法GET方法、请求 URI、http 协议版本
request header一般包括服务器主机ip,User-Agent表示用户使用的代理软件,一般是指浏览器;
空行用来表示请求头结束了;
body,报文主体,可以添加任意的其他数据,注意:get方法的body默认为空,post方法的body才有数据;

response line ,响应行,包含了协议版本,状态码和状态信息,200就是状态码,ok就是状态消息;
response header,响应头,包含响应时间,服务主机类型等附加信息;
空行用来表示响应头结束了;
响应的报文主体body就是返回给客户端的网页数据;

下面我们来使用curl命令来看一下request消息和response信息:

 curl -v http://192.168.43.226/index.html		#先启动nginx,再写这条命令执行
*   Trying 192.168.43.226...
* tcp_NODELAY set
* Connected to 192.168.43.226 (192.168.43.226) port 80 (#0)
> GET /index.html http/1.1				#这一行就是请求行request line,包含三部分:请求方法GET方法、请求 URI、http 协议版本
> Host: 192.168.43.226				    #请求头request header,请求头包括服务器主机IP,User-Agent表示用户使用的代理软件,一般是
> User-Agent: curl/7.61.1				# 指浏览器
> Accept: */*
>										#这一行空行通过回车符换行符告诉web服务器请求头结束
>										#这里是body消息,但因为GET方法的body默认为空,所以这里没有显示
< http/1.1 200 OK						#response line ,响应行,包含了协议版本,状态码和状态信息,200就是状态码,ok就是状态消息
< Server: nginx/1.18.0					#response header,响应头,包含响应时间,服务主机类型等附加信息
< Date: Wed, 19 May 2021 02:27:09 GMT
< Content-Type: text/html
< Content-Length: 724
< Last-Modified: Sun, 09 May 2021 08:11:51 GMT
< Connection: keep-alive
< ETag: "60979947-2d4"
< Accept-Ranges: bytes
<										#空行,表示response header结束
<!DOCTYPE html>							#下面就是响应的报文主体body
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>     1.go for it! just do it!</p>
<p>     2.better late than never.</p>
<p>     3.Don't give up and don't give in. </p>
<p>     4.one today is worth two tomorrows.</p>
<p>     5.a bold attempt is half success.</p>
<p>                             --from web01_port80 server </p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

常见的http状态码

当用户在浏览网页向服务器发送请求的时候,服务器会返回一个http状态码,主要是用来响应浏览器的请求。通常情况下,一般是3位数字,http状态码是由RFC 2616来定义的,所有的状态码的第一个数字就代表着是什么状态。

下面是一些常见的状态码分类范围:

100-199:用于指定客户端相应的某些动作
200-299:表示请求成功
300-399:重定向,用于已经移动的文件,并且常被包含在定位头信息中指定的地址信息
400-499:客户端请求出错,服务器无法处理请求,状态码指出了客户端的错误
500-599:服务器处理请求出错,状态码指出了服务端的错误

具体的状态码如下:

状态码	状态码英文名称	中文描述
100		Continue		继续。客户端应继续其请求
101		Switching Protocols	切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到http的新版本协议;
200		OK				请求成功,一般用于GET与POST请求,即服务器成功返回网页,这是成功的http请求返回的标准状态码;
201		Created			已创建。成功请求并创建了新的资源;
202		Accepted		已接受。已经接受请求,但未处理完成;
203		Non-Authoritative Information	非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本;
204		No Content		无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档;
205		Reset Content	重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域;
206		Partial Content	部分内容。服务器成功处理了部分GET请求;
300		Multiple Choices	多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择;
301		Moved Permanently	永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替;
302		Found			临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
303		See Other		查看其它地址。与301类似。使用GET和POST请求查看
304		Not Modified	未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
305		Use Proxy		使用代理。所请求的资源必须通过代理访问
306		Unused			已经被废弃的http状态码
307		Temporary Redirect	临时重定向。与302类似。使用GET请求重定向
400		Bad Request		客户端请求的语法错误,服务器无法理解
401		Unauthorized	请求要求用户的身份认证
402		Payment Required	保留,将来使用
403		Forbidden		禁止访问,虽然这个请求时合法的,但fwuqi因为匹配了某个预先设置的规则而拒绝响应客户端的请求,此类问题一般是为服务器或权限配置不当所导致的。
404		Not Found		服务器无法根据客户端的请求找到资源。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
405		Method Not Allowed	客户端请求中的方法被禁止
406		Not Acceptable	服务器无法根据客户端请求的内容特性完成请求
407		Proxy Authentication Required	请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权
408		Request Time-out 服务器等待客户端发送的请求时间过长,超时
409		Conflict		服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突
410		Gone			客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置
411		Length Required	服务器无法处理客户端发送的不带Content-Length的请求信息
412		Precondition Failed	客户端请求信息的先决条件错误
413		Request Entity Too Large	由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息
414		Request-URI Too Large	请求的URI过长(URI通常为网址),服务器无法处理
415		Unsupported Media Type	服务器无法处理请求附带的媒体格式
416		Requested range not satisfiable	客户端请求的范围无效
417		Expectation Failed	服务器无法满足Expect的请求头信息
500		Internal Server Error	服务器内部错误,无法完成请求
501		Not Implemented		服务器不支持请求的功能,无法完成请求
502		Bad Gateway			作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503		Service Unavailable	由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
504		Gateway Time-out	充当网关或代理的服务器,未及时从远端服务器获取请求
505		http Version not supported	服务器不支持请求的http协议的版本,无法完成处理

总结

1、http协议是互联网使用最广泛的协议之一,http默认端口是80;
2、端口是指某个服务绑定了某个端口,然后就可以使用该端口与外界进行数据的交换进出,即一个端口唯一的标识了一个服务;
3、URL统一资源定位符能唯一的定义互联网上的一个资源文件,其格式:protocol :// hostname[:port] / path / [;parameters][?query-string]#fragment
4、http的请求request和响应response报文格式
5、http的状态码,200-299表示ok,400-499表示客户端请求出错,服务器无法处理请求,500-599表示服务器处理请求出错,最常见的就是200 ok,404请求错误;
6、http 协议的 8 种请求类型中最常用的就是GET、POST。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值