http协议详解

一、常见面试题

TCP/IP五层协议 ?

http协议以及延伸?

get和post的区别?

状态码?

url回车之后发生什么?

http的过程?
http和tcp的关系?
二、http简介

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。

HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

HTTP是一个属于应用层的面向对象的协议

HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。

 

 

 

三、特点

1、简单快速:客户向服务请求服务时,只需要传送请求方法和路径。常见的请求方法:GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得http服务的程序规模小,因而通信速度很快。

2、灵活:http允许传输任意类型的数据对象。正在传输的类型由Content_type加以标记。

3、无连接:无连接的含义是限制每次连接值处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

4、无状态:HTTP协议是无状态协议。无状态协议是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时他的应答就较快。

5、支持B/S以及C/S模式。

 

四、工作原理

    HTTP协议定义web客户端如何从web服务器请求web页面,以及服务器如何把web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行为作为响应,响应的内容包含协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。

以下是HTTP 请求/响应的步骤:

1、客户端连接到web服务器一个http客户端,通常是浏览器,与web服务器的http端口(默认为80)建立一个TCP套接字连接。

2、发送HTTP气请求,通过TCP套接字,客户端向web服务发送一个文本的请求报文,请求报文由请求行、请求头部、空行和请求数据4部分组成。

3、服务器接收请求并返回HTTP响应web服务解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取,一个由状态行、响应头、空行和响应数据4部分组成。

4、释放TCP连接 若connection模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接,若connection模式为keepalive,则连接会保持一段时间,在改时间内继续接收请求;

5、客户端浏览器解析HTML内容 客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知一下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

 

4.1在浏览器地址栏键入URL,按下回车后会走以下流程:
1、浏览器向DNS服务器请求解析该URL中的域名所对应的IP地址

2、解析出IP地址后,根据IP地址和默认端口80和服务器建立TCP连接;

3、浏览器发出读取文件(URL中域名后面部分对应的文件)的HTTP请求,该请求报文作为TCP三次握手的第三个报文的数据发送给服务器

4、服务器对浏览器请求作出相应,并把对应的html文本发送给浏览器;

5、释放TCP连接;

6、浏览器将该html文本显示内容;

 

五、HTTP请求方法

HTTP/1.1协议中国定义了八种方法(也叫“动作”)来以不同方式操作指定的资源:

GET

向指定的资源发出“显示”请求。

使用GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,例如在Web Application中。其中一个原因是GET可能会被网络蜘蛛等随意访问;

HEAD

与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。

POST

指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。

PUT

向指定资源位置上传其最新内容

DELETE

请求服务器删除Request_URL所标识的资源;

TRACE

回显服务器收到的请求,主要用于测试或诊断;

OPTIONS

