Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HTTP协议 #20

Open
huangchucai opened this issue Aug 2, 2017 · 0 comments
Open

HTTP协议 #20

huangchucai opened this issue Aug 2, 2017 · 0 comments

Comments

@huangchucai
Copy link
Owner

人生就像一列开往坟墓的列车,路途上会有很多站,很难有人至始至终陪你走完全程,当陪你的人要下车时,即便不舍,也要心存感激,然后挥手告别。---sunnyhuang

HTTP

1. OSI 七层模型指什么

七层模型图
开放式系统互联通信参考模型(OSI)

主机层

Data(数据层)7.应用层 6. 表示层 5.会话层

Segments(数据段) 4.传输层

媒介层

网络分组/数据报文 3. 网络层

Bit/Frame(数据帧) 2. 数据链路层

Bit(比特) 1. 物理层

应用层: 规定了数据的传输协议,提供为应用软件而设的界面,以设置与另一应用软件之间的通信。例如: HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等。

表示层:解决不同系统之间的通信。例如:linux下的qq和windows下的qq可以通信

会话层:建立一个连接(自动的手机信息,自动的网络寻址)

传输层:每一个应用程序都会在网卡注册一个端口号,该层就是端口和端口之间的通信,常用的是TCP/IP协议

网络层:此处需要确定计算机的位置,怎么确定?IPv4,IPv6!

数据链路层:可以简单的理解为:规定了0和1的分包形式,确定了网络数据包的形式

物理层:物理层负责最后将信息编码成电流脉冲或其它信号用于网上传输

2.HTTP 的工作原理是什么?

HTTP(超文本传输协议)是应用层协议。HTTP协议采用的是请求/响应模型,当客户端给服务器建立连接后,向服务器发送一个请求,服务器接收到相应的请求后,给客户端一个响应信息。

  1. 客户端连接到web服务器:HTTP客户端与web服务器建立一个TCP连接
  2. 客户端向服务器发起HTTP请求:通过已经创建好了的TCP连接,客户端给服务器发送一个请求报文
  3. 服务器接收HTTP请求并返回HTTP响应:服务器解析请求,定位请求资源,服务器将资源副本写到TCP连接,由客户端读取
  4. 释放TCP连接:若connection模式为close,则服务器主动关闭TCP连接,释放TCP连接,若connection模式为keep alive,则该连接会保持一段时间,在该时间内可以继续接受请求

3.URL的格式是什么?常见的协议

URL(统一资源定位符):协议+域名+端口+路径组成

常见的协议

  1. 网络层协议: IP协议、ICMP协议、ARP协议、RARP协议。
  2. 传输层协议:TCP协议、UDP协议。
  3. 应用层协议: FTP、Talnet、HTTP、SMTP

4.HTTP 协议有几种和服务器交互的方法

  1. GET:最常用的方法,通常用于请求服务器发送某个资源,通常返回在响应主体
  2. POST: 向指定资源提交数据,请求服务器进行处理,如:表单的数据提交,文件的上传等,请求数据会被包含在请求体中。
  3. HEAD: 和GET方法类似,但是它不会资源的内容,而是返回资源的一些基本信息。主要运用于
    • 在不获取资源的情况下获取资源信息(类型、大小等)
    • 通过状态码产看资源是否存在
    • 通过查看首部,测试资源是否被修改了
    • HEAD方法常被用于客户端查看服务器的性能。
  4. PUT: 和GET从服务器获取资源相反,PUT用于想服务器写入资源。PUT的语义就是让服务器用请求的主体部分创建一个请求URL命名的文档,如果存在就替换。
  5. TRACE: 客户端发送一个请求的时候,这个请求可能会穿过防火墙、代理、网关和一些其它应用程序,没个中间节点都可能修改HTTP请求,TRACE方法允许客户端在最终请求发往服务器的时候,看看它变成了什么样子。
  6. DELETTE:用于要求服务器删除请求的URL。
  7. OPTIONS: OPTIONS方法用于请求 web服务器告知其支持的各种功能

5.状态码200301304403,404,500503分别代表什么意思

200: 表示请求得到响应的相应 OK

**301: **表示客户请求的文档在其他地方,新的URL在Location中指出,浏览器会自动地访问新的URL地址 Moved Permanently(永久行的移动)
301状态码


**302: ** ---类似于301,但是表示临时的替代,而不是永久性替代,浏览器也会自动跳到新的URL地址, “Moved Temporatily”(临时的移动)

304: ---(未修改)自从上次请求后,请求的内容没有被修改过,不会返回内容,直接用浏览器的缓存内容。通常(If-Modified-Since在请求头中,浏览器端缓存页面的最后修改时间一起发到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间Last-Modified进行比较,如果时间一致,就使用缓存)If-Modified-Since解析

403: ---(禁止)资源不可用,服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致。Forbidden

404: ---(未找到) 找不到资源 Not Found

