热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HTTP协议(三)HTTP请求

HTTP协议的请求和响应都有一定的规则,这篇网站当中首先着重介绍一下HTTP协议的请求协议的内容。HTTP协议的请求主要由一下几部分组成:请求行

  HTTP协议的请求和响应都有一定的规则,这篇网站当中首先着重介绍一下HTTP协议的请求协议的内容。

  HTTP协议的请求主要由一下几部分组成:请求行,请求头,请求体(post)

 

    请求行\r\n
    请求头1\r\n
    请求头1\r\n
    ...
    \r\n
    请求体(Post方式)\r\n

  我们分别按块来说明一下消息请求的格式。

<-----------------------------------------------华丽的分割线------------------------------------------------------------>

 

  首先来说一下请求行&#xff0c;请求行主要由三部分组成&#xff0c;请求方法&#xff0c;请求路径&#xff0c;请求协议

  请求方法&#xff1a;HTTP规范定义了8种可能的请求方法&#xff1a;

GET 检索URI中标识资源的一个简单请求
HEAD 与GET方法相同&#xff0c;服务器只返回状态行和头标&#xff0c;并不返回请求文档
POST 服务器接受被写入客户端输出流中的数据的请求
PUT 服务器保存请求数据作为指定URI新内容的请求
DELETE 服务器删除URI中命名的资源的请求
OPTIONS 关于服务器支持的请求方法信息的请求
TRACE Web服务器反馈Http请求和其头标的请求
CONNECT 已文档化但当前未实现的一个方法&#xff0c;预留做隧道处理

当然我们最常用的也就是get和post方法&#xff0c;get方法的请求方式比较简单&#xff0c;所有请求的参数都显示追加在请求的url后面&#xff0c;而且请求长度有限制&#xff0c;post方式的请求参数都追加在请求体当中&#xff0c;消息长度没有限制而且以隐式的方式进行发送&#xff0c;安全性相对较高&#xff08;这个安全性对于现在的网络技术也没有什么可安全的了&#xff0c;^_^&#xff09;。

 

  请求路径&#xff1a;请求路径可以是相对或者绝对的方式&#xff0c;绝对路径不去阐述&#xff0c;相对路径是相对于当前TCP连接的主机的路径&#xff08;HTTP/1.0方式&#xff09;&#xff0c;在HTTP/1.1方式当中相对于的是请求头当中的host域&#xff0c;HTTP/1.1的新特性会在以后的方式当中进行阐述

  请求协议&#xff1a;目前常用的支持HTTP/1.0和HTTP/1.1方式&#xff0c;HTTP/1.1和HTTP/1.0之间存在不少差异性&#xff0c;后面的博客当中会专门去讨论两者之间的异同&#xff0c;以及性能差异。

 

<-----------------------------------------------又是一道华丽的分割线------------------------------------------------------------>

 

  请求头都是以key:value形式进行保存的&#xff0c;里面记录了客户端的一些基本信息&#xff0c;常用的请求头如下所示

 

