HTTP报文解析

详解

HTTP请求行、请求头、请求体详解

请求方法(HTTP 1.1中支持)

  • 解析HTTP协议六种请求方法,get,head,put,delete,post有什么区别
    • get:提交的数据最多1024字节
    • head:只请求页面的首部
    • post:数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
    • put:与post相似,但是会指定资源的存放位置
    • options:允许客户端查看服务器的性能,获取当前URL所支持的方法
    • delete:删除某一资源,返回的状态码(200:ok,202:Accepted,204:No Content)
    • trace:回显服务器收到的请求,主要用于测试或诊断
    • connect:动态切换为隧道的代理,把服务器作为跳板,让服务器代替用户去访问其它网页,之后把数据原原本本的返回给用户。

②URL地址

③协议名称及版本号

HTTP报文头

  • 一些标准报文头:
    • Accept:text/plain:告诉服务器,客户端接受什么类型的相应,属性值可以为一个或者多个MIME类型的值
    • Accept-Charset: utf-8
    • Accept-Encoding: gzip, deflate
    • Accept-Language: en-US
    • Access-Control-Request-Method: GET:Cross-origin resource sharing
    • Host:The domain name of the server
    • Connection: keep-alive
    • Origin: http://www.example-social-network.com
    • Content-Type: application/x-www-form-urlencoded:Media type of the body of the request(post and put)
    • Cookie
    • Referer
    • Cache-Control: no-cache:让服务端将对应请求返回的响应内容不要在客户端缓存
    • User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/12.0
    • Content-Length: 348
    • X-Forwarded-For: client1, proxy1, proxy2:绕过服务器IP地址过滤,tcp层伪造源IP比较困难可以在http层进行伪造
    • X-Frame-Options: deny:防止网页被Frame,点劫持防御。deny表示页面不能被嵌入到任何iframe或frame中。

⑤报文体:将一个页面表单中的组件值通过param1=value1&param2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。

状态码

HTTP的响应状态码由3位数字构成,根据第一位数字的值可以把HTTP响应分为5类:

  • 1xx:代表响应已经被服务器接受,需要继续处理
  • 2xx:这一类型的状态码,表示该HTTP请求已经被服务器成功接受和理解。
  • 3xx:重定向标识。表示客户端需要采取进一步操作才能完成请求,重定向地址会在本次响应报文的消息报头中给出,其字段名为Location。
  • 4xx:客户端错误。这类状态码表示发送请求的客户端发生了错误,妨碍了服务器的请求处理。
  • 5xx:服务器错误。其表示服务器在处理请求的过程中有错误或者异常状态发生,也可能是服务器当前的硬件资源无法完成对客户端的请求处理。

常见状态码:

  • 200 OK:客户端请求成功。
  • 400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
  • 401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
  • 403 Forbidden:服务器收到请求,但是拒绝提供服务。
  • 404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
  • 500 Internal Server Error:服务器发生不可预期的错误。
  • 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,举个例子:HTTP/1.1 200 OK(CRLF)。