阅读 124

聊一聊HTTP

Http简介

  • Http协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于服务器传输超文本到本地浏览器的传输协议
  • Http是一个基于TCO/IP的通信协议来传递数据

Http的工作原理

Http的协议工作于客户端-服务端的架构上。浏览器作为Http客户端通过URL向Http服务端及web服务器发送的所有请求

Http三点注意事项

  • Http是无连接的:无连接的含义是每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后断开连接这种方式可以节省传输的时间
  • Http是媒体独立的:只要客户端和服务端知道如何处理的数据内容,任何类型的数据都可以通过Http发送,客户端以及服务器指定使用适合的MIMME-type内容类型
    • 浏览器显示的内容都有HTML,XML,GIF,Flash等,浏览器通过MIME Type区分他们,决定用什么内容什么形式来显示 --- 媒体类型通常通过Http协议,由Web服务器告知浏览器,更准确地说是通过Content-Type来表示的。例如Content-Type:text/HTML
  • Http:是无状态协议,是指协议对于交互场景没有记忆能力

Http的消息结构

Http客户端请求消息结构

客户端发送一个Http请求到服务器的请求消息包括以下格式

Http服务器响应消息结构

Http响应也由四个部分组成,分别是:状态行,消息报头,空行和响应正文

Http的请求方法

  • 根据Http标准,Http可以使用多种请求方式
  • Http1.0定义了三种请求方式:GET,POST,HEAD
  • Http1.1新增了六种请求方式:OPTIONS,PUT,PATCH,DELETE,TRACE和CONNECT方法
-------------------------
GET 请求指定页面信息,并返回实体主体
HEAD 类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头
POST 向指定资源提交数据进行处理请求(例如表单提交或者上传文件)。数据被包含在请求体中,POST请求可能会导致新的资源建立和/或已有资源修改
PUT 向指定资源位置上传其最新内容。
DELETE 请求服务去删除Request-URI 所标识的资源
CONNECT Http/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS 允许客户端查看服务器的性能。
TRACE 回显服务器收到的请求,主要用于测试或诊断。
PATCH 是对 PUT 方法的补充,用来对已知资源进行局部更新 。

Http请求头信息

  • Accept:浏览器可接受的MIME类型,也就是代表着浏览器希望接受到什么样的文件
  • Accept-Charset:浏览器可接受的字符集
  • Accept-Encoding:浏览器能够进行解码的数据编码方式
  • Accept-Language:浏览器所接受的语言
  • Authorization:授权信息
  • Content-Length:表示请求消息的正文的长度
  • Host:客户端通过这个头告诉服务器,想访问的主机名
  • If-Modified-Since:告诉服务器,资源的缓存时间
  • Referer:表明客户机是从哪里来
  • User-Agent:User-Agent头域的内容包含发出请求的用户信息,浏览器类型

Http响应头信息

  • Allow:服务器支持的哪写请求方式
  • Content-Encoding:文档的编码的方法
  • Content-Length:表示内容的长度
  • Content-Type:表示后面文档属于什么MIME类型
  • Date:当前的GMT时间【可以通过setDateHeader来设置这个头,避免转化时间格式的麻烦】
  • Expires:表示在什么时候文档过期,不在进行缓冲
  • Server:服务器的名字
  • WWW-Authenticate:客户应该在Authorization头中提供什么类型的授权信息

请求方式的区别

POST   VS   GET

  • GET后退按钮/刷新无害,POST数据会被重新提交(浏览器应该告知用户数据会被提交)
  • GET书签可收藏,POST为书签不可收藏,GET能被缓存,POST不能缓存
  • GET的历史参数会被保留在浏览器的历史中,而POST请求不会
  • GET对数据长度有限制,当发送数据的时候GET方法想URL添加数据,URL的长度是受限制的最大长度是2048个字符,POST无限制
  • GET只允许ASCII字符,POST没有限制,也允许二进制数据
  • 与POST相比,GET的安全性比较差
  • GET只会产生一个TCP数据包,而POST会产生两个TCP数据包;对于GET请求方式,浏览器会把header和data一起发送出去,服务返回200响应,而对于POST,浏览器先发送header,服务器响应continue,浏览器在发送data,服务器响应200

POST   VS   PUT

  • PUT请求:如果两个请求相同,后一个请求会把第一个请求覆盖掉【所以PUT用来改资源】
  • POST请求:后一个请求不会把第一个请求覆盖掉【所有POST用来增资源】