欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

WEB开发之HTTP简述

程序员文章站 2024-03-20 16:30:58
...

HTTP—–超文本传输协议(HTTP,HyperText Transfer Protocol)

1. 长连接和短连接

  1. 在HTTP/1.0中,默认使用的是短连接。浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。

  2. 从 HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头有加入这行代码:

    Connection:keep-alive
    在使用长连接时,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接要客户端和服务端都支持长连接。


  • HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。

  • 短连接的操作步骤是:

    建立连接——数据传输——关闭连接…建立连接——数据传输——关闭连接

  • 长连接的操作步骤是:
    建立连接——数据传输…(保持连接)…数据传输——关闭连接

2. 一个Http请求流程

  • DNS域名解析 –> 发起TCP的三次握手 –> 建立TCP连接后发起http请求 –> 服务器响应http请求,浏览器得到html代码 –> 浏览器解析html代码,并请求html代码中的资源(如javascript、css、图片等) –> 浏览器对页面进行渲染呈现给用户

3. http 常见的状态码有哪些?

  • 200 OK //客户端请求成功
  • 301 Moved Permanently(永久移除),请求的 URL 已移走。Response 中应该包含一个 Location URL, 说明资源现在所处的位置
  • 302 found 重定向
  • 400 Bad Request //客户端请求有语法错误,不能被服务器所理解
  • 401 Unauthorized //请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用
  • 403 Forbidden //服务器收到请求,但是拒绝提供服务
  • 404 Not Found //请求资源不存在,eg:输入了错误的 URL
  • 500 Internal Server Error //服务器发生不可预期的错误
  • 503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

4.GET 和 POST 的区别?

GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。

  • 根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。
  • 幂等的意味着对同一URL的多个请求应该返回同样的结果。
  • 在实际应用中,并没有这么严格。比如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。从根本上说,如果目标是当用户打开一个链接时,他可以确信从自身的角度来看没有改变资源即可。

根据HTTP规范,POST表示可能改变服务器上的资源的请求。

继续引用上面例子:新闻以网站为例,读者对新闻发表自己的评论应通过POST实现,因在评论提交后站点的资源已经不同了,或者说资源被修改了。

* 大概说了下HTTP规范中GET和POST的一些原理性的问题。但实际做时,大多没有按照HTTP规范去做,导致这个问题的原因有很多,比如:
1. 方便,更新资源时用了GET,因用POST要用到FORM(表单),麻烦一点。
2. 对资源的增,删,改,查操作,其实都可通过GET/POST完成,不需PUT和DELETE。
3. 早期的Web MVC框架设计者们并没有意识地将URL当作抽象的资源来看待和设计,所以一个较严重的问题是传统Web MVC框架基本上只支持GET和POST两种HTTP方法,不支持PUT和DELETE方法。

从表面现像上面看 GET 和 POST 的区别:

  1. GET 请求的数据会附在 URL 之后(就是把数据放置在 HTTP 协议头中),以?分割 URL 和传输数据,参数之间以&相连,

    如:login.action?name=zhagnsan&password=123456。POST 把提交的数据则放置在是 HTTP 包的包体中。

  2. GET 方式提交的数据最多只是1024 字节,理论上 POST 没限制,可传较大量数据。
    其实这样说是错误的,不准确的:
    • “GET 方式提交的数据最多只能是 1024 字节”,因为 GET 是通过 URL 提交数据,那么 GET 可提交的数据量就跟URL 的长度有直接关系了。
    • 而实际上,URL 不存在参数上限的问题,HTTP 协议规范没有对 URL 长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox 等,理论上没有长度限制,其限制取决于操作系统的支持。
  3. POST 的安全性要比 GET 的安全性高。

    这里的安全性和上面 GET 提到的“安全”不是同个概念。
    上面“安全”的含义仅是不作数据修改,这里安全的含义是真正的Security.
    比如:通过 GET 提交数据,用户名和密码将明文出现在 URL 上,因(1)登录页面可能被浏览器缓存(2)其他人查看浏览器的历史纪录,那么别人可拿到你的账号和密码
    除此之外,使用 GET 提交数据还可能会造成 Cross-site request forgery 攻击。

  4. Get 是向服务器发索取数据的一种请求,而 Post 是向服务器提交数据的一种请求,在 FORM(表单)中,Method默认为”GET”.实质上,GET 和 POST 只是发送机制不同,并不是一个取一个发!

5. http中重定向和转发

  • 本质区别:转发是服务器行为,重定向是客户端行为。
    重定向特点:两次请求,浏览器地址发生变化,可以访问自己 web 之外的资源,传输的数据会丢失。
    请求转发特点:一次强求,浏览器地址不变,访问的是自己本身的 web 资源,传输的数据不会丢失。
相关标签: http 服务器