HTTP相关知识总结

背景:http协议被广泛使用,从移动端,pc端浏览器,http协议无疑是打开互联网应用窗口的重要协议,http在网络应用层中的地位不可移动,是能准确区分前后台的重要协议。
描述:采用C/S模型,编写支持中小型应用的http,并结合mysql,理解常见互联网应用行为,做完该项目,你可以从技术上完全理解从你上网开始,到关闭浏览器的所有操作中的技术细节。
相关技术:网络编程(TCP/IP协议,socket流式套接字,http协议);多线程技术;cgi技术;shell脚本;mysql C api技术;使用多路转接技术进行升级。

开发环境:centos 6.5 + vim/gcc/gdb+c
注册:将自己本地信息登录上去 点击:只获取自己需要的信息

www:环球信息网的缩写(Web,www,w3)中文名字为万维网,环球网,常简称为Web。分为Web客户端和Web服务器程序。www可以让Web客户端访问Web服务器上的页面。是一个由许多互相链接的超文本组成的系统,通过互联网访问。在这个系统中,每个有用的事物,称为一样资源,并且由于一个全局“统一资源标识符”标识;这些资源通过超文本传输协议传送给用户,而后者通过点击链接来获取资源。
服务器端http发展史:1990,HTTP/0.9诞生; 1996年5月,HTTP/1.0标准诞生(今天要写的版本)*; 1997年1月,HTTP/1.1问世; HTTP/2.0正在定制,但要被广泛使用,仍需较多时间。
与http相关的重要协议 TCP; IP; DNS;

URN 统一资源命名,通过名字来标识资源 URI是媒婆,URL是王婆,URN是李婆。 URI是一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。 URL是URI的子集。任何东西,只要能够唯一地标识出来,都可以说这个标识是URI。如果这个标识是一个可获取到上述对象的路径,那么它也可以是一个URL

窥探: MSG_PEEK 将数据拷贝一份但是不拿走。
如果我们将我们的数据拼接到url的后面,我们所采用的方法是get方法 进行http请求时,如果用get方法进行传参,会带上问号? ?左侧是要访问的资源,?右侧是提交给资源的参数
post方法数据没有拼接在url后,而是在正文里,必须要以cgi方式运行 cgi=1

协议特点:

(1)基于请求响应式的。客户端发起请求,浏览器响应资源,客户端请求资源,服务器响应资源,随即服务器关闭链接。
(2)简单快速。通信速度块。
一来一回就结束了(一次请求,一次应答),使得http服务器的程序规模小,不需要处理太复杂的逻辑。
(3)灵活,HTTP允许传输任意类型的数据对象,正在传输的类型由Content-Type加以标记。
(4)无连接,每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接,采用这种方式可以节省传输时间,以尽快将资源释放去服务其它客户端。
(5)无状态,协议本身不会保留你之前的一切请求或者响应。

缺点:下次请求的数据如果与上次相关联的话,就得进行数据重传,可能会造成每次传输的数据量都很大。
优点:在不需要上次数据时应答比较快。

http协议既然是基于请求和响应的,那么就必须有请求和响应两种报文。
请求报文:http协议的请求报文包含三个部分,请求行,请求头部,空行,请求数据三部分构成。
这里写图片描述
http协议是严格按照行为单位的,所以每一行的末尾都有一个回车换行。(注意\r\n)
注意!:请求头部与请求数据之间有一行空行。作为请求数据的开始及请求头部结束的标志。

请求行解析:
HTTP URL(URL是一种特殊类型的URI,包含了如何获取指定资源)
格式如下:http://host[“:”port][abs_path][?name=value&name1=value1&…]表示要通过HTTP协议来定位网络资源

(1) host表示合法的Internet主机域名或者IP地址,本主机:127.0.0.1
(2) port指定一个端口号,为空则使用缺省端口80;
(3) abs_path指定请求资源的URI; 如果URL中没有给出abs_path,那么当它作为请求URI时,必须以”/”的形式给出,通常这个工作浏览器自动帮我们完成
(4)[?name=value&name1=value1&…] 有时我们需要向服务器传递一些参数,这时就以问好“?”作为path和参数的分隔符,参数以name=value的形式给出,不同参数之间以取地址符“&”作为分隔符。不过仅限于GET方法的参数会在url中显示出。

我们在浏览器页面窗口输入百度搜索页面
这里写图片描述
按下回车键,浏览器解析完毕(有了加密版本https,并且自动加上根目录)
这里写图片描述

请求方法:
网上资源多种多样,http的请求方法也有很多种:

