程序员社区

http相关

1、HTTP协议简介

HTTP(超文本传输协议)是应用层上的一种客户端/服务端模型的通信协议,它由请求和响应构成,且是无状态的。

2、什么是Http协议无状态协议? 怎么解决Http协议无状态协议?

  • 无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,也就是说,当客户端一次HTTP请求完成以后,客户端再发送一次HTTP请求,HTTP并不知道当前客户端是一个”老用户“。
  • 可以使用Cookie来解决无状态的问题,Cookie就相当于一个通行证,第一次访问的时候给客户端发送一个Cookie,当客户端再次来的时候,拿着Cookie(通行证),那么服务器就知道这个是”老用户“。

3、URL构成

http相关插图
image.png

4、请求报文与响应报文格式

http相关插图1
image.png
请求报文
http相关插图2
image.png
POST /somedir/page.html HTTP/1.1    
//以上是请求行:方法字段、URL字段和HTTP版本字段
Host: www.user.com
Content-Type: application/x-www-form-urlencoded
Connection: Keep-Alive
User-agent: Mozilla/5.0.    
Accept-lauguage: fr  
//以上是首部行
(此处必须有一空行)  //空行分割header和请求内容 
name=world   请求体
  • Host:指明了该对象所在的主机
  • Connection:Keep-Alive首部行用来表明该浏览器告诉服务器使用持续连接
  • Content-Type: x-www-form-urlencoded首部行用来表明 HTTP会将请求参数用key1=val1&key2=val2的方式进行组织,并放到请求实体里面
  • User-agent:首部行用来指明用户代理,即向服务器发送请求的浏览器类型
  • Accept-lauguage:首部行表示用户想得到该对象的语法版本(如果服务器中有这样的对象的话),否则,服务器应发送它的默认版本
响应报文
http相关插图3
image.png
HTTP/1.1 200 OK    
//以上是状态行:协议版本字段、状态码、相应状态信息
Connection:close
Server:Apache/2.2.3(CentOS)
Date: Sat, 31 Dec 2005 23:59:59 GMT
Content-Type: text/html
Content-Length: 122
//以上是首部行
(此处必须有一空行)  //空行分割header和实体主体
(data data data data)//响应实体主体
  • Connection:close首部行告诉客户,发送完报文后将关闭TCP连接。
  • Date:指的不是对象创建或最后修改的时间,而是服务器从文件系统中检索到该对象,插入到响应报文,并发送该响应报文的时间。
  • Server: 首部行指示该报文是由一台Apache Web服务器产生的,类似于HTTP请求报文里的User-agent
  • Content-Length:首部行指示了被发送对象中的字节数
  • Content-Type:首部行指示了实体体中的对象是HTML文本

5、常见的首部

  1. 通用首部字段(请求报文与响应报文都会使用的首部字段)
  • Date:创建报文时间
  • Connection:连接的管理
  • Cache-Control:缓存的控制
  • Transfer-Encoding:报文主体的传输编码方式
  1. 请求首部字段(请求报文会使用的首部字段)
  • Host:请求资源所在服务器
  • Accept:可处理的媒体类型
  • Accept-Charset:可接收的字符集
  • Accept-Encoding:可接受的内容编码
  • Accept-Language:可接受的自然语言
  1. 响应首部字段(响应报文会使用的首部字段)
  • Accept-Ranges:可接受的字节范围
  • Location:令客户端重新定向到的URI
  • Server:HTTP服务器的安装信息
  1. 实体首部字段(请求报文与响应报文的的实体部分使用的首部字段)
  • Allow:资源可支持的HTTP方法
  • Content-Type:实体主类的类型
  • Content-Encoding:实体主体适用的编码方式
  • Content-Language:实体主体的自然语言
  • Content-Length:实体主体的的字节数
  • Content-Range:实体主体的位置范围,一般用于发出部分请求时使用

6、URI和URL的区别

URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。

Web上可用的每种资源如HTML文档、图像、视频片段、程序等都是一个来URI来定位的
URI一般由三部组成:

  • 访问资源的命名机制
  • 存放资源的主机名
  • 资源自身的名称,由路径表示,着重强调于资源。
URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。

URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,特别是著名的Mosaic。
采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。
URL一般由三部组成:

  • 协议(或称为服务方式)
  • 存有该资源的主机IP地址(有时也包括端口号)
  • 主机资源的具体地址。如目录和文件名等
URN,uniform resource name,统一资源命名,是通过名字来标识资源。

URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI。笼统地说,每个 URL 都是 URI,但不一定每个 URI 都是 URL。这是因为 URI 还包括一个子类,即统一资源名称 (URN),它命名资源但不指定如何定位资源。上面的 mailto、news 和 isbn URI 都是 URN 的示例。

7、常用的HTTP方法有哪些?

  • GET: 用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器
  • POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式。
  • PUT: 传输文件,报文主体中包含文件内容,保存到对应URI位置。
  • HEAD: 获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效。
  • DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件。
  • OPTIONS:查询相应URI支持的HTTP方法。

8、一次完整的HTTP请求所经历的7个步骤

HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤:

  1. 建立TCP连接
    在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建 Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则, 只有低层协议建立之后才能,才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。

  2. Web浏览器向Web服务器发送请求行
    一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令。例如:GET /sample/hello.jsp HTTP/1.1。

  3. Web浏览器发送请求头
    浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。

  4. Web服务器应答
    客户机向服务器发出请求后,服务器会客户机回送应答, HTTP/1.1 200 OK ,应答的第一部分是协议的版本号和应答状态码。

  5. Web服务器发送应答头
    正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。

  6. Web服务器向浏览器发送数据
    Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。

  7. Web服务器关闭TCP连接
    一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码:Connection:keep-alive

TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

建立TCP连接->发送请求行->发送请求头->(到达服务器)发送状态行->发送响应头->发送响应数据->断TCP连接

9、HTTP状态码及其作用

HTTP状态码:当用户访问一个网页时,浏览器会向网页所在的服务器出请求,当浏览器接收并显示网页前,此网页所在服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求,HTTP状态码用于描述服务器对请求的处理结果。

HTTP状态码分类:

  • 1**:信息,服务器收到请求,需要请求者继续执行操作
  • 2**:成功,操作被成功接收并处理
  • 3**:重定向,需要进一步的操作以完成请求
  • 4**:客户端错误,请求包含语法错误或者无法完成请求
  • 5**:服务器错误,服务器在处理请求的过程中发生了错误

常见的HTTP状态码:

  • 200——OK,请求成功
  • 301——Moved Permanently,资源(网页等)被永久转移到其他URL
  • 302——Found,307——Temporary Redirect,临时重定向,请求的文档被临时移动到别处
  • 304——Not Modified,未修改,表示客户端缓存的版本是最近的
  • 401——Unauthorized,请求要求用户的身份认证
  • 403——Forbidden,禁止,服务器理解客户端请求,但是拒绝处理此请求,通常是权限设置所致
  • 404——Not Found,请求的资源(网页等)不存在
  • 500——Internal Server Error——内部服务器错误
  • 502——Bad Gateway,充当网关或代理的服务器从远端服务器接收到了一个无效的请求
  • 504——Gateway Time-out,充当网关或代理的服务器,未及时从远端服务器获取请求

10、HTTP1.1版本新特性

  1. 默认持久连接节省通信量,只要客户端服务端任意一端没有明确提出断开TCP连接,就一直保持连接,可以发送多次HTTP请求
  2. 管线化,客户端可以同时发出多个HTTP请求,而不用一个个等待响应
  3. 断点续传
    实际上就是利用HTTP消息头使用分块传输编码,将实体主体分块传输。

11、用什么解析成IP?

从网址到IP地址的转换,称为DNS解析,DNS解析是一个递归查询的过程,具体步骤如下(以www.google.com为例):

  1. 首先在本地域名服务器(最近的一台DNS服务器)中查询IP地址
  2. 如果没有找到,本地域名服务器会向根域名服务器发送一个请求
  3. 如果根域名服务器中也不存在该域名,但判定这个域名属于“com”域,则本地域名服务器会向com顶级域名服务器发送一个请求
  4. 如果com顶级域名服务器没有找到该域名,但判定这个域名属于“google.com”域,则本地域名服务器会向google.com域名服务器发送一个请求,以此类推
  5. 直到本地域名服务器得到域名对应的IP地址,并将其缓存到本地,供下次查询使用
  6. 综上,网址的解析过程为.->.com->google.com->www.google.com.。

12、OSI网络七层协议

从上到下分别是 应用层、表示层、会话层 、传输层、网络层 、数据链路层、物理层

赞(0) 打赏
未经允许不得转载:IDEA激活码 » http相关

一个分享Java & Python知识的社区