Accept&#xff1a;浏览器可接受的MIME类型。
Accept-Charset&#xff1a;浏览器可接受的字符集。
Accept-Encoding&#xff1a;浏览器能够进行解码的数据编码方式&#xff0c;比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间。
Accept-Language&#xff1a;浏览器所希望的语言种类&#xff0c;当服务器能够提供一种以上的语言版本时要用到。
Authorization&#xff1a;授权信息&#xff0c;通常出现在对服务器发送的WWW-Authenticate头的应答中。
Connection&#xff1a;表示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”&#xff0c;
或者看到请求使用的是HTTP 1.1&#xff08;HTTP 1.1默认进行持久连接&#xff09;&#xff0c;它就可以利用持久连接的优点&#xff0c;
当页面包含多个元素时&#xff08;例如Applet&#xff0c;图片&#xff09;&#xff0c;显著地减少下载所需要的时间。要实现这一点&#xff0c;
Servlet需要在应答中发送一个Content-Length头&#xff0c;最简单的实现方法是&#xff1a;先把内容写入
ByteArrayOutputStream&#xff0c;然后在正式写出内容之前计算它的大小。
Content-Length&#xff1a;表示请求消息正文的长度。
COOKIE&#xff1a;这是最重要的请求头信息之一&#xff0c;参见后面《COOKIE处理》一章中的讨论。
From&#xff1a;请求发送者的email地址&#xff0c;由一些特殊的Web客户程序使用&#xff0c;浏览器不会用到它。
Host&#xff1a;初始URL中的主机和端口。
If-Modified-Since&#xff1a;只有当所请求的内容在指定的日期之后又经过修改才返回它&#xff0c;
否则返回304“Not Modified”应答。
Pragma&#xff1a;指定“no-cache”值表示服务器必须返回一个刷新后的文档&#xff0c;即使它是代理服务器而且已经有了页面的
本地拷贝。
Referer&#xff1a;包含一个URL&#xff0c;用户从该URL代表的页面出发访问当前请求的页面。
User-Agent&#xff1a;浏览器类型&#xff0c;如果Servlet返回的内容与浏览器类型有关则该值非常有用。
UA-Pixels&#xff0c;UA-Color&#xff0c;UA-OS&#xff0c;UA-CPU&#xff1a;由某些版本的IE浏览器所发送的非标准的请求头&#xff0c;表示屏幕大小、颜色深度、操作系统和CPU类型。

如果想了解更详细的请求头信息可以去w3c的官网去查阅

 

 

<-----------------------------------------------又见分割线-----------------------------------------------------------

 

  请求体&#xff08;又叫请求正文&#xff09;是post请求方式当中的请求参数&#xff0c;以key&#61;value形式进行存储&#xff0c;多个请求参数之间用&连接&#xff0c;如果请求当中有请求提&#xff0c;那么在请求头当中的Content-Length属性中记录的是该请求体的长度。

  下面来看一个还算完整的请求消息吧&#xff0c;这样可能会稍微直观一点

 

POST hysj.jsp HTTP/1.1
Host: search.cnipr.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; zh-CN; rv:1.9.1.13) Gecko/20100914 Firefox/3.5.13 ( .NET CLR 3.5.30729)
Accept: text/html,application/xhtml&#43;xml,application/xml;q&#61;0.9,*/*;q&#61;0.8
Accept-Language: zh-cn,zh;q&#61;0.5
Accept-Encoding: gzip,deflate
Accept-Charset: GB2312,utf-8;q&#61;0.7,*;q&#61;0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://search.cnipr.com/cnipr/zljs/hyjs-biaodan-y.jsp
Content-Length: 405

username&#61;guest&extension&#61;&issearch&#61;on&searchword&#61;pd%3D%2820100901%29&presearchword&#61;&sortfield&#61;RELEVANCE&sRecordNumber&#61;&searchType&#61;0&searchFrom&#61;0&channelid&#61;14%2C15%2C16&searchChannel&#61;14%2C15%2C16&strdb&#61;14&strdb&#61;15&strdb&#61;16&cizi&#61;2&sortcolumn&#61;RELEVANCE&R1&#61;-&txtA&#61;&txtB&#61;&txtC&#61;&txtD&#61;20100901&txtE&#61;&txtF&#61;&txtG&#61;&txtH&#61;&txtI&#61;&txtJ&#61;&txtK&#61;&txtL&#61;&txtM&#61;&txtN&#61;&txtP&#61;&txtQ&#61;&txtR&#61;&txtSearchWord&#61;&Submit&#61;%BC%EC%A1%A1%CB%F7

 

 

 

转:https://www.cnblogs.com/foolfish/archive/2010/10/18/1854485.html



推荐阅读
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施
    本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • SpringMVC工作流程概述
    SpringMVC工作流程概述 ... [详细]
  • 开发中,EXT封装的.NET控件,使用了ExtJsExtenderControl的开源控件,发现个问题,就是每次控件加载,都需要调EXT_ALL.JS文件,600K,导致页面加载很慢。想对这个问题进行 ... [详细]
author-avatar
然后突然4_944
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有