zoukankan      html  css  js  c++  java
  • http请求报文与响应报文

    #转载请联系

    每当我们打开浏览器浏览网页时,一般都是很简单,输入网址,回车网页就弹出来了。其实里面的工作还是很多的。

    首先,我们打开一个网址,例如www.baidu.com。浏览器会发送一个请求报文给百度的服务器,百度的服务器收到你的请求报文,会发一份响应报文回来给你。

    这就是一种协议,我们称为http协议,即超文本传输协议。http协议又是基于tcp协议的。因为http传送的是超文本,为了避免保证数据不缺漏,所以采用tcp协议来传输。所以又常说http协议基于tcp/ip协议。

    那么,这个请求报文和响应报文是什么东西呢?

    我们打开chrome的开发者模式看一下,这个请求报文是什么东西。

    首先打开开发者模式会出现这么一个界面。

    但是,请求报文在哪呢?

    我们单击开发者模式框里面的www.baidu.com。可以看到Request Headers。点击view source,就可以看到请求报文的源代码了。

    下面是请求报文的源代码,我单独拿出来注释下:

     1 GET / HTTP/1.1  # 这是请求行,组成:请求方式是GET,请求路径是/,协议版本是HTTP/1.1
     2 Host: www.baidu.com  # 这里开始是请求头,这行是主机名
     3 Connection: keep-alive  # 连接方式:长连接。HTTP/1.1版本默认是长连接
     4 Cache-Control: max-age=0  # 缓存控制
     5 Upgrade-Insecure-Requests: 1  # 支持升级安全的请求,即支持https
     6 """用户代理。用来识别用户身份的,伪装浏览器时需要用到。
     7 组成:操作系统版本,浏览器版本"""
     8 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36
     9 """能接收的文本类型"""
    10 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 
    11 Accept-Encoding: gzip, deflate, br  # 能接受的压缩超文本格式 
    12 Accept-Language: zh-CN,zh;q=0.9  # 接受的语言
    13 """存在浏览器本地访问某个网站的用户行为信息"""
    14 Cookie: BAIDUID=D5FD8C3E75018B4330AEF3187C3F8FAA:FG=1; BIDUPSID=D5FD8C3E75018B4330AEF3187C3F8FAA; PSTM=1534508405; BD_UPN=12314353; delPer=0; BD_HOME=0; H_PS_PSSID=1427_21124_26350_27113

    请求报文是由请求行+请求头+空行+请求体构成的。上面的请求报文源代码第一行是请求行。第二行开始的全部都是请求头。那空行和请求体去哪了呢?

    是这样的。因为我们打开的是百度的首页,没有在百度首页输入任何的内容。我们是获取网页。所以是GET请求方式。

    但是当我们输入文字进行搜索时,用POST请求方式时,就会有空行和请求体出现了

    进行搜索时,如果用POST方式发送请求报文时,你输入的关键字会出现在请求体里面。

    但是,搜索时,如果用GET方式发送请求报文是,请求报文不会有请求体,你输入的关键字会出现在请求行里面。

    详细区别:
    1:get重点在从服务器上获取资源,post重点在向服务器发送数据,get请求是默认的请求方式
    2:get传输数据(参数)是附在URL后,并用"?"连接,多个请求数据间用"&"连接,如http://127.0.0.1/Test/login.action?name=admin&password=admin,这个过程用户是可见的;post传输数据通过Http的post机制,将字段与对应值封存在请求实体中发送给服务器,这个过程对用户是不可见的;
    3:Get传输的数据量小,因为受URL长度限制;Post可以传输大量数据,所以上传文件时只能用Post方式;
    4:get是不安全的,因为URL是可见的,可能会泄露私密信息,如密码等,post较get安全性较高;

    -------------------------------------------------------------------------------------------------rest---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    说完了请求报文,说说响应报文。

    服务器收到客户端的请求报文后,会进行响应,给客户端发送响应报文。

    响应报文的格式和请求报文格式基本一样。看下我们给百度发送请求报文后,百度返回的响应报文。

    HTTP/1.1 200 OK  # 响应行 组成:协议版本,响应状态码,状态的描述
    Bdpagetype: 1
    Bdqid: 0xb45eb2f90000be96
    Cache-Control: private
    Connection: Keep-Alive
    Content-Encoding: gzip
    Content-Type: text/html;charset=UTF-8 # 响应体的类型,响应体的编码方式
    Cxy_all: baidu+764cd4d04ac5395e4a4d73576a927dd7
    Date: Thu, 30 Aug 2018 08:41:37 GMT  # 响应的时间
    Expires: Thu, 30 Aug 2018 08:40:41 GMT
    Server: BWS/1.1  # 服务器名称
    Set-Cookie: delPer=0; expires=Sat, 22-Aug-2048 08:40:41 GMT
    Set-Cookie: BDSVRTM=0; path=/
    Set-Cookie: BD_HOME=0; path=/
    Set-Cookie: H_PS_PSSID=; path=/; domain=.baidu.com
    Strict-Transport-Security: max-age=172800
    Vary: Accept-Encoding
    X-Ua-Compatible: IE=Edge,chrome=1
    Transfer-Encoding: chunked

    响应报文的数据很多,我们必须知道几点即可。

    1.响应行的组成

    2.响应头注释的部分

    3.响应体是网页的源代码,(即用户看到的内容)

    4.常见的状态码:

    2xx  成功        比如200 OK ,206:请求部分数据成功
    3xx  重定向      比如307 Redirect
    4xx  客户端错误   比如404 Not Found
    5xx  服务端错误   比如500 Internal Server Error

    5.响应报文的格式:


    总结一下用户访问网站的过程:

    1.用户输入网址.
    2.浏览器请求DNS服务器, 获取域名对应的IP地址.
    3.请求连接该IP地址服务器.(tcp)
    4.发送资源请求. (HTTP协议 请求报文格式,tcp.send())
    5.web服务器接收到请求, 并解析请求, 判断用户意图.
    6.获取用户想要的资源.(a.html)
    7.将资源返回给http服务器程序.
     8.http服务器程序将资源数据通过网络发送给浏览器.
     9.浏览器解析呈现请求的数据.

  • 相关阅读:
    初识WEB:输入URL之后的故事
    ecshop ecmall shopex
    .net 4.5如何使用Async和Await进行异步编程
    C#中yield用法
    安装Ecshop首页出现报错:Only variables should be passed by referen
    Ecshop安装过程中的的问题:cls_image::gd_version()和不支持JPEG
    javascript 操作dom
    使用X-UA-Compatible来设置IE浏览器兼容模式
    createDocumentFragment
    ckfinder在IE10,IE9中的弹出框不能选择,或者不能上传解决方法
  • 原文地址:https://www.cnblogs.com/chichung/p/9560994.html
Copyright © 2011-2022 走看看