HTTP

1. 了解URL、URI、URN

  • URI(Uniform Resource Identifier,统一资源标识符

    web服务器资源的名字,例如: index.html

  • URL(Uniform Resource Locator,统一资源定位符

  • URN(Uniform Resource Name,统一资源名称),例如 urn:isbn:0-486-27557-4。

URI 包含 URL 和 URN,目前 WEB 只有 URL 比较流行,所以见到的基本都是 URL。

 

HTTP的请求和响应报文

(1)请求报文

 

 GET请求

 

POST请求

   

(2)响应报文

 

 

200响应

 

 

404响应

HTTP状态

服务器返回的 响应报文 中第一行为状态行,包含了状态码以及原因短语,用来告知客户端请求的结果。

 

(1)1XX 信息

  • 100 Continue :表明到目前为止都很正常,客户端可以继续发送请求或者忽略这个响应。

(2)2XX 成功

  • 200 OK
  • 204 No Content :请求已经成功处理,但是返回的响应报文不包含实体的主体部分。一般在只需要从客户端往服务器发送信息,而不需要返回数据时使用。
  • 206 Partial Content :表示客户端进行了范围请求。响应报文包含由 Content-Range 指定范围的实体内容。

(3)3XX 重定向

  • 301 Moved Permanently :永久性重定向
  • 302 Found :临时性重定向
  • 303 See Other :和 302 有着相同的功能,但是 303 明确要求客户端应该采用 GET 方法获取资源。
  • 注:虽然 HTTP 协议规定 301、302 状态下重定向时不允许把 POST 方法改成 GET 方法,但是大多数浏览器都会在 301、302 和 303 状态下的重定向把 POST 方法改成 GET 方法。
  • 304 Not Modified :如果请求报文首部包含一些条件,例如:If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since,如果不满足条件,则服务器会返回 304 状态码。
  • 307 Temporary Redirect :临时重定向,与 302 的含义类似,但是 307 要求浏览器不会把重定向请求的 POST 方法改成 GET 方法。

(4)4XX 客户端错误

  • 400 Bad Request :请求报文中存在语法错误。
  • 401 Unauthorized :该状态码表示发送的请求需要有认证信息(BASIC 认证、DIGEST 认证)。如果之前已进行过一次请求,则表示用户认证失败。
  • 403 Forbidden :请求被拒绝,服务器端没有必要给出拒绝的详细理由。
  • 404 Not Found

(5)5XX 服务器错误

  • 500 Internal Server Error :服务器正在执行请求时发生错误。
  • 503 Service Unavailable :服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

HTTP方法

 客户端发送的 请求报文 第一行为请求行,包含了方法字段。

(1)GET (获取资源)

当前网络请求中,绝大部分使用的是 GET 方法。

(2)HEAD (获取报文首部)

和 GET 方法一样,但是不返回报文实体主体部分。

主要用于确认 URL 的有效性以及资源更新的日期时间等。

(3)POST (传输实体主体)

POST 主要用来传输数据,而 GET 主要用来获取资源。

(4)PUT (上传文件)

由于自身不带验证机制,任何人都可以上传文件,因此存在安全性问题,一般不使用该方法。

(5)PATCH (对资源进行部分修改)

PUT 也可以用于修改资源,但是只能完全替代原始资源,PATCH 允许部分修改。

(6)DELETE (删除文件)

与 PUT 功能相反,并且同样不带验证机制。

(7)OPTIONS (查询支持的方法)

查询指定的 URL 能够支持的方法。

会返回 Allow: GET, POST, HEAD, OPTIONS 这样的内容。

(8)CONNECT (要求在与代理服务器通信时建立隧道)

使用 SSL(Secure Sockets Layer,安全套接层)和 TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。

(9)TRACE (追踪路径)

服务器会将通信路径返回给客户端。

发送请求时,在 Max-Forwards 首部字段中填入数值,每经过一个服务器就会减 1,当数值为 0 时就停止传输。

通常不会使用 TRACE,并且它容易受到 XST 攻击(Cross-Site Tracing,跨站追踪)。

GET和POST的区别?(面试)

  • GET 被强制服务器支持

  • 浏览器对URL的长度有限制,所以GET请求不能代替POST请求发送大量数据

  • GET请求发送数据更小

  • GET请求是不安全的

  • GET请求是幂等的

    • 幂等的意味着对同一URL的多个请求应该返回同样的结果
  • POST请求不能被缓存

  • POST请求相对GET请求是「安全」的

    • 这里安全的含义仅仅是指是非修改信息
  • GET用于信息获取,而且是安全的和幂等的

    • 所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。
  • POST是用于修改服务器上的资源的请求

  • 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

引申:说完原理性的问题,我们从表面上来看看GET和POST的区别:

  • GET是从服务器上获取数据,POST是向服务器传送数据。 GET和 POST只是一种传递数据的方式,GET也可以把数据传到服务器,他们的本质都是发送请求和接收结果。只是组织格式和数据量上面有差别,http协议里面有介绍
  • GET是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。POST是通过HTTP POST机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。 因为GET设计成传输小数据,而且最好是不修改服务器的数据,所以浏览器一般都在地址栏里面可以看到,但POST一般都用来传递大数据,或比较隐私的数据,所以在地址栏看不到,能不能看到不是协议规定,是浏览器规定的。
  • 对于GET方式,服务器端用Request.QueryString获取变量的值,对于POST方式,服务器端用Request.Form获取提交的数据。 没明白,怎么获得变量和你的服务器有关,和GET或POST无关,服务器都对这些请求做了封装
  • GET传送的数据量较小,不能大于2KB。POST传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。 POST基本没有限制,我想大家都上传过文件,都是用POST方式的。只不过要修改form里面的那个type参数
  • GET安全性非常低,POST安全性较高。 如果没有加密,他们安全级别都是一样的,随便一个监听器都可以把所有的数据监听到。

浅谈GET与POST : https://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html

posted @ 2019-09-09 15:15  GoAheadAQU  阅读(282)  评论(0编辑  收藏  举报