zoukankan      html  css  js  c++  java
  • BS通信

    解析HTTP协议

    基本的Web应用程序的组成部分:

    • web服务器:接收客户端请求,然后向客户端返回一些结果
    • web客户端浏览器:允许用户请求服务器上的某个资源,并且向用户显示请求的结果
    • HTTP协议:web客户端和服务器之间通信所用的协议
    • 静态HTML文件:用于告诉浏览器怎样想用户显示内容

    HTTP协议是一种超文本传输协议(HyperText Transfer Protocol),是一套计算机在网络中通信的规则。

    浏览Web时,浏览器通过HTTP协议与WEB服务器交换信息,Web服务器向web浏览器返回的文件都有与之相关的类型,这些信息类型的格式有MIME(Multipurpose Internet Mail Extensions)定义

    MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开

    发送请求信息

    一旦建立了TCP连接,Web浏览器就会想Web服务器发送请求命令。HTTP协议将来自客户端的请求信息封装成HTTP请求,它包括请求行、请求头、消息体、以及分隔请求头和消息体的一个空行

    1) 请求行

    请求行是一个ACALL文本行,由三个标记组成:请求的HTTP方法、请求的URLHTTP版本,中间用空格分开。例如:GET /lovobook/index.html HTTP/1.0

    在HTTP版本1.1中定义了有八种可能的HTTP请求方法

    • GET:用于向服务器检索资源
    • POST:用于向服务器发送数据,并要求指定的URI处理
    • HEAD:与GET方法相同,服务器值返回状态行和头标,并不返回请求文档
    • PUT:请求服务器保存请求数据作为指定URI新内容
    • DELETE:请求服务器删除URI中命名的资源
    • OPTIONS:请求关于服务器支持的请求方法信息
    • TRACE:请求Web服务器反馈HTTP请求和其头标
    • CONNECT:已文档化当当前未实现的一个方法,预留做隧道处理

    在这些方法中我们最常用的是GET和POST方法,其它几种方法对于Web开发者来说不是很有用。GET方法用于向服务器检索信息,它可以以查询字符串的形式提供有限长度的数据。但是,GET方法却不能发送大量的信息。很多WEB服务器会限制完整URL的长度为255个字符,超过这个长度的信息通常被忽略了。因此,GET方法适合发送我们不介意在URL中可见的少量信息。此外,GET方法只能用在一个Web应用程序中执行查询,而不能用于执行更新。

    以下方式的HTTP请求为GET方法

    • 在浏览器地址栏输入URL
    • 在当前网页点击HTML链接
    • HTML表单中设置表单的method=’get’,并提交表单:
    • HTML表单中没有设置表单的method属性,提交表单(不设置method属性,默认为get方法)

    POST方法用于向服务器发送数据,并要求制定的URI处理。与GET方法类似,POST方法也可以有查询字符串,但是POST方法用完全不同的机制传递信息。POST方法可以将无限制数量的数据作为HTTP请求的一部分,通过套接字连接发送。数据不会作为URL的一部分出现,而且只发送一次。因此,POST方法通常被用于发送敏感信息或者上传文件。如果一个应用程序需要修改数据或添加数据,并且通过HTTP发送请求,那么就应该使用POS

    2)请求头

    HTTP协议使用HTTP头来传递请求的元信息。HTTP头是一个用冒号分隔的名称/值对,冒号前面是HTTP头的名称,后面是HTTP头的值。常见的请求头有用户代理资料、可以接受的格式、语言以及内容编码,这些信息用于告诉服务器客户端是什么,客户端想要得到什么格式的回馈信息等

    3)空行

    发送回车符合退行,通知服务器不在有请求头

    4)消息体

    HTTP请求中带有查询字符串时,如果是GET方法,查询字符串或表单数据附在请求行中,那么消息体中就没有内容;如果是POST方法,查询字符串或表单数据就添加在消息体中

    回应响应消息

    Web服务器解析请求,定位并读取指定的资源,将文件以及其他信息组成HTTP响应返回到客户端。HTTP响应包括:状态行、响应头、消息体以及分隔消息头个响应头的一个空行。

    1) 状态行

    每个HTTP响应以一个状态行开头。状态行由HTTP协议版本,响应状态码和响应描述组成,三者之间用空格隔开

    响应状态码是一个三位的数字,它分为如下几个组:

    • 1xx:信息,请求收到,继续处理。
    • 2xx:成功,行为被成功地接受、理解和采纳。
    • 3xx:重定向,为了完成请求,必须进一步执行的动作
    • 4xx:客户端错误,请求包含的语法错误或者请求无法实现
    • 5xx:服务器错误,服务器不能实现一种明显无效的请求

    每一个响应状态码都有相关联的字符串响应描述。我们经常看到的响应状态码是200,它 表明成功执行,我们得到了一个有效的响应。

    2)响应头

    响应头与请求头一样,也是一个用冒号分开的名称/值对,冒号前面是HTTP头的名称,后面是HTTP头的值。典型的响应头包括内容类型描述,内容长度,时间邮戳,服务器信息,内容最后一次响应时间。这些新兴县帮助客户端得到发送过来的的内容是什么,内容的大小、数据是否比前一次响应更新。

    在响应头中,最重要的HTTP头是Content-type,它指定MIME类型。MIME类型告诉浏览器要接收的数据是什么类型,这样浏览器才知道如何显示这些数据。这个值通常与HTTP请求头中的Accpt相关

    3)空白行

    最后一个响应头之后是一个空行,发送回车符合退行,表明以下不再有响应头

    4)消息体

    要发送会客户端的HTML文档或其他要显示的内容等。Web服务器把要发送给客户端的文档信息放在消息体中

  • 相关阅读:
    Linux内核网络协议栈优化总纲
    Java实现 蓝桥杯VIP 算法训练 连续正整数的和
    Java实现 蓝桥杯VIP 算法训练 连续正整数的和
    Java实现 蓝桥杯VIP 算法训练 寂寞的数
    Java实现 蓝桥杯VIP 算法训练 寂寞的数
    Java实现 蓝桥杯VIP 算法训练 学做菜
    Java实现 蓝桥杯VIP 算法训练 学做菜
    Java实现 蓝桥杯VIP 算法训练 判断字符位置
    Java实现 蓝桥杯VIP 算法训练 判断字符位置
    Java实现 蓝桥杯VIP 算法训练 链表数据求和操作
  • 原文地址:https://www.cnblogs.com/Mrxiaolong/p/5548040.html
Copyright © 2011-2022 走看看