500: ---(服务器内部错误)服务器遇到了意料不到的情况,不能完成客户的请求

503: --- (服务不可用)服务器目前无法使用(由于超载或停机维护)

6.报文有哪几部分组成?

一个HTTO报文有三部分组成

  1. 对报文进行描述的起始行 ----start line
  2. 包含属性的首部块 ----header
  3. 可选的包含数据的主体部分 ----body

HTTP报文分2大类

请求报文 :向web服务器请求一个动作

<method><request-URL><version>
<headers>

<entity-body> /*请求一般没有数据的内容*/

响应报文: 将请求结果返回给客户端

<version><status><reason-phrase>
<headers>

<entity-body>

7.请求头的格式和作用是什么?给个范例截图说明

格式:键值对

作用:告诉客户端一些请求的基本要求和样式
request headers.png

8.首部的格式和作用是什么?给个范例截图说明

格式: 键值对

首部的分类:1. 通用首部字段(General)2. 请求首部字段(Request),3. 响应首部字段(Response),4. 实体首部字段(Entity) 

首部.png

9主体的作用是什么?给个范例

主体: 主体是HTTP的第三个部分,该部分是可选择的,一般有主体的请求方法是post。主体是HTTP报文的负荷,就是HTTP所要传输的内容。
response内容.png

10 简述浏览器缓存是如何控制的

第一次请求

没有缓存的时候

有缓存后第二次请求

第二次请求

  • Cache-control:每个资源都可以通过设置cache-control来简历缓存策略。例如,若设定Cache-Control: max-age=604800,(单位为秒),则表示这个资源的有效时间为 7 天。 ----服务器返回Cache- Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置 Cache-Control并不会修改另一个消息处理过程中的缓存处理过程
  • Expires:响应头从另一个角度——指明缓存的具体过期日期,来控制资源何时过期。在过期时间以内,若再次发起请求,通常浏览器都不会与服务器进行任何通信,而是直接使用本地副本。当 Expires 和 Cache-Control 同时出现时,通常后者会覆盖前者的设定。 ----Response Headers中,指定过期时间
  • Last-Modified和ETag:服务器可在 HTTP 返回头中包含Last-Modified字段或者ETag字段。Last-Modified 表示被请求资源在服务器端的上次修改时间,而 ETag 则是一个唯一文件标识符,每次文件修改后都会生成一个新的 ETag。服务器通过向浏览器发送这两个字段,来告知浏览器其获得的资源的版本。
    无论通过 Cache-Control 还是 Expires 设置缓存,在过期时间以内,当用户点击浏览器刷新按钮时,为了确保用户所加载的资源是最新的,大部分浏览器不会再直接使用缓存中的数据,而是发出一个条件请求(Conditional GET Request)。对于这类请求,浏览器会在请求头中包含If-Modified-Since或If-None-Match字段。前者即浏览器当初得到的 Last-Modified;后者即浏览器当初得到的 ETag。当服务器发现资源的更新时间晚于 If-Modified-Since 所提供的时间,或者资源在服务器端当前的 ETag 和 If-None-Match 提供的不符时,会响应整个资源,否则只会响应一个 304 Not Modified 状态码(因此浏览器将不需要重新下载整个资源)。这种机制可以最大程度上减少数据下载量。此外,如果缓存的资源已过期,浏览器通常有两种选择:重新下载这个资源,或发出一个条件请求。很多浏览器都会采取后者,以节约资源。
  • **---Last-modified实体头指定服务器上保存内容的最后修订时间。 **
  • Pragma:指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝。

11.下图各个参数是什么意思

参数的意思

通用首部General

  • **Request URL: ** 资源的路径
  • **Request Method: ** 资源的请求的方法
  • **Status Code: ** 返回的状态码
  • **Remote Address: ** 远程服务器的ip地址和端口号

反应头部(Response Headers)

  • Connection:表示是否需要持久连接(close/keep-alive ),如果Servlet看到这里的值为“Keep- Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。
  • Content-Length: 表示实际传输返回的长度
  • Date: 返回文档的当地时间
  • server: 表示服务器的类型
  • **X-Powered-By: ** 表示语言解析器

请求头(Request Headers)

  • accept: 浏览器可接受的MIME类型。

  • Accept-Encoding 浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间。

  • Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。

  • Connection:表示是否需要持久连接

  • Content-Length:表示请求消息正文的长度。

  • Content- Type 表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。由于经常要设置 Content-Type,因此HttpServletResponse提供了一个专用的方法setContentTyep。

  • Cookie: 个人的信息保存量,来区分不同的人不同的界面

  • Host: 指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。

  • Origin: 用来说明最初请求是从哪里发起的,只用于post请求

  • Referer: 表示上一个页面的地址,包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。

  • User-agent: 浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。

  • X-Requested-With: 用于区分是传统的同步请求,还是AJAX异步请求

参考链接

http综合

X-Requested-With区别

If-Modified-Since

浏览器缓存知识

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant