Http协议备忘录

参考文献

《图解HTTP》
http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html
http://blog.csdn.net/elifefly/article/details/3964766
http://www.guokr.com/question/554991/
http://blog.csdn.net/zhll3377/article/details/7748086

Http的报文结构

请求报文

响应报文

Http请求方法

GET获取资源。请求访问已被URI识别的资源,指定的资源经服务器端解析后返回相应内容。
POST传输实体主体。主要目的是向服务器提交数据,而不是获取响应的主体内容。
HEAD:获得报文首部
OPTIONS:询问支持的方法。用来查询针对请求URI指定的资源支持的方法。
PUT:传输文件。自身不带验证机制,存在安全性问题。
DELETE:删除文件。不带验证机制,存在安全性问题。

Http的状态码

状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。
(1)2xx成功
表示请求被正常处理了。

  • 200 OK
  • 204 No Content
  • 206 Partition Content

(2)3xx重定向
(3)4xx客户端错误
表示客户端是发生错误的原因所在。

  • 400 Bad Request 请求报文中存在语法错误
  • 401 Unauthorized 发送的请求需要有通过HTTP认证的认证信息(浏览器初次接收到401响应会弹出认证的对话窗口)
  • 403 Forbidden 请求资源的访问服务器拒绝了(如未获得文件的访问授权,访问权限出现问题等)
  • 404 Not Found 服务器上无法找到请求的资源(或服务器只是拒绝访问并不想说明理由)

(4)5xx服务器错误
表示服务器本身发生错误。

  • 500 Internal Server Error 内部故障
  • 503 Service Unavailable 服务器处于超负载或正在停机维护

Http处理长连接

HTTP1.1规定了默认保持长连接(或叫做持久连接),单次数据传输完成了保持TCP连接不断开,如果不希望使用长连接,则要在HTTP请求报文首部加上Connection:close。
长连接的过期时间可以由Keep-Alive后的参数得知。
使用长连接之后,客户端、服务端怎么知道本次传输结束呢?两个方法:

  • 判断传输数据是否达到了Content-Length指示的大小;
  • 动态生成的文件没有Content-Length,它是分块传输(chunked),这时候就要根据chunked编码来判断,chunked编码的数据在最后有一个空chunked块,表明本次传输数据结束。

Http的缺点

  • 通信使用明文(不加密),内容可能会被窃听;
  • 不验证通信方的身份,因此有可能遭遇伪装;
  • 无法证明报文的完整性,所以有可能已遭篡改。

HTTPS

HTTP+加密+认证+完整性保护=HTTPS

Cookie与Session

会话跟踪技术是用来跟踪用户的整个会话,常用的技术是cookie和session.
Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就用向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。
Session是服务器端使用的一种记录客户端状态的机制(比较来说,cookie记录在客户端上),相当于在服务器建立的客户档案。session的使用需要cookie的帮助(用cookie携带session的id)。session有可能会影响服务器的性能。

电脑上访问一个网页的整个流程

(1)把URL分割成几个部分:协议、网络地址(域名或IP地址,可以包括端口号)、资源路径。
(2)如果网络地址是域名地址,需要通过DNS将其解析为IP地址;如果地址不包含端口号,根据协议的默认端口号确定一个。
(3)向确认了的IP地址和端口号发起TCP连接(三次握手)。
(4)根据http协议,组织一个请求报文,包含大量的请求信息。
(5)服务器响应请求,将数据返回给浏览器。
(6)浏览器解析html代码,并向服务器请求html代码中的资源。
(7)浏览器对页面进行渲染呈献给用户。

URI和URL的区别

URI:统一资源标识符,可以唯一标识一个资源;
URL:统一资源定位符,可以提供找到该资源的路径。
URL一定是URI,但URI不一定是URL(因为URI还有一个子集URN,它命名资源但不指定如何定位资源,如tel:+1-816-555-1212)。

GET和POST的区别

  • GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。
  • GET请求发送的数据会附在URL之后(以?分割URL和传输数据,参数之间用&相连),POST把提交的数据放置在HTTP包的包体中。
  • GET提交的数据长度收到URL长度的限制,POST提交数据没有大小限制。
  • POST的安全性要比GET的安全性高(如通过GET提交用户名和密码,它们将明文出现在URL上,登录页面有可能会被缓存,其他人也可能查看到浏览器的历史记录)。

Http1.1和Http1.0的区别

  • Http1.0规定浏览器与服务器只能保持短暂的连接,浏览器的每次请求都需要与服务器建立TCP连接,服务器完成请求处理后即断开连接;Http1.1支持持久连接,在一个TCP连接上可传送多个HTTP请求和响应,且允许客户端不用等待上一次的请求结果返回就可以发出下一个请求。
  • Http1.1增加了更多的请求头和响应头以提升Http1.0的性能,如Host、Connection等。
  • Http1.1增加了更多的请求方法,如OPTIONS/TRACE/CONNECT等。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值