Linux服务.NO6——http协议

Linux服务.NO6——http协议9.http9.1.http概念http协议即超文本传输协议,用于从万维网服务器传输超文本到本地浏览器的传送协议。http是基于TCP/IP通信协议来传递数据的一个属于应用层的面向对象的协议。http协议工作于c/s架构,浏览器作为客户端通过url向http服务端(即web服务器)发送所有请求,web服务器根据受到的请求后,向客户端发送响应。9.2.http特点1.简单快速:客户向服务…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

9. http

9.1.http概念

http协议即超文本传输协议,用于从万维网服务器传输超文本到本地浏览器的传送协议。
http是基于TCP/IP通信协议来传递数据的一个属于应用层的面向对象的协议。http协议工作于c/s架构,浏览器作为客户端通过url向http服务端(即web服务器)发送所有请求,web服务器根据受到的请求后,向客户端发送响应。

9.2.http特点

1.简单快速:客户向服务器请求,只需传送请求方法和路径(请求的方法有GET,HEAD,POST,每种方法规定了客户与服务器联系的类型不同)
2.灵活:http允许传输任意类型的数据对象,Content-Type表示正在传输的类型。
3.无连接:意思是服务器每次连接只会处理一个请求,处理完后收到客户端应答就立即断开连接,可以节省时间。
4.无状态:无状态是指协议对于事物处理没有记忆能力,如果后续需要处理和前面同样的信息,就需要重新传输数据。
5.支持B/S和C/S模式

9.3.http之URL

1.UR*概念
URI(uniform resource identifier),统一资源标识符,用来唯一的标识一个资源。web上的可用资源如HTML文档等都是由一个URI来定位的,URI一般由访问资源的命名机制、存放资源的主机名和资源自身的名称(由路径表示)。
URL(uniform resource locator),统一资源定位器,即URL可用来标识一个资源,而且还指明如何locate这个资源。URL在网络中就是用来描述信息资源的字符串,主要用在各种www客户程序和服务器上。URL一般由协议(服务方式)、存有该资源的主机IP和主机资源的具体地址(如目录和文件名)组成。
URN(uniform resource name),统一资源命名,通过名字来标识资源,它命名资源但是不指定如何定位资源。
URI是一种抽象的、高层次概念定义的统一资源标识,而URL和URN是具体的资源标识的方式,URL和URN都是一种URI.
2.URL解释
http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name 是一个完整的URL,可以看出包含了以下部分:

  1. 协议部分:该URL使用的协议是http,后面分隔符是//;
  2. 域名部分:该URL域名是www.aspxfans.com,也可以使用IP;
  3. 端口部分:和域名的分隔符是冒号,可以省略,使用默认端口;
  4. 虚拟目录:从端口号后的第一个/到最后一个/就是虚拟目录部分,可以省略;
  5. 文件名字:从URL的最后一个/后面开始到?为止,就是文件名部分,如果没有?,则从最后一个/到#为止就是文件名,如果没有?和#,那么从最后一个/到结尾都是文件名;
  6. 参数部分:从?到#之间的部分为参数部分,参数允许有多个,参数之间使用&符号连接。
  7. 锚部分:从#开始到最后,不是URL必须的部分,可以省略;

9.4.request和response

1.请求消息
客户端向服务器发送一个http请求的请求消息(request)包括请求行、请求头部、空行和请求数据四个部分组成。
请求行:声明请求类型(get,post等),要访问的资源(URL)以及表明所使用的http版本号。
请求头部:host后面指明请求的目的地,user-agent是浏览器类型检查逻辑的基础,由浏览器自身来定义,在请求中自动发送。
空行:空行必须要有,即使请求数据为空,也需要有空行。
请求数据:要请求的内容。
2.响应消息
服务器接收到请求之后就会返回一个响应消息(response)给客户端,响应消息由状态行、消息报头、空行和响应正文组成。
状态行:声明http版本号,状态码和状态消息
消息报头:指明生成响应日期以及HTML的类型和编码类型等信息。
空行:任然必须存在。
响应正文:服务器返回给客户端的文本信息,一般是个HTML。

9.5.请求类型和状态码

1.请求类型
在请求消息的第一行第一个参数就是请求类型,也叫请求方法,http可以使用多种请求方法,http1.1一共可以有8种请求方法。
GET—请求指定的页面信息,返回实体主体。
HEAD—类似get,但返回的响应没有具体内容,用于得到报头。
POST—向指定资源提交数据进行处理请求(如上传文件),数据被包含在请求体中,post请求可能造成新资源的建立或已有资源的修改。
PUT—从客户端向服务器传送的数据取代指定的文档的内容。
DELETE—请求服务器删除指定页面
CONNECT—预留能将连接改为管道方式的代理服务器
OPTIONS—允许客户端查看服务器性能
TRACE—回显服务器收到的请求,用于测试或诊断。
最常用的四个请求就是PUT,DELETE,POST,GET,分别是对资源进行增、删、改、查的四个基本操作。
2.状态码
在响应消息的第一行中包含了状态码和状态消息,一个状态码对应了一个状态消息,如:
200—OK(客户端请求成功)
400—Bad Request(客户端请求有语法错误)
401—Unauthorized(请求未经授权)
403—Forbidden(服务器收到请求,但是拒绝提供服务)
500—Internal Server Error(服务器发生不可预期的错误)
503—Server Unavailable(服务当前不能处理请求,稍后再试)

9.6.GET和POST

