http协议

HTTP协议

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

http简介

HTTP协议工作于客户端-服务端架构(C/S)上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。

Web服务器有:Apache服务器,IIS服务器(Internet Information Services)等。

HTTP默认端口号为80,但是你也可以改为8080(代理服务器)或者其他端口。

HTTP通信流程:

HTTP消息结构

客户端请求消息(请求头)

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,如下图:

1、请求行

请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。比如:

GET /data/info.html HTTP/1.1

方法字段就是HTTP使用的请求方法,比如常见的GET/POST/HEAD。HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

URL统一资源定位符

其中HTTP协议版本有两种:HTTP1.0/HTTP1.1。

2、请求头部

大多数请求头并不是必需的,但Content-Length除外。对于POST(向服务器提交数据)请求来说Content-Length必须出现。

常见的有:

  • Host: 客户机通过这个头告诉服务器,想访问的主机名。Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。
  • User-Agent:User-Agent头域的内容包含发出请求的用户信息。浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。
  • Cookie:客户机通过这个头可以向服务器带数据,这是最重要的请求头信息之一。
  • 更多请求头字段参考HTTP请求/响应报文结构

3、空行

通过一个空行,告诉服务器请求头部到此为止,以下是请求数据。

4、请求数据

  • 若方法字段是GET,则此项为空,没有数据。
  • 若方法字段是POST,则通常来说此处放置的就是要提交的数据。表单数据包含在这部分。

服务器响应消息(响应头)

HTTP响应也由四个部分组成,分别是:响应行、响应头、空行和响应体。

1、响应行

响应行一般由协议版本、状态码及其描述组成 比如:

HTTP/1.1 200 OK

其中协议版本HTTP/1.1或者HTTP/1.0,200就是它的状态码(关于状态码见下文),OK则为它的描述。

2、响应头

响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。根据响应行的状态码,响应头会有不同的字段。例如,有好几个表示“文档位置已经改变”的状态代码都伴随着一个Location头,而401(Unauthorized)状态代码则必须伴随一个WWW-Authenticate头。

常见的响应头字段:

  • Allow:服务器支持哪些请求方法(如GET、POST等)
  • Date:当前的GMT时间
  • Server:服务器通过这个头告诉浏览器服务器的类型
  • 更多响应头字段请参考HTTP 响应头信息

3、空行

通过一个空行,告诉服务器请求头部到此为止,以下内容是响应体。

4、响应体

响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码。

通用头(General)、实体头

详见通用头、实体头

状态码

状态码分类

  • 1**:信息,服务器收到请求,需要请求者继续执行操作
  • 2**:成功,操作被成功接收并处理
  • 3**:重定向,需要进一步的操作以完成请求
  • 4**:客户端错误,请求包含语法错误或无法完成请求
  • 5**:服务器错误,服务器在处理请求的过程中发生了错误

常见状态码

  • 200 - 请求成功。
  • 301 - 资源(网页等)被永久转移到其它URL。
  • 304 - 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。
  • 400 - 客户端请求的语法错误,服务器无法理解。
  • 401 - 未授权。请求要求用户的身份认证。
  • 404 - 请求的资源(网页等)不存在。
  • 500 - 内部服务器错误。
  • 502 - 充当网关或代理的服务器,从远端服务器接收到了一个无效的请求。
  • 更多 - 参考HTTP状态码

区分GET/POST

1、提交数据的形式

  • GET请求的数据会附在URL之后,会直接展现在地址栏中。
  • POST方法则会把数据放到请求数据字段中以&分隔各个字段,请求行不包含数据参数,地址栏也不会额外附带参数

2、提交数据的安全

POST比GET方式的安全性要高

通过GET提交数据,用户名和密码将明文出现在URL上,如:

  • 登录页面有可能被浏览器缓存
  • 其他人查看浏览器的历史纪录
  • 跨站攻击

发表评论

评论列表,共 1 条评论

  • aa
    ddd