(1)静态页面请求:向服务器请求一张html页面,只看看别的不做。
(2)cji机制:cgi是外部应用程序(cgi程序)与web服务器之间的接口标准,是在cgi程序和web服务器之间传递信息的过程。
浏览器除了从服务器下获得资源(网页,图片,文字等),有时候还要能上传一些东西(提交表单,注册用户之类),为了让我们的网站能够实现交互式,我们需要使用cgi完成。
注:可以使用任何语言来编写C。
GI程序。注意:http提供CGI机制,和cgi程序是两码事。好比学校(http)提供教学(CGI机制)平台,学生(CGI程序)来学习。

1.GET请求
请求获取URL所标识的资源:
(1)不带参数的GET,为静态页面请求。
(2)带参数的GET,cji请求.(参数会在url中显示)
2.POST请求
传输实体主体
其他请求方法:
PUT:传输文件
HEAD:获得报文首部
DELETE:删除文件
OPTIONS:询问支持的方法
LINK:建立和资源之间的

请求头部
请求头部允许客户端向服务器传递请求的附加信息以及客户端自身的信息。
采用name:value的形式,以行为单位。
常用的请求头部如下:
Accept : 指定客户端接受那些类型的信息。如:Accept:text/html 表示客户端可接受html类型的文本数据。
Accept-Charset:指定客户端接受的字符集,如果没有明确指定,表示任何字符集都可接受。
Accept-Encoding:指定可接受的内容编码。
Accept-Language:指定一种自然语言
Authorization:用于验证客户端有权查看某个资源,当浏览器访问一个页面时,如果收到服务器的响应代码为401(未授权),可以发送一个包含Authorization请求报头域的请求,要求服务器对其进行验证。
响应报文:
这里写图片描述
与请求报文内容相似,响应报文由响应行,响应头部,空行,响应数据四部分组成。
最大的不同在响应行,响应行也是由三部分构成,协议版本,响应状态码,响应状态码文本描述。
状态码
HTTP状态吗是用以表示服务器HTTP响应状态的3位数字代码。通过状态码就可以知道服务器是否正确的处理了请求。
响应状态码为200,表示成功响应,文本描述为OK。响应状态码有很多种。
1XX:接收的请求正在处理
2XX:请求正常处理完毕
3XX:需要进行附加操作以完成请求
4XX:服务器无法处理请求
5XX:服务器请求出错
eg:
(1)200 ok:客户端发来的http请求,被正确处理了
(2)204 No Content:表明请求结果被正确处理了,但是响应信息中没有响应正文。
(3)206 Partial Content:该状态码表示客户端对服务器进行了范围请求,而且服务器成功的执行了这部分GET请求。
(4)301 Moved Permanently:永久性重定向 该状态码表示请求的资源已经被分配了新的URI,以后应使用新的URI
(5)302 Found 临时性重定向:目标资源被分配了新的URL,希望用户本次使用新的URI进行访问
(6)307 Temporary Redirect 临时重定向(与302有着相同含义,但307会遵照浏览器标准,不会从POST变成GET。)
(7)400 Bad Request 该状态码表明请求报文中存在语法错误,需要修改请求内容重新发送。
(8)403 Forbidden:该状态码表明浏览器所请求的资源被服务器拒绝了。
(9)404 Not Found:服务器上没有请求的资源。
(10)500 Internal Server Error:表明服务器端在执行的时候发生了错误。
(11)Server Unavailable : 该状态码表明服务器目前处于超负载或正在进行停机维护状态。
简易web服务器流程图:
这里写图片描述
长连接与短连接:
http协议在应用层是无连接的,但在传输层,它使用TCP协议,需要建立一定的连接。

长连接与短连接

短连接
一次连接只支持一次数据的发送与接收,当数据交互完毕,立即关闭连接
优:逻辑简单,一来一回即关闭连接,这样可以加快服务器处理速度,提高效率。
长连接
一次连接支持多次数据的交互,当没有数据的交互时,有心跳机制来维护持续的连接。 客户端请求连接—服务端响应,建立连接(三次握手) —
传输数据 — 心跳 — 传输数据 — 心跳 — … — 关闭连接

优:
(1)可以减少TCP建立连接三次握手与释放连接四次挥手所造成开销,减少网络流量。
(2)连续请求同一服务器时,可以降低网络延迟。
(3)让TCP有足够的时间判断网络拥塞状况。
缺点:
(1)当维持大量长连接时,服务器的压力会大大增大。
(2)容易被攻击,当恶意用户向服务器发起了多个长链接请求时,但是不进行数据交互,这段时间内服务器的大部分资源都被长连接占据,其他用户无法访问。

猜你喜欢

转载自blog.csdn.net/zjx624bjh/article/details/80978965