1.打包格式:
GET请求会将请求的数据放在URL中,也就是URL的参数部分,如果数据是字母或数字就原样发送,如果是空格就替换为加号(+),如果是中文或其他字符,就将字符串用BASE64加密,加密结果形式是%E4%BD%A0%E5%A5%BD这样,其中%XX中的XX表示为该符号以16进制表示的ASCII。
而POST请求会将提交的数据放置在http包的包体中,所以GET提交的数据会在地址栏中显示出来,而POST不会。
2.安全性:
由于GET的发送数据都是放在URL中的,所以用户名和密码就会明文出现在URL上,这样安全就得不到保障
3.传输数据大小:
声明:http协议中对传输数据没有大小限制,对URL没有长度限制。
在部分浏览器或者服务器中有可能对URL长度有限制(如IE显示URL长度是2k+35字节),没有限制的就取决于操作系统的支持,所以在使用GET提交时数据有可能受到URL长度限制。
而POST请求不通过URL传值,理论上数据不受限制,不过各个web服务器都会规定post提交数据的大小。
4.请求参数:
GET:请求参数作为一个key/value对的序列附加到URL上,受浏览器对URL长度限制,不适合传输大型数据,而且也不够安全。
POST:请求参数在请求消息的包内(包内的entity body部分)传输的,需要将content-type的值设置为application/x-www-from-urlencoded,其参数也是作为key/value对传输,但是post没有定于传输数据结构的语法和规则,所以不支持复杂的数据类型。
SOAP:是http post的一个专用版本,遵循一种特殊的xml消息格式,将content-type的值设置为text/xml,将任何数据xml化。

9.7.工作原理

HTTP协议定义客户端如何从web服务器请求web页面,以及服务器如何把web页面传送给客户端,采用了请求/响应模型。

  1. 客户端连接到web服务器:
    一个http客户端,如浏览器,与web服务器的http端口(默认80)建立一个tcp套接字连接。
  2. 发送http请求:
    通过tcp套接字,客户端向web服务器发送请求报文。
  3. 服务器接收请求并返回http响应:
    服务器解析请求,定位资源,将资源复本写到tcp套接字并发送该响应信息,由客户端来读取这个响应。
  4. 释放tcp连接:
    若参数connection被设置为close,那么服务器在响应之后就会主动关闭TCP连接,客户端被动关闭连接,而如果connection被设置为keepalive,则该链接会保持一段时间,在该时间内可以继续接受请求。
  5. 客户端浏览器解析HTML:
    客户端首先解析状态行,查看是否成功的状态码,然后解析每一个响应头,响应头告知下面哪部分为HTML文档以及文档字符集,然后浏览器根据响应头来读取HTML文档,并根据HTML的语法对其进行格式化,最后在浏览器中显示。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/212942.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • GMapping代码解析[通俗易懂]

    GMapping代码解析[通俗易懂]前言:   最近正好用到GMapping,需要改代码,但看过也总是在忘,那干脆写篇博客记录下来同时也可以帮助想要了解GMapping代码的同学。   代码的入口依然是main函数,但GMapping代码中由很多是没有用的,所以并不需要挨个看,可以说代码的作者代码能力挺强但代码风格却是不敢恭维。这里就不带大家挨个文件度代码,只是对几个主要的函数进行介绍。   …

  • IKAnalyzer使用停用词词典进行分词

    IKAnalyzer使用停用词词典进行分词

  • 摄像头的MIPI接口、DVP接口和CSI接口[通俗易懂]

    摄像头的MIPI接口、DVP接口和CSI接口[通俗易懂]我们常用的电脑摄像头接口是USB接口,而常见的智能手机上的摄像头是MIPI接口,还有一部分的摄像头(比如说某些支持DVP接口的硬件)是DVP接口;通俗的讲,USB是串行通用串行总线(UniversalSerialBus)的简称,而MIPI是移动行业处理器接口(MobileIndustryProcessorInterface),DVP是数字视频端口(digitalvideoport)的简称,CSI是相机串行接口(CMOSSensorInterface)的简称。Camera工作原理介绍一

  • java退出foreach循环_forEach方法如何跳出循环[通俗易懂]

    java退出foreach循环_forEach方法如何跳出循环[通俗易懂]1.for方法跳出循环functiongetItemById(arr,id){varitem=null;for(vari=0;i<arr.length;i++){if(arr[i].id==id){item=arr[i];break;}}returnitem;}2.forEach方法跳出循环functiongetItemById(arr,id)…

  • android读取短信_android发短信代码

    android读取短信_android发短信代码在Tasker中利用短信的通知实现短信内容转发到微信之前的教程是利用Tasker自带的短信变量来实现的,这有一个无法解决问题:在360,魅族,坚果等品牌的手机中无法获取短信的消息内容。利用短信的通知则可以获取短信的内容,并且对于华为手机来说也可以不用关闭短信验证码保护功能,所以相较于原来的方法更简单,方便。应用通知的变量是一个本地数组变量%evtprm(),这个变量数组包含%evtprm…

    2022年10月13日
  • mysql数据库备份方法_oracle数据库备份文件格式

    mysql数据库备份方法_oracle数据库备份文件格式数据库备份Mysqldump:逻辑备份,热备份,全量xtrabackup:物理,热,全量+增量备份一、什么是MySQL主备情况一:客户端的业务操作,读、写访问的是主库主库通过某种机制,将数据实时同步给备库主库由于有些原因,无法正常响应客户端的请求情况二:完成主备切换客户端读写,访问的是备库(此时备库升级为新主库)数据同步是如何实现的?1.主从同步原理1、在备库执行changemaster命令,绑定主库的信息mysql>CHANGEMAS

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号