这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用‘/*’来代替资源名称,向web服务器发送OPTIONS请求,可以测试服务器功能是否正常运行;

CONNECT

HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。

注意事项:

1、方法名称区分大小写;当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed),当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。

2、HTTP服务器至少应该实现GET和HEAD方法,其他方法都可以选的。当然所有的方法支持的实现都应当匹配下述的方法各自的语义定义。此外,除了上述方法,特定的HTTP服务器还能够扩展自定义的方法。例如PATCH(由 RFC 5789 指定的方法)用于将局部修改应用到资源

 

5.1状态码

    所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。

状态代码的第一个数字代表当前响应的类型:

 

1xx消息——请求已被服务器接收,继续处理

2xx成功——请求已成功被服务器接收、理解、并接受

3xx重定向——需要后续操作才能完成这一请求

4xx请求错误——请求含有词法错误或者无法被执行

5xx服务器错误——服务器在处理某个正确请求时发生错误

 

常见状态:

 

200       OK //客户端请求成功

202      //表示服务器已经接受了请求,但是还没有处理,而且这个请求最终会不会处理还不确定

204      //服务器成功处理了请求,但没有返回任何实体内容 ,可能会返回新的头部元信息

301     //客户端请求的网页已经永久移动到新的位置,当链接发生变化时,返回301代码告诉客户端链接的变化,客户端保存新的链接,并向新的链接发出请求,已返回请求结果

400      Bad Request //客户端请求有语法错误,不能被服务器所理解

401      Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

403       Forbidden //服务器收到请求,但是拒绝提供服务

404       Not Found //请求资源不存在,eg:输入了错误的URL

500       Internal Server Error //服务器发生不可预期的错误

503      Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

 

面试题:

从输入网址到获得页面的过程(越细越好)?

 

过程

使用协议

(DNS查找过程:浏览器缓存、路由器缓存、DNS缓存)

  • 浏览器查找域名地址

DNS:获取域名对应IP

(cookies会随着请求发送给服务器)

  • 浏览器向web服务器发送一个HTTP请求

TCP:与服务器建立TCP连接

IP:建立TCP协议时,需要发送数据,发送数据在网络层使用IP协议

OPSF:IP数据包在路由器之间,路由器选择使用OPSF协议

ARP:路由协议在与服务器通信时,需要将IP地址转为MAC地址,需要ARP协议

HTTP:在TCP建立完成后,使用HTTP协议访问页面

(请求:处理请求&它的一个参数,cookies、生成一个html响应)

  • 服务器处理请求

 

  • 服务器发回一个HTML响应

 

  • 浏览器开始显示HTML

 

 

 

1、浏览器查询 DNS,获取域名对应的IP地址:具体过程包括浏览器搜索自身的DNS缓存、搜索操作系统的DNS缓存、读取本地的Host文件和向本地DNS服务器进行查询等。对于向本地DNS服务器进行查询,如果要查询的域名包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析(此解析具有权威性);如果要查询的域名不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析(此解析不具有权威性)。如果本地域名服务器并未缓存该网址映射关系,那么将根据其设置发起递归查询或者迭代查询;

2、浏览器获得域名对应的IP地址以后,浏览器向服务器请求建立链接,发起三次握手;

3、TCP/IP链接建立起来后,浏览器向服务器发送HTTP请求;

4、服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理结果及相应的视图返回给浏览器;

5、浏览器解析并渲染视图,若遇到对js文件、css文件及图片等静态资源的引用,则重复上述步骤并向服务器请求这些资源;

6、浏览器根据其请求到的资源、数据渲染页面,最终向用户呈现一个完整的页面。

 

HTTP和HTTPS有什么区别?
 

1、端口不同:HTTP使用的是80端口,HTTPS使用443端口;

2、HTTP(超文本传输协议)信息是明文传输,HTTPS运行在SSL(Secure Socket Layer)之上,添加了加密和认证机制,更加安全;

3、HTTPS由于加密解密会带来更大的CPU和内存开销;

4、HTTPS通信需要证书,一般需要向证书颁发机构(CA)购买

 

HTTP1.0 与 HTTP1.1 的区别?

 

HTTP/1.1支持持续连接和流水线方式

     持续连接就是万维网服务器在发送响应后仍然在一段时间内保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文。这条持续的连接并不局限于传输同一个页面上链接的文档,而是只要文档在同一个服务器上就可以通过这条持续的连接传送。

      流水线方式是客户在收到HTTP的响应报文之前就能接着发送新的请求报文。与之相对应的非流水线方式是客户在收到前一个响应后才能发送下一个请求。

GET与POST的区别 ?

1、GET是幂等的,即读取同一个资源,总是得到相同的数据,POST不是幂等的;

2、GET一般用于从服务器获取资源,而POST有可能改变服务器上的资源;

3、请求形式上:GET请求的数据附在URL之后,在HTTP请求头中;POST请求的数据在请求体中;

4、安全性:GET请求可被缓存、收藏、保留到历史记录,且其请求数据明文出现在URL中。POST的参数不会被保存,安全性相对较高;

5、GET只允许ASCII字符,POST对数据类型没有要求,也允许二进制数据;

6、GET的长度有限制(操作系统或者浏览器),而POST数据大小无限制

7、GET产生一个TCP数据包;POST产生两个TCP数据包(跨域,会先发header包探测是否会接收)

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值