http协议基础整理

  |   0 评论   |   200 浏览

HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了HTTPS。HTTP默认的端口号为80,HTTPS的端口号为443。

特点

  1. 客户端发起,服务端响应。
  2. 支持客户/服务器模式。支持基本认证和安全认证。
  3. 数据类型Content-Type灵活
  4. 无状态协议,前后的建立的连接可以认为基本独立

HTTP 0.9和1.0使用非持续连接:限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。HTTP 1.1使用持续连接:不必为每个web对象创建一个新的连接,一个连接可以传送多个对象。

HTTP协议是无状态的和Connection: keep-alive的区别:

  1. 无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态
  2. HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议(无连接)
  3. 从HTTP/1.1起,默认都开启了Keep-Alive,CS之间的TCP连接不会关闭,再次访问服务器上的网页,会默认采用之前的连接,省去了每次建立连接握手的过程
  4. Keep-Alive不会永久保持,服务器上可以设置

而无状态协议:

  • 协议的状态是指下一次传输可以“记住”这次传输信息的能力。
  • http是不会为了下一次连接而维护这次连接所传输的信息,为了保证服务器内存。比如客户获得一张网页之后关闭浏览器,然后再一次启动浏览器,再登陆该网站,但是服务器并不知道客户关闭了一次浏览器。
  • 由于Web服务器要面对很多浏览器的并发访问,为了提高Web服务器对并发访问的处理能力,在设计HTTP协议时规定Web服务器发送HTTP应答报文和文档时,不保存发出请求的Web浏览器进程的任何状态信息。这有可能出现一个浏览器在短短几秒之内两次访问同一对象时,服务器进程不会因为已经给它发过应答报文而不接受第二期服务请求。由于Web服务器不保存发送请求的Web浏览器进程的任何信息,因此HTTP协议属于无状态协议(Stateless Protocol)。

总的来说,就是keep-alive只是保持TCP连接,而无状态是指每次连接中发送的请求所包含的数据和状态是独立的,无记忆的。

请求方法

  • OPTIONS - 返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送’*’的请求来测试服务器的功能性。
  • HEAD- 向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。该方法常用于测试超链接的有效性,是否可以访问,以及最近是否更新。
  • GET - 向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在web app.中。其中一个原因是GET可能会被网络蜘蛛等随意访问。
  • POST - 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
  • PUT - 向指定资源位置上传其最新内容。
  • DELETE - 请求服务器删除Request-URI所标识的资源。
    TRACE- 回显服务器收到的请求,主要用于测试或诊断。
  • CONNECT - HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
  • PATCH - 用来将局部修改应用于某一资源,添加于规范RFC5789。
    方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed);当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)

一般GET/POST是用的最多的,也经常会用到PUT/DELETE,用来明确的区分方法的意图。

get和post的区别

1、GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中。
2、GET提交的数据大小有限制,最多只能有1024字节(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制。
3、GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。
4、GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码。

以上区别基本上都是需要注意的地方

解决HTTP无状态的问题

  1. 通过Cookies保存状态信息
  2. 通过Session保存状态信息
    a.这里区分用cookie来保存sessionID的方式
    b.及用url来保存sessionID

认证方式

  1. 基本认证:用户名和密码来进行认证
  2. HTTP OAuth认证:采用token进行认证

HTTPS

这部分后面再开一篇来介绍吧。内容详细些会比较多。写的简略也理解不清楚。

关于响应头的字段信息,以及其他具体一些的内容,参考 这里

评论

发表评论

validate