关于http:同源策略Sameorigin-policy是什么

一、同源策略是什么?一个 URL 有三局部组成:协定、域名(指向主机)、端口,只有这三个完全相同的 URL 能力称之为同源。如下,能和 http://www.example.com/dir/index.html 同源的是? URL后果起因http://www.example.com/dir2/other.html同源只有门路不同https://www.example.com/secure.html不同源协定不同http://www.example.com:81/dir/etc.html不同源端口不同 ( http:// 默认端口是80)http://news.example.com/dir/other.html不同源域名不同二、父域名与子域名能够通过设置 document.domain,让子域名和父域名通过同源策略的检测。 // 1、子域名上面的页面http://store.company.com/dir/other.html // 2、脚本代码中批改document.domain = "company.com";// 3、再去拜访父域名上面的页面,能够不被跨域拦挡fetch("http://company.com/dir/page.html")备注:然而如果端口不是默认80,也会失败,因为 document.domain = "company.com"; 会把端口设置为 null 三、跨域拜访跨域拜访的解决方案是 CORS,详情,看这里! 四、window.postMessage(不举荐)跨域拜访也能够通过 window.postMessage 来实现,不过不太举荐,很容易造成平安问题。window.postMessage - 具体用法说明! 五、参考文档同源策略(Same-origin policy)是什么?

November 24, 2021 · 1 min · jiezi

关于http:一个HTTPS转HTTP的Bug他们竟然忍了2年原谅我无法接受加班改了

明天这篇文章给大家讲一个追究Bug的故事和过程。集体始终认为:事出反常必有妖,程序中的Bug也是如此。 心愿通过这个Bug的排查故事,大家不仅可能学到一系列的知识点,同时也能学会如何解决问题,如何更加业余的做事。而解决问题的形式及思维比单纯的技术更加重要。 Let's go! 故事的起因刚接手新团队新我的项目没多久,在公布一个零碎时,共事友善的揭示:公布xx零碎时,在测试环境要正文掉一行代码,上线公布时再放开正文。 听此友善揭示,一惊:这又是什么黑科技啊?!在我的教训里,还没有什么零碎须要这样解决,暗下决心要排查此问题。 终于抽出工夫,周五折腾了多半天,没解决掉,周末还心里惦记着,于是加班也搞定这个问题。 Bug的存在及操作我的项目是基于JSP的,没有做前后端拆散。在JSP页面中引入了一个公共的head.jsp,该文件内有这样一行代码和正文: <!-- 解决线上HTTPS浏览器转圈的问题,测试环境要正文掉上面的一句话 --><meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests" />共事友善揭示的就是正文上的操作,测试环境正文掉(不然无法访问),生产环境须要放开,不然也无法访问(转圈圈啊)。据正文阐明,大略晓得是用来解决HTTPS相干的问题。 那么,是什么起因导致了要这样操作?有没有更简略的操作?大家只是在这么做,没人寻找问题的本源,也没人能出答案,只能本人去寻找了。 HTTPS中的HTTP申请先来看看配置META元素是干什么用的。 其中http-equiv指定的“Content-Security-Policy”就"网页平安政策",缩写CSP,罕用来避免XSS攻打。 通常的应用办法就是在HTML中通过meta标签来进行定义: <meta http-equiv="content-security-policy" content="策略"><meta http-equiv="content-security-policy-report-only" content="策略">其中,在content中能够指定波及平安的各类限度策略。 我的项目中应用的upgrade-insecure-requests便是限度策略之一,作用是:主动将网页上所有加载内部资源的HTTP链接换成HTTPS协定。 此刻略微明确了一点,原来最后写这行代码是想将HTTP申请强制转换成HTTPS申请啊。 但失常状况来说,只有在Nginx或SLB中配置了HTTP转HTTPS便不会呈现这类问题,而零碎中是有对应的配置的。 于是,在线上另起一个服务试验了一下,正文掉这段代码,局部性能还真的在转圈圈,诚不欺我! 为什么HTTPS中不容许HTTP申请查看浏览器中的申请,发现转圈圈原来是如下谬误引起的: Mixed Content: The page at 'https://example.com' was loaded over HTTPS, but requested an insecure stylesheet 'http://example.com/xxx'. This request has been blocked; the content must be served over HTTPS.其中,Mixed Content即混合内容。所谓的混合内容通常呈现在以下状况:初始的HTML的内容是通过HTTPS加载的,但其余资源(比方,css款式、js、图片等)则通过不平安的HTTP申请加载。此时,同一个页面,同时应用了HTTP和HTTPS的内容,而HTTP协定会升高整个页面的安全性。 因而,古代浏览器会针对HTTPS中的HTTP申请进行正告,阻断申请,并抛出上述异样信息。 当初,问题的起因根本明确了:HTTPS申请中呈现了HTTP申请。 那么,解决方案有几种: 计划一:在HTML中增加meta标签,强制将HTTP申请转换成HTTPS申请。这也是下面的应用形式,但这种形式的弊病也很显著,在没有应用HTTPS的测试环境,须要手动的正文掉。否则,也无奈失常拜访。计划二:通过Nginx或SLB的配置,将HTTP申请转换成HTTPS申请。计划三:最笨的办法,找到我的项目中存在HTTP申请的问题,一一修复。初步革新,略显功效目前应用的第一种计划很显然不符合要求,而第二种计划曾经配置了,但局部页面仍旧不起效。那么,还有其余计划吗? 通过大量排查,发现导致不起效的起因是:我的项目中大量应用了redirect形式的跳转。 @RequestMapping(value = "delete")public String delete(RedirectAttributes redirectAttributes) { //.. do something addMessage(redirectAttributes, "删除xxx胜利"); return "redirect:" + Global.getAdminPath() + "/list";}redirect形式的跳转在HTTPS的环境下会重定向到HTTP协定,导致无法访问。 ...

November 24, 2021 · 2 min · jiezi

关于http:HDC技术分论坛HarmonyOS新一代UI框架的全面解读

作者:yuzhiqiang,UI编程框架首席技术专家 在Harmony 3.0.0开发者预览版中,蕴含了新一代的申明式UI框架ArkUI 3.0、多语言跨平台编译器ArkCompiler 3.0、跨端开发工具DevEco Studio3.0,以及基于TS/JS语言的API 7,全面晋升开发者体验。 本期,咱们要为大家重点介绍HarmonyOS新一代申明式UI框架ArkUI 3.0。 一、UI编程框架在介绍ArkUI 3.0之前,咱们先来简要理解一下什么是UI编程框架。 UI编程框架,是为利用开发者提供的开发UI的基础设施,次要包含UI控件(按钮/列表等),视图布局(摆放/排列相应的UI控件),动画机制(动画设计以及成果出现),交互事件处理(点击/滑动等),以及相应的编程语言和编程模型等。从零碎运行的维度来看,UI编程框架也包含一个运行时,负责利用在零碎中执行时所需的资源加载、UI渲染和事件响应等。 总体而言,UI编程框架提供了开发以及运行UI界面所须要的框架能力,次要架构如下图所示: 1.jpg 图1 UI编程框架 开发模型:对开发者提供开发范式、UI控件/布局/动效/交互、编程语言等。它体现的是开发效率与难易水平。运行框架:UI界面渲染及交互的根底能力框架,包含相应的布局引擎、控件机制、动效引擎、事件机制、渲染管线等,并联合语言虚拟机和图形引擎,将开发者的程序运行在具体零碎平台上。它体现的是利用运行的性能体验。平台适配:承载框架的具体操作系统或平台适配层。UI编程框架的要害需要,次要有以下两类: 开发效率:包含代码量、学习曲线、工具、社区、三方库齐备度等。性能体验:包含启动速度、帧率、响应时延、酷炫成果、资源占用等。另外,随着智能设施的急剧增长,UI编程框架还须要思考如何更好地适配不同设施的差异性,包含设施状态差别(比方屏幕形态、尺寸、分辨率、交互模式等),以及设施能力差异(比方内存、CPU、GPU等)。 二、ArkUI框架的演进为了更好地满足开发效率和性能体验等相干的需要, ArkUI 3.0综合思考了UI渲染以及语言和运行时,围绕着极简开发、高性能、跨设施跨平台进一步演进。下图形容了ArkUI整体架构的演进: 2.jpg 图2 ArkUI框架演进 图的左侧是2020年公布的JS UI框架的架构示意图。它次要反对类Web的前端开发范式,通过DSL(domain-specific language,畛域特定语言)转换层,跨语言对接到申明式UI后端引擎,并联合JS引擎实现整体UI渲染。图的右侧是新的ArkUI 3.0框架,次要有以下几个要害的变动: (1)引入了新一代的申明式UI开发范式,实现极简的UI形容语法。 (2)设计了对立的前后端扁平化渲染机制,进一步晋升UI渲染的性能并升高内存耗费。 (3)深度联合ArkCompiler 3.0的方舟编译器和方舟运行时,晋升语言的执行性能和跨语言通信能力。 (4)在工具方面,针对新一代的申明式UI开发范式构建了新的编译工具链和预览引擎,提供了所见即所得的实时预览机制。 另外,在ArkUI 3.0框架中,类Web范式会持续保留,即类Web范式和新一代的申明式UI范式都能够反对,能够各自独立应用,但不能混用。 三、ArkUI 3.0的要害个性接下来咱们开展具体介绍一下ArkUI 3.0的要害个性。 新一代的申明式UI开发范式具体而言,ArkUI 3.0中的新一代申明式UI开发范式,次要特色如下: (1)基于TypeScript扩大的申明式UI形容语法,提供了类自然语言的UI形容和组合。 (2)开箱即用的多态组件。多态是指UI形容是对立的,UI出现在不同类型设施上会有所不同。比方Button组件在手机和手表会有不同的款式和交互方式。 (3)多维度的状态管理机制,反对灵便的数据驱动的UI变更。 上面咱们以一个具体的示例来阐明新一代申明式UI开发范式的根本组成。如图3所示的代码示例,UI界面会显示一个“Hello World”的文本和一个“Click me”按钮。当用户点击“Click me”按钮时,字符串变量myText的值会从“World”变为“ACE”,文本最终显示为“Hello ACE”。 3.jpg 图3 申明式UI开发范式的基本概念 以上示例中所蕴含的申明式UI开发范式的根本组成阐明如下: 装璜器:用来装璜类、构造体、办法以及变量,赋予其非凡的含意,如上述示例中@Entry、@Component、@State都是装璜器。@Component示意这是个自定义组件;@Entry则示意这是个入口组件;@State示意组件中的状态变量,这个状态变动会引起UI变更。自定义组件:可复用的UI单元,可组合其它组件,如上述被@Component装璜的struct Hello。UI形容:申明式的形式来形容UI的构造,如上述build()办法外部的代码块。内置组件:框架中默认内置的根底和布局组件,可间接被开发者调用,比方示例中的Column、Text、Divider、Button。事件办法:用于增加组件对事件的响应逻辑,对立通过事件办法进行设置,如追随在Button前面的onClick()。属性办法:用于组件属性的配置,对立通过属性办法进行设置,如fontSize()、width()、height()、color()等,可通过链式调用的形式设置多项属性。上述示例中,用@State装璜过的变量myText,蕴含了一个根底的状态管理机制,即myText的值的变动,会引起相应的UI变更(Text组件)。ArkUI 3.0还提供多维度的状态管理机制。和UI相关联的数据,不仅仅在组件内应用,还能够在不同组件层级间传递,比方父子组件之间,爷孙组件之间,也能够是全局范畴内的传递,还能够是跨设施传递。另外,从数据的传递模式来看,能够分为只读的单向传递和可变更的双向传递。开发者能够灵便的利用这些能力来实现数据和UI的联动。 ArkUI采纳嵌入式畛域特定语言(embedded Domain Specific Language, eDSL)的模式,联合宿主语言能力实现UI开发。通过eDSL,联合语法糖或者语言原生的元编程能力,设计了对立的UI开发范式,并可能联合不同语言来实现利用的逻辑解决局部。 要害渲染性能上面通过一个简略的示例代码,为大家讲述从代码到UI显示的整体渲染流程。如图4所示,此示例会在UI界面显示一个“Click me”按钮,按钮上面同步显示按钮的点击次数。当用户点击按钮时,上面的点击次数会相应减少。 4.jpg 图4 整体渲染流程 整个渲染过程分为两个阶段: (1)初始显示流程(步骤①~⑤) ① 源代码通过相应的工具链,编译为带有类型标记的指标文件,同时也蕴含了如何创立UI构造信息的指令流。 ...

November 22, 2021 · 1 min · jiezi

关于http:CMSC-216

CMSC 216 Exercise #6 Spring 2019Threads Deadline: Wed, May 8 (lab time)1 OverviewIn this exercise you will use threads to write a program that computes the maximum and the sum of datapresent in an array. For this assignment: There are no public, release nor secret tests. There is no project distribution (usual folder we post). You need to work with classmates (in groups of 3 students). You need to show your work to your teaching TA on Wednesday’s lab (May 8). Notice that all membersof your team will receive the same score. If you don’t show your work to a TA you will not get any credit. Only one member of your group needsto do the demo (not all of you need to be present). Even if some of your members belong to anothersection, only one person needs to present. You may use any code we have posted for our lectures/labs. To submit upload a zip file with your code to the submit server using the appropriate entry. Only onemember of your group needs to submit. If you have questions about this assignment, please post them in Piazza. This will simplify the processof keeping the class informed about updates. It is your responsibility to check Piazza often regardingany possible updates and clarifications. There is only one deadline (no late submission).2 Specifications You need to write a program that will create an array with random integer values. Then one of twopossible processings will be applied to this array:– Max - You need to compute the maximum value in the array. Notice that for a number of threadsgreater than one, you need to assign to each thread an array segment. Just divide the array in equallength segments (when possible) based on the number of threads. For example, for an array of 1001elements and 2 threads, the first thread can process the first half (500) and the second thread therest (501).– Sum - You need to correctly compute the sum of elements in the array based on the followingformula: sum = (sum + a[i]) % 1000000, where a[i] represents an array element. The program relies on command line arguments to provide the following information:– Number of elements– Number of threads– Seed (for random number generator)– Task (1 for max, 2 for sum)– Print Results (Y or N) Feel free to provide any additional parameters you understand you need.1 After completing a task (maximum or sum) the program will display the results (maximum value orsum) if requested by the user. After completing a task, the program will display the wall clock time, the user time and the system/kerneltime that it took to compute the maximum or the sum. Notice that this time information does not includethe time to generate the random array. You need to have threads that run concurrently. For example, starting a thread and executing a join onit and repeating the process for each thread is not valid (you are executing threads sequentially.) The time information should follow the results. Report - Run experiments where you explore the impact of threads while computing the maximumvalue and the sum. Create a table where you increase the number of threads and the data sets. Yourgoal is to see whether using additional threads improves performance. Provide a short (one paragraph)explanation of your results. The information in this report is what you will be discussing with your TAin lab. You can create this report in a text file (report.txt). Remember that you may not use code from the internet. The current limits in grace will not allow you to create a large number of threads. You can change thoselimits (assuming you are using tcsh) by executing ”limit maxproc” followed by a number (e.g., limitmaxproc 400). Make sure you check the values returned by Pthreads functions; this will allow you to identify whetheryour code is failing. An example of using the srand() and rand() functions can be found in the lecture example (dyn realloc.c)discussed while covering dynamic memory allocation.3 Grading CriteriaYour project grade will be determined by the following:Maximum using multiple threads 40 ptsSum using multiple threads 30 ptsCorrect sum computation 10 ptsReport 10 ptsCode Style 10 pts3.1 Style gradingFollow the C style guidelines available at:http://www.cs.umd.edu/~nelson...4 Submission Create a file named authors.txt with the names and directory ids (e.g., terp1, NOT your student number)of the members in your group. Create a folder with the .c code, the report and the authors.txt file. Zip that folder and upload it to thesubmit server. Only one member of your team needs to upload the submission. To submit your exerciseuse the submit server web interface (you will not be able to submit using the submit command in grace).25 Academic IntegrityPlease see the syllabus for project rules and academic integrity information. All programming assignments inthis course are to be written individually (unless explicitly indicated otherwise in a written project handout).Cooperation between students is a violation of the Code of Academic Integrity. ...

October 26, 2021 · 4 min · jiezi

关于http:COMP90086信息系统

School of Computing and Information SystemsCOMP90086 Computer Vision, 2021 Semester 2Final Project: Fine-grained localisationProject type: Group (teams of 2)Due: 7pm, 22 Oct 2021Submission: Source code and written report (as .pdf)Marks: The assignment will be marked out of 30 points, and will contribute 30% of yourtotal mark.Geolocation is the problem of localising a person or device in the world using sensor data. Dependingon the device, the environment, and the level of accuracy required, geolocation may rely on GPScoordinates, network routing addresses, or image data. Geolocation is an important problem in manyAI and computing applications, from autonomous vehicle navigation to search engine queries basedon the user’s current location (e.g., “restaurants near me”).In this project, you will investigate the problem of fine-grained geolocation in a small indoor/outdoorenvironment (an art museum). Image information is particularly important for this type of problem,because other sources of information, like GPS, may not be accurate enough to provide fine-grainedposition data and may not be able to distinguish between different floors in indoor environments.Your task is to develop a method to recognize the location from which an image was taken. Youwill be provided a dataset of images with position data to train your method. How you approach theproblem is up to you. The following are some possible approaches:? Match each image in the test set to the most similar image in the training set, using any visualfeatures you wish to measure “similarity,” and assume the test image has the same position dataas its closest match. (Note that there is no guarantee that the test images will come from exactlythe same locations as the images in training set, but since they come from the same museumenvironment they are likely to be from nearby locations.) Identify key features, objects, or text in the test images and use these to locate training imageswhich show the same features, objects, or text. Match each image in the test set to multiple near neighbours in the training set, and develop amethod to compute the test image’s most likely location based on multiple nearby views. Use matching features and geometric constraints to compute the likely change in pose betweentraining and test views. Or any combination of the above.Note that these are only suggestions to help you get started; you are free to use your own ideas.Whatever methods you choose, you are expected to evaluate these methods using the provided data,to critically analyse the results, and to justify your design choices in your final report. Your evaluationshould include error analysis, where you attempt to understand where your method works well andwhere it fails.You are encouraged to use existing computer vision libraries your implementation. You may also useexisting models or pretrained features as part of your implementation. However, your method shouldbe your own; you may not simply submit an existing model for this problem.DatasetFigure 1: Example training imagesThe dataset is a collection of images taken in and around an art museum (the Getty Center in LosAngeles, U.S.A.). Example images are shown in Figure 1. The dataset is split into 7500 trainingimages and 1200 test images. Each image in the training set is annotated with positional data, whichis an (x,y) value derived from a mapping algorithm. You can assume that the (x,y) values accuratelyreflect position in the real world, although the units of these values are unknown. The training datasetincludes multiple views from each of several locations around the museum. Different views from thesame location are denoted with a suffix (e.g., “ 1”, “ 2”, etc.).The images are rendered from Google Streetview images, simulating a camera with a 73.7 deg hor-izontal x 53.1 deg vertical field of view. The optical centre of the camera is in the centre of theimage and the lens has no radial distortion. However, because the images are simulated from GoogleStreetview imagery, they may contain artefacts or distortion from the Streetview panorama stitchingprocess. Faces in the images have been blurred for privacy. Please note that because the images werecollected in a real-world public environment, it is possible that they may contain inappropriate oroffensive content.Scoring PredictionsYou should submit your predictions for the test images on Kaggle. Your submissions for Kaggleshould follow the same format as the train.csv annotation file, with three columns: id,x,y. idshould be a string corresponding to a test image name, and x and y should be the predicted positionof that image.The evaluation metric for this competition is the mean absolute error in x and y computed on thetest set. This can also be thought of as the Manhattan distance between the true and predicted (x,y)coordinates, averaged over all N test images:(Although Euclidean distance would probably make more sense for this task, Kaggle does not havean evaluation metric which computes Euclidean distance.)KaggleTo join the competition on Kaggle and submit your results, you will need to register at https://www.kaggle.com/.Please use the “Register with Google” option and use your @student.unimelb.edu.au email addressto make an account. Please use only your group member student IDs as your team name (e.g.,“1234&5678”). Submissions from teams which do not correspond to valid student IDs will be treatedas fake submissions and ignored.Once you have registered for Kaggle, you will be able to join the COMP90086 Final Project compe-tition using the link under Final Project: Code in the Assignments tab on the Canvas LMS. Afterfollowing that link, you will need to click the “Join Competition” button and agree to the competitionrules.Group FormationYou should complete this project in a group of 2. You are required to register your group membershipon Canvas by completing the “Project Group Registration” survey under “Quizzes.” You may modifyyour group membership at any time up until the survey due date, but after the survey closes we willconsider the group membership final.SubmissionSubmission will be made via the Canvas LMS. Please submit your code and written report separatelyunder the Final Project: Code and the Final Project: Report links on Canvas.Your code submission should include your model code, your test predictions (in Kaggle format), areadme file that explains how to run your code, and any additional files we would need to recreateyour results. You should not include the provided train/test images in your code submission, but yourreadme file should explain where your code expects to find these images.Your written report should be a .pdf that includes the description, analysis, and comparative assess-ment of the method(s) you developed to solve this problem. The report should follow the style of ashort conference paper with no more than four A4 pages of content (excluding references, whichcan extend to a 5th page). The report should follow the style and format of an IEEE conferenceshort paper. The IEEE Conference Template for Word, LaTeX, and Overleaf is available here:https://www.ieee.org/conferen...Your report should explain the design choices in your method and justify these based on your un-derstanding of computer vision theory. You should explain the experimentation steps you followedto develop and improve on your basic method, and report your final evaluation result. Your method,experiments, and evaluation results should be explained in sufficient detail for readers to understandthem without having to look at your code. You should include an error analysis which assesses whereyour method performs well and where it fails, provide an explanation of the errors based on your un-derstanding of the method, and give suggestions for future improvements. Your report should includetables, graphs, figures, and/or images as appropriate to explain and illustrate your results.EvaluationYour submission will be marked on the follow grounds:Component Marks CriteriaReport writing 5 Clarity of writing and report organisation; use of tables, fig-ures, and/or images to illustrate and support resultsReport method andjustification10 Correctness of method; motivation and justification of designchoices based on computer vision theoryReport experimenta-tion and evaluation10 Quality of experimentation, evaluation, and error analysis;interpretation of results and experimental conclusionsKaggle submission 3 Kaggle performanceTeam contribution 2 Group self-assessmentThe report is marked out of 25 marks, distributed between the writing, method and justification, andexperimentation and evaluation as shown above.In addition to the report marks, up to 3 marks will be given for performance on the Kaggle leaderboard.To obtain the full 3 marks, a team must make a Kaggle submission that performs reasonably above asimple baseline. 1-2 marks will be given for Kaggle submissions which perform at or only marginallyabove the baseline, and 0 marks will be given for submissions which perform at chance. Teams whichdo not submit results to Kaggle will receive 0 performance marks.Up to 2 marks will be given for team contribution. Each group member will be asked to providea self-assessment of their own and their teammate’s contribution to the group project, and to markthemselves and their teammate out of 2 (2 = contributed strongly to the project, 1 = made a smallcontribution to the project, 0 = minimal or no contribution to the project). Your final team contributionmark will be based on the mark assigned to you by your teammate (and their team contribution markwill be based on the mark you assign to them).Late submissionThe submission mechanism will stay open for one week after the submission deadline. Late submis-sions will be penalised at 10% of the total possible mark per 24-hour period after the original deadline.Submissions will be closed 7 days (168 hours) after the published assignment deadline, and no furthersubmissions will be accepted after this point.Updates to the assignment specificationsIf any changes or clarifications are made to the project specification, these will be posted on the LMS.Academic misconductYou are welcome — indeed encouraged — to collaborate with your peers in terms of the conceptual-isation and framing of the problem. For example, we encourage you to discuss what the assignmentspecification is asking you to do, or what you would need to implement to be able to respond to aquestion.However, sharing materials — for example, showing other students your code or colluding in writ-ing responses to questions — or plagiarising existing code or material will be considered cheating.Your submission must be your own original, individual work. We will invoke University’s Academic ...

October 19, 2021 · 8 min · jiezi

关于http:HTTP基础系列之一文搞懂URL

个别咱们日常在上网的时候,会在浏览器的地址栏里输出一个网站的 "网址",点击下回车,就会跳到你想去的网站,就相似这样 但其实,叫做 "网址" 并不是特地的精确,确切的说,应该叫做 URL 到底啥是URL那到底啥是 URL 呢? 不就是一个网址吗? URL 是英文 Uniform Resource Locator 的缩写,即对立资源定位器,是因特网上用于指定信息地位的示意办法,通过它就能找到网上的某个你要的资源 URL的组成尽管咱们平时应用浏览器的时候,只有输出baidu.com或者qq.com就能失常上网了,但其实咱们输出的只是整个URL中的一小部分 来,我先看看一个绝对残缺的URL的整体构造是怎么样的 这里大抵分了几个局部,咱们一个个来看,它们具体是干什么的 协定图中http://这部分就是协定局部,即指定了URL是以什么协定发送网络申请的 常见的协定如:http://、https://、ftp://、file://,比方: http://就是超文本传输协定,平时上网大多用这个协定,https://是以平安为指标的HTTP协定。 地址图中localhost就是地址局部,用来确定URL所要拜访的服务器的网络地址(也就是网址)。在URL中,地址能够用三个模式来示意:域名、主机名、IP地址 域名咱们平时输出的www.baidu.com、www.qq.com就是域名,域名也分一级域名、二级域名、以及顶级域名。 顶级域名:在域名的尾巴局部,.com这种就是顶级域名,顶级域名个别都代表网站属于某种机构或组织。像.com(商业机构)、.org(非盈利组织)、.gov(政府机构)这类就是常见的顶级域名,除此之外,还有些代表国家的顶级域名,如:.cn(中国)、.us(美国)、.jp(日本)等等一级域名:像qq.com就是一级域名,看上去非常简洁,在顶级域名.com前只有一个单词短语二级域名:而mail.qq.com和v.qq.com这种后面加了mail.、v.等字符串的就叫二级域名不过,域名也只是一串文字,计算机和路由器并不能间接认出它,还须要通过DNS服务器找到域名对应的IP地址,再通过底层的TCP/IP协定路由到对应的机器下来 (这些内容不是本文的重点临时略过,先挖个坑再说) 主机名主机名就是某台计算机的名字,在一个局域网内,能够通过主机名找到你要拜访的计算机。主机名和域名一样,计算机和路由器不认它,须要通过HOSTS文件这样的技术找到主机名和IP地址的关联关系,最初还是翻译成IP地址再持续发送网络申请 图中的localhost也是主机名,然而一种比拟非凡的主机名,是给 回环地址的一个规范主机名,就是代表本机本人的地址。 IP地址在URL中也能够间接用IP地址来代替域名或主机名,如192.168.0.1,对于IP地址的相干知识点放到当前再讲(持续挖坑) 端口号图中在冒号:前面的那串数字8080就是端口号,一台服务器上能够开多个端口号,往往一个网络服务程序就对应一个端口号 比方,我在机器 A 上,开了两个服务程序,别离是 Tomcat和SSH,让它们别离关联端口8080和22,那URL中如果端口号是8080就是会拜访到Tomcat程序,22就会连贯SSH服务。 但可能有小伙伴会有疑难:诶,我平时上百度看到的URL是http://www.baidu.com没看到有端口号啊 其实是有的,端口号是80,只是它被暗藏起来了,咱们看不到而已,而这个80端口也就是URL的默认端口号 但不是所有URL的默认端口号都是80,如果协定是http://,默认端口号为80,但若是https://协定,默认端口号就是443了 虚拟目录从第一个斜杠/开始,到最初一个斜杠/完结的那局部,也就是图中/app/user/那局部即为虚拟目录 它就相似咱们电脑中文件目录的格局,第一个/为根目录,每多一个/就多进入一层目录 文件名从域名后开始算起的最初一个斜杠/开始,到?为止,没有?则到#为止,或者?和#都没有就是到整个URL完结为止的那局部就为文件名 说起来很绕吧,其实就是图中 info.do 这部分,它个别蕴含文件名和扩展名('.'前面那局部),用来指代一个URL所拜访的具体文件或资源,它能够是图片、html文件、css文件,也能够是js文件、字体文件等等,它也能够不是某种文件,而是服务端后盾执行的某段程序。 甚至能够省略不写虚拟目录和文件名,因为它们原本就不是必须的,就如http://www.baidu.com这样的URL就没有文件名,但服务器会在缺省的状况下给你定位到某个特定的文件或程序下来。 查问参数从?后到#完结,即图中的?uid=101&ty=2为查问参数 查问参数,也称为URL参数、查问字符串,英文名为 Query,它是用来向服务端以字符串的模式传递参数和多数数据用的 其参数模式个别都以多个键值对的模式进行示意,如 a=1、b=2就是两个键值对,键为"a"和"b",值为对应的"1"和"2", 多个键值对用&连起来:a=1&b=2 URL编码但参数要传递的某些值往往带有特殊字符,这些字符和URL规范的格局抵触,比方要传a&b这样字符串,和查问参数键值对的连接符&抵触了,若不加以辨别就会产生歧义 而最简略的方法,就是对参数值进行编码,称为 URL Encoding,通过编码,a&b变成了a%26b,就不再蕴含会抵触的特殊字符 而有些参数即使有特殊字符,也不会被编码,除非自行强制编码,比方URL中参数值是另外一串URL,就能够写成 http://localhost/do?url=http://www.baidu.com这种非凡状况不会有歧义,因为计算机系统认得出参数是另一串URL,就会按URL的模式来解析,但当子URL又蕴含子参数和多子键值对的时候也难免会分不清参数到底是儿子的还是父亲的,这时还是强制编码的好 列表参数URL的参数是一个个键值对,即一个key对应一个value,那如果是一个key要传递多个值,也就是一个列表咋办?也好办 URL的参数名是能够反复的,比方a=1&a=2&a=3,这里穿了3个参数名都为a的查问参数,是齐全能够的,能够利用这种个性,按程序将 1、2、3作为参数a的列表值 为了示意更分明点,个别都会在列表参数名前面加上一对方括号[],如:a[]=1&a[]=2&a[]=3 然而,对于URL参数的写法和格局的规范,也没有特地严格的规定,以上几种模式个别都会反对 锚图中#前面那局部字符串,#abc就是锚局部 锚,英文称做Reference,通常也是用来传递参数等信息,但与查问参数的本质区别就是这部分内容不会被传递到服务器端 锚个别用于页面,比方在浏览网页的时候,按个按钮忽然帮你定位到页首或页面中的某个位子去了,这就是锚 当初随着前后端拆散技术,尤其是 vue、reactjs 等前端框架的衰亡,锚作为前端javascript程序处理的参数载体也越来越重要了 ...

October 14, 2021 · 1 min · jiezi

关于http:在线HTTP请求响应头转JSON工具

在线HTTP申请/响应头转JSON工具在线HTTP申请/响应头转JSON工具 本工具能够将HTTP的申请或相应头的文本数据转成JSON格局数据,纯客户端实时转换。 https://tooltt.com/header2json/

October 7, 2021 · 1 min · jiezi

关于http:前端跨域整理总结

跨域,一个陈词滥调的问题,也是前后端交互必然也常常会碰到的问题,置信大家都不生疏,尽管不是什么浅近的货色,然而脚手架的层层封装,各种 API 的层出不穷,未免有些应接不暇,所以这种状况,就只有本人总结一下了,如果你对它并不是那么相熟,置信对必定会对你有帮忙的 说跨域之前,首先须要理解的一个概念是同源策略 因为浏览器有安全策略限度,不同源的地址之间不能相互拜访资源或者操作DOM 对于同源策略不理解的能够看我另一篇文章有具体介绍:吃透浏览器平安(同源限度/XSS/CSRF/中间人攻打) 跨域有哪些计划?这里只介绍几种开发中用的比拟多的,简直用不到的比方: document.domain + iframe:实用主域名雷同,子域名不同的跨域场景window.name + iframe:利用name值最长能够 2M ,并用不同页面或不同域名加载后仍然存在的个性location.hash + iframe:实用通过 C 页面来实现 A 页面与 B 页面通信的场景就不过多开展了 1. CORS面试爱问这个 CORS 通信过程都是浏览器主动实现,须要浏览器(都反对)和服务器都反对,所以要害在只有服务器反对,就能够跨域通信,CORS申请分两类,简略申请和非简略申请 另外CORS申请默认不蕴含Cookie以及HTTP认证信息,如果须要蕴含Cookie,须要满足几个条件: 服务器指定了 Access-Control-Allow-Credentials: true开发者须在申请中关上withCredentials属性: xhr.withCredentials = trueAccess-Control-Allow-Origin不要设为星号,指定明确的与申请网页统一的域名,这样就不会把其余域名的Cookie上传简略申请须要同时满足两个条件,就属于简略申请: 申请办法是:HEAD、GET、POST,三者之一申请头信息不超过以下几个字段: AcceptAccept-LanguageContent-LanguageLast-Event-IdContent-Type:值为三者之一application/x-www/form/urlencoded、multipart/form-data、text/plain须要这些条件是为了兼容表单,因为历史上表单始终能够跨域 浏览器间接收回CORS申请,具体来说就是在头信息中减少Origin字段,示意申请起源来自哪个域(协定+域名+端口),服务器依据这个值决定是否批准申请。如果批准,返回的响应会多出以下响应头信息 Access-Control-Allow-Origin: http://juejin.com // 和 Orign 统一 这个字段是必须的Access-Control-Allow-Credentials: true // 示意是否容许发送 Cookie 这个字段是可选的Access-Control-Expose-Headers: FooBar // 指定返回其余字段的值 这个字段是可选的Content-Type: text/html; charset=utf-8 // 示意文档类型在简略申请中服务器至多须要设置:Access-Control-Allow-Origin 字段 非简略申请比方 PUT 或 DELETE 申请,或 Content-Type 为 application/json ,就是非简略申请。 非简略 CORS 申请,正式申请前会发一次 OPTIONS 类型的查问申请,称为预检申请,询问服务器是否反对网页所在域名的申请,以及能够应用哪些头信息字段。只有收到必定的回答,才会发动正式XMLHttpRequest申请,否则报错 ...

October 3, 2021 · 2 min · jiezi

关于http:HTTP-头部字段-Cache-Control-maxage-0-和-nocache-的区别

禁掉缓存的状况:申请百度首页 开启缓存的状况下: 仿佛没有什么变动。 再察看申请的头部字段:cache-control: max-age=0 标头 Cache-Control: max-age=0 暗示内容立刻被认为是古老的(并且必须从新获取),这实际上与 Cache-Control: no-cache 雷同。 首先理解 cache-control 的几种可能的值: no-cache: 这会批示浏览器每次应用 URL 的缓存版本之前都必须与服务器从新验证。no-store: 这会批示浏览器和其余两头缓存(如 CDN)从不存储文件的任何版本。private: 浏览器能够缓存文件,但两头缓存( for example CDN cache)不能。public: 响应能够由任何缓存存储。Cache-Control 标头有两个方面。 一侧是它能够由网络服务器(又名“原始服务器”)发送的中央。 另一端是浏览器能够发送的中央(又名“用户代理”)。 When sent by the origin server我置信 max-age=0 只是通知缓存(和用户代理)响应从一开始就曾经过期,因而他们应该 (SHOULD) 在应用缓存正本之前从新验证响应(例如,应用 If-Not-Modified 标头). 而 no-cache 通知他们在应用缓存正本之前必须 (MUST) 从新验证。 NO-CACHE 的含意: 缓存不得在没有与源服务器胜利从新验证的前提下,间接应用响应来满足后续申请。这容许源服务器阻止缓存,即便缓存已配置为向客户端申请返回古老的响应。 When sent by the user agent如果用户代理应用 Cache-Control: max-age=0(又名“端到端从新验证”)发送申请,那么沿途的每个缓存都将从新验证其缓存条目(例如,应用 If-Not-Modified header)始终到源服务器。 如果回复是 304(未修改),则能够应用缓存的实体。 另一方面,应用 Cache-Control: no-cache(又名“端到端从新加载”)发送申请不会从新验证,并且服务器在响应时不得应用缓存正本。 更多Jerry的原创文章,尽在:"汪子熙": ...

October 2, 2021 · 1 min · jiezi

关于http:得物技术浅谈重复http请求的取消

场景:作为开发者,咱们接触最多的就是CRUD,各种接口的联调,然而如同会比拟少的去关注咱们发送的http申请,当这个申请没有fulfilled,而又有新的申请发送进来,那么以后这一个申请该当如何解决?咱们晓得为了避免反复的动作,咱们能应用相似于防抖和节流来躲避,然而明天咱们谈谈从申请层面上如何去躲避反复的申请,而不是从用户侧去阻止。其实网上也有很多这方面的开发者的尝试,然而有的也讲得没有那么分明。为此,在调研了这方面的一些常识之后,联合本人平时在开发中遇到的场景。总结进去两个最常见的http申请须要被勾销的场景。 场景一:雷同的申请须要勾销,这里的雷同的申请指的是对于get 申请来讲,method一样,params一样,url一样,对于Post申请来讲,当然就是method一样,body一样,url一样 场景二:路由地址发生变化(之前网页的申请曾经无意义) 实现办法:首先,要想实现反复的勾销,咱们就须要做两步,第一步是首先要晓得如何勾销,第二步就是如何判断出以后是反复的申请 勾销反复申请实现办法:对于如何勾销,这部分我会从axios以及fetch两个方面来论述,因为这两个申请形式的实现勾销的办法是有差异的 为了不便了解,咱们通过react来演示这个过程更间接,因为咱们晓得钩子函数useEffect,useEffect的特点决定了返回函数会在每一次useEffect执行之前,进行一次,来进行清理操作,因而在这里,咱们把勾销操作放在这儿,就能够模仿每一次都勾销前一次的操作 axios首先介绍axios,这个大家前端er们必定接触得都要吐了,一句话概括,axios实现勾销的实质就是应用其外部封装的cancelToken。 首先要晓得,token确定了唯一性,这也是确定哪一个申请须要被勾销的标识,它能够由cancelToken.source()生成 source蕴含了cancel办法 ,咱们调用它来实现勾销 useEffect(() => { const cancelToken = axios.CancelToken; const source = cancelToken.source(); setAxiosRes("axios request created"); getReq(source).then((res) => { setAxiosRes(res); }); return () => { source.cancel("axios request cancelled"); };}, [axiosClick]);export const instance = axios.create({ baseURL: "http://localhost:4001",});export const getReq = async (source) => { try { const { data } = await instance.get("/", { cancelToken: source.token, }); return data; } catch (err) { if (axios.isCancel(err)) { return "axios request cancelled"; } return err; }};这里须要留神的是,cancel这个动作,自身就是能够被catch局部给捕捉到的,也是一个err,咱们用它提供的isCancel办法去判断一下是否是勾销操作,这个能够用来验证咱们的勾销是否胜利 ...

September 10, 2021 · 3 min · jiezi

关于http:央行发布报告着重提及分布式

央行公布报告着重提及“分布式”!原创 Linden灵动 Linden灵动 9-6 业余专一 共建共赢 近日,中国人民银行公布《中国金融稳固报告(2021)》(以下简称《报告》),指出“国家金融根底数据库投产应用,根本建成以分布式架构、大数据和云计算技术为根底,合乎大数据倒退方向的先进、齐备的要害基础设施”! 01 政策看重“分布式” 《报告》提及国家金融根底数据库的内容,意味着“分布式”备受金融行业的必定。其实,不仅仅是金融畛域,“分布式”受到了多个行业的关注,尤其是可能满足海量数据存储需要的分布式存储,曾经被多项重点政策提及,利用于多个数据存储我的项目: 2020年11月6日,国家广播电视总局办公厅印发《国家广播电视总局办公厅对于印发区块链技术利用系列白皮书的告诉》,其中指出区块链采纳去中心化的分布式数据存储技术,能够在全网节点上实现数据存储和同步,并通过共识技术保障外部节点对存储内容更改的有效性,保护一个残缺的可查找的数据库,可能利用于散发节点内容校验、设施认证治理等场景; 2021年1月11日,浙江省发改委,浙江省中科院、浙江省社科院、浙江大学等领导班子正式成立2021—5G新基建IPFS翻新调研小组; 1月27日,人民数据(国家大数据灾备核心)旗下的区块链分布式存储数据中心网——人民云网称,将在IPFS根底上进行自主研发,利用国内上先进成熟的文件碎片化加密、内容寻址、分布式存储等革命性技术,实现联网,造成人民云网,能够帮忙政府、企业、机构等服务对象大幅节俭数据存储费用; 4月17日,国家发改委主管的中国产业倒退研究院(IPFS)分布式存储钻研核心成立,深入研究分布式存储,放慢建设行业体系,增强分布式存储在WEB3.0中的技术创新、场景落地等利用; 4月24日,中科院(IPFS)分布式存储联结实验室在广东东莞成立,将致力于利用分布式存储技术研发成绩,推动转化利用落地,制订我国在分布式存储畛域的各项规范,促成我国区块链技术与实体经济的深度交融倒退; 5月24日,国家发改委、网信办、工信部、能源局公布对于印发《全国一体化大数据中心协同翻新体系算力枢纽实施方案》的告诉,在国家枢纽节点重点工作局部指出,要加大分布式计算与存储等软硬件产品的规模化利用,反对和推广分布式数据操作系统等方面的平台级原创技术…… 02 分布式存储的价值 分布式存储受到多项政策的认可,与其对于数字经济、数字化转型的重要意义密切相关。 以后,开掘数据价值曾经成为社会提高的能源源泉之一,倒退数字经济是推动国家经济倒退的重要动作。2020年4月颁布的《对于构建更加欠缺的因素市场化配置体制机制的意见》,就曾经将数据认定为继土地、劳动力、资本、技术之后的“第五生产因素”。随着数字产业化、产业数字化的深刻倒退,数字经济必将无力地推动品质改革、效率改革和能源改革,为高质量倒退注入新动能。 大数据时代的到来与数字经济的倒退,随同着海量数据的产生。而且随着5G技术的成熟,用户数据存储量进一步加大。数据显示,以后我国数据总量正在以年均50%的速度增长,预计到2025年将占寰球27%。 想要用好这些数据,首先要做好数据的治理与存储,这使得数据存储需要激增。但传统的中心化存储空间无限,扩容老本昂扬,而且还存在效率低下、安全性有余、网页走丢、数据垄断等问题,难以解决海量数据须要存储与计算带来的困扰。如某三方渠道统计,以后的数据中只有不到2%失去保留,绝大部分不得不被舍弃。 分布式存储由此锋芒毕露。它将数据扩散存储在多台独立的设施之上,具备去中心化、不可篡改、可追踪性、透明性等特点,各节点实现信息的自我验证、传递与治理,可能解决传统数据中心攻打危险、造价昂扬、扩容难等问题,是承载数据洪流的基础设施。IDC预测认为,到2023年,40%左右的存储系统都将基于“分布式”。 03 分布式存储与区块链 分布式存储在落地时,还能够与区块链技术配合应用。区块链的骨架是“分布式账本”,是一种将数据以间断块的模式存储的数据库,够在数据安全、数据存储、数据流通、数据共享等方面提供保障。但随着节点数据量一直增多,区块链存储成本上升、执行效率升高,而且扩容难,无奈满足海量数据的存储须要。 区块链我的项目想要更好地落地倒退,就必须要解决底层的数据存储难题。分布式存储就是数据与区块链业务之间的“桥梁”,可能无效补救区块链在存储空间方面的有余,基于区块链的分布式存储在可靠性、可用性、老本和数据隐衷方面具备劣势,两者联合能够更好地服务于数据存储与计算。 以IPFS分布式存储为例,作为一种文件存储和内容散发网络协议,它能够将文件切割成若干个256KB的碎片,随机存储在各个节点上。IPFS的高效分布式存储可能承接区块链在数据存储方面的劣势,同时极大地补救区块链存储效率低、存储老本高、扩容难等问题,从而更好地撑持区块链技术的利用,将来或将成为区块链基础设施。 具体来看,区块链分布式存储次要具备以下劣势: 1、可靠性更高——区块链存储将数据存储到成千上万个节点上,空间微小,而且能够无效防止单点故障问题; 2、可用性更高——区块链存储只须要保障肯定比例的节点数量失常,零碎服务就是可用的; 3、存储老本更低——将存储老本摊派到边缘节点,绝对于搭建中心化数据中心老本更低; 4、隐衷性更高——区块链存储数据都通过加密,没有明文数据,难以被第三方窃取到数据隐衷。 总的来说,数字经济时代,随同着5G、AI、大数据等新兴技术的疾速倒退,数据量快速增长。面对将来海量高并发的数据存储与计算需要,分布式存储曾经成为一个重要的发展趋势。政策层面的继续关注,正是对分布式存储技术劣势与重要性的必定。能够预感,分布式存储将作为重要基石,为数字产业化、产业数字化深刻倒退提供巩固撑持!

September 6, 2021 · 1 min · jiezi

关于http:深度解读HTTP的前世今生

HTTP的全名叫做超文本传输协定,是万维网所基于的应用层传输协定,建设之初,次要就是为了将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。最后的版本是HTTP 0.9,是在80年的前期产生的,前面在1996年降级到了1.0。 然而到了 WEB2.0以来,咱们的页面变得复杂,不仅仅单纯的是一些简略的文字和图片,同时咱们的 HTML 页面有了 CSS,Javascript,来丰盛咱们的页面展现,当 ajax 的呈现,咱们又多了一种向服务器端获取数据的办法,这些其实都是基于 HTTP 协定的。同样到了挪动互联网时代,咱们页面能够跑在手机端浏览器外面,然而和 PC 相比,手机端的网络状况更加简单,这使得咱们开始了不得不对 HTTP 进行深刻了解并一直优化过程中。所以在1997年呈现了HTTP1.1,随后到2014年,HTTP1.1都始终都在更新。 而后到了2015年,为了适应疾速发送的web利用和古代浏览器的需要,在Google的SPDY我的项目根底上倒退出了新的HTTP2协定。 又过了4年,在2019年,Google又开发出了一个新的协定规范QUIC协定,它就是HTTP3的基石,其目标是为了进步用户与网站和API交互的速度和安全性。 HTTP1.0新近的HTTP1.0版本,是一种无状态、无连贯的应用层协定。 HTTP1.0规定浏览器和服务器放弃短暂的连贯,浏览器的每次申请都须要与服务器建设一个TCP连贯,服务器解决实现后立刻断开TCP连贯(无连贯),服务器不跟踪每个客户端也不记录过来的申请(无状态)。 TCP建设连接时间 = 1.5 RTT 一去 (SYN)二回 (SYN + ACK)三去 (ACK)RTT(Round Trip Time)是指通信一来一回的工夫 这种无状态性能够借助cookie/session机制来做身份认证和状态记录。而上面两个问题就比拟麻烦了。 了解这两个问题有一个非常重要的前提:客户端是根据域名来向服务器建设连贯,个别PC端浏览器会针对单个域名的server同时建设6~8个连贯,手机端的连接数则个别管制在4~6个 无奈复用连贯,每次申请都要经验三次握手和慢启动,三次握手在高提早的场景下影响较显著,慢启动则对文件类大申请影响较大。 TCP 连贯会随着工夫进行自我「调谐」,起初会限度连贯的最大速度,如果数据胜利传输,会随着工夫的推移进步传输的速度。这种调谐则被称为 TCP 慢启动。队头阻塞(head of line blocking),因为HTTP1.0规定下一个申请必须在前一个申请响应达到之后能力发送。假如前一个申请响应始终不达到,那么下一个申请就不发送,同样的前面的申请也给阻塞了。为了解决这些问题,HTTP1.1呈现了。 HTTP1.1对于HTTP1.1,不仅继承了HTTP1.0简略的特点,还克服了诸多HTTP1.0性能上的问题。 缓存解决,在HTTP1.0中次要应用header里的If-Modified-Since,Expires来做为缓存判断的规范,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来管制缓存策略。带宽优化及网络连接的应用,HTTP1.0中,存在一些节约带宽的景象,例如客户端只是须要某个对象的一部分,而服务器却将整个对象送过来了,并且不反对断点续传性能,HTTP1.1则在申请头引入了range头域,它容许只申请资源的某个局部,即返回码是206(Partial Content),这样就不便了开发者自在的抉择以便于充分利用带宽和连贯。谬误告诉的治理,在HTTP1.1中新增了24个谬误状态响应码,如409(Conflict)示意申请的资源与资源的以后状态发生冲突;410(Gone)示意服务器上的某个资源被永久性的删除。Host头解决,在HTTP1.0中认为每台服务器都绑定一个惟一的IP地址,因而,申请音讯中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的倒退,在一台物理服务器上能够存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的申请音讯和响应音讯都应反对Host头域,且申请音讯中如果没有Host头域会报告一个谬误(400 Bad Request)。长连贯(Persistent Connection),HTTP1.1减少了一个Connection字段,通过设置Keep-Alive能够放弃HTTP连接不断开,防止了每次客户端与服务器申请都要反复建设开释建设TCP连贯,进步了网络的利用率。如果客户端想敞开HTTP连贯,能够在申请头中携带Connection: false来告知服务器敞开申请。管道化(Pipelining),基于HTTP1.1的长连贯,使得申请管线化成为可能。管线化使得申请可能“并行”传输。举个例子来说,如果响应的主体是一个html页面,页面中蕴含了很多img,这个时候keep-alive就起了很大的作用,可能进行“并行”发送多个申请。这里的“并行”并不是真正意义上的并行传输,这是因为服务器必须依照客户端申请的先后顺序顺次回送相应的后果,以保障客户端可能辨别出每次申请的响应内容。 如图所示,客户端同时发了两个申请别离来获取html和css,如果说服务器的css资源先准备就绪,服务器也会先发送html再发送css。 换句话来说,只有等到html响应的资源齐全传输结束后,css响应的资源能力开始传输。也就是说,不容许同时存在两个并行的响应。 另外,pipelining还存在一些缺点: pipelining只能实用于http1.1,一般来说,反对http1.1的server都要求反对pipelining;只有幂等的申请(GET,HEAD)能应用pipelining,非幂等申请比方POST不能应用,因为申请之间可能会存在先后依赖关系;绝大部分的http代理服务器不反对pipelining;和不反对pipelining的老服务器协商有问题;可能会导致新的Front of queue blocking问题;可见,HTTP1.1还是无奈解决队头阻塞(head of line blocking)的问题。同时“管道化”技术存在各种各样的问题,所以很多浏览器要么基本不反对它,要么就间接默认敞开,并且开启的条件很刻薄...而且实际上如同并没有什么用途。 那咱们在谷歌控制台看到的并行申请又是怎么一回事呢? 如图所示,绿色局部代表申请发动到服务器响应的一个等待时间,而蓝色局部示意资源的下载工夫。依照实践来说,HTTP响应理该当是前一个响应的资源下载完了,下一个响应的资源能力开始下载。而这里却呈现了响应资源下载并行的状况。这又是为什么呢? 其实,尽管HTTP1.1反对管道化,然而服务器也必须进行一一响应的送回,这个是很大的一个缺点。实际上,现阶段的浏览器厂商采取了另外一种做法,它容许咱们关上多个TCP的会话。也就是说,上图咱们看到的并行,其实是不同的TCP连贯上的HTTP申请和响应。这也就是咱们所相熟的浏览器对同域下并行加载6~8个资源的限度。而这,才是真正的并行! HTTP2.0HTTP 2.0 的呈现,相比于 HTTP 1.x ,大幅度的晋升了 web 性能。在与 HTTP/1.1 齐全语义兼容的根底上,进一步缩小了网络提早。而对于前端开发人员来说,无疑缩小了在前端方面的优化工作。本文将对 HTTP 2.0 协定 个根本技术点进行总结,分割相干常识,摸索 HTTP 2.0 是如何进步性能的。 ...

September 4, 2021 · 4 min · jiezi

关于http:从输入URL到浏览器显示页面发生了什么

从输出URL到浏览器显示页面产生了什么输出网址当你开始输出网址比方www.cnblogs.com时游览器就能够在书签或者历史记录外面去搜寻相干的网址推荐给你。 浏览器查找域名的IP地址申请发动后,游览器首先会解析这个域名,首先它会查看本地硬盘的 hosts 文件,看看其中有没有和这个域名对应的规定,如果有的话就间接应用 hosts 文件外面的 ip 地址。如果在本地的 hosts 文件没有可能找到对应的 ip 地址,浏览器会收回一个 DNS申请到本地DNS(域名散布零碎)服务器 。本地DNS服务器个别都是你的网络接入服务器商提供,比方中国电信,中国移动。查问你输出的网址的DNS申请达到本地DNS服务器之后,本地DNS服务器会首先查问它的缓存记录,如果缓存中有此条记录,就能够间接返回后果,此过程是递归的形式进行查问。如果没有,本地DNS服务器还要向DNS根服务器进行查问根DNS服务器没有记录具体的域名和IP地址的对应关系,而是通知本地DNS服务器,你能够到域服务器下来持续查问,并给出域服务器的地址。这种过程是迭代的过程本地DNS服务器持续向域服务器发出请求,在这个例子中,申请的对象是.com域服务器。.com域服务器收到申请之后,也不会间接返回域名和IP地址的对应关系,而是通知本地DNS服务器,你的域名的解析服务器的地址最初,本地DNS服务器向域名的解析服务器发出请求,这时就能收到一个域名和IP地址对应关系,本地DNS服务器不仅要把IP地址返回给用户电脑,还要把这个对应关系保留在缓存中,以备下次别的用户查问时,能够间接返回后果,放慢网络拜访。建设TCP链接在拿到域名对应的IP地址后,会以随机端口(1024~~65535)向WEB服务器程序80端口发动TCP的连贯申请,这个连贯申请进入到内核的TCP/IP协定栈(用于辨认该连贯申请,解封包,一层一层的剥开),还有可能要通过Netfilter防火墙(属于内核的模块)的过滤,最终达到WEB程序,最终建设了TCP/IP的连贯,对于客户端与服务器的TCP链接,必然要说的就是『三次握手』。客户端发送一个带有SYN标记的数据包给服务端,服务端收到后,回传一个带有SYN/ACK标记的数据包以示传播确认信息,最初客户端再回传一个带ACK标记的数据包,代表握手完结,连贯胜利。 通俗化之后就是: 客户端:老弟我要跟你链接 服务端:好的,批准了 客户端:好嘞 游览器向WEB服务器发动Http申请建设TCP连贯之后,发动HTTP申请,申请个别分为三局部 申请办法URI协定/版本 申请头(Request Header) 申请注释 服务器端解决服务器端收到申请后的由web服务器(精确说应该是http服务器)解决申请,诸如Apache、Ngnix、IIS等。web服务器解析用户申请,晓得了须要调度哪些资源文件,再通过相应的这些资源文件解决用户申请和参数,并调用数据库信息,最初将后果通过web服务器返回给浏览器客户端。 敞开TCP链接为了防止服务器与客户端单方的资源占用和损耗,当单方没有申请或响应传递时,任意一方都能够发动敞开申请。与创立TCP连贯的3次握手相似,敞开TCP连贯,须要4次挥手。 客户端:老弟,我这边没数据要传了,咱们敞开链接吧 服务端:好的,接管到了,我看看我这边还有没有要传的 服务端:我这边也没有了,敞开吧 客户端:好嘞 游览器解析资源对于获取到的HTML、CSS、JS、图片等等资源。 浏览器通过解析HTML,生成DOM树,解析CSS,生成CSS规定树,而后通过DOM树和CSS规定树生成渲染树。渲染树与DOM树不同,渲染树中并没有head、display为none等不用显示的节点。 在解析CSS的同时,能够持续加载解析HTML,但在解析执行JS脚本时,会进行解析后续HTML,这就会呈现阻塞问题 游览器布局渲染依据渲染树布局,计算CSS款式,即每个节点在页面中的大小和地位等几何信息。HTML默认是流式布局的,CSS和js会突破这种布局,扭转DOM的外观款式以及大小和地位。这时就要提到两个重要概念:repaint和reflow。 repaint:屏幕的一部分重画,不影响整体布局,比方某个CSS的背景色变了,但元素的几何尺寸和地位不变。 reflow: 意味着元件的几何尺寸变了,咱们须要从新验证并计算渲染树。是渲染树的一部分或全副产生了变动。这就是Reflow,或是Layout。 有些状况下,比方批改了元素的款式,浏览器并不会立即 reflow 或 repaint 一次,而是会把这样的操作积攒一批,而后做一次 reflow,这又叫异步 reflow 或增量异步 reflow。有些状况下,比方 resize 窗口,扭转了页面默认的字体等。对于这些操作,浏览器会马上进行 reflow。

September 3, 2021 · 1 min · jiezi

关于http:HTTP系列之HTTP中的cookies

简介如果小伙伴最近有拜访国外的一些规范网站的话,可能常常会弹出一个对话框,说是本网站为了更好的体验和跟踪,须要拜访你的cookies,问你批准不批准,对于这种比拟文化的做法,我个别是点批准的。 然而转头一想,为什么拜访国内的网站素来没有弹出过这个提醒呢?这是一个值得沉思的问题,或者当你看完这篇文章之后,就有了答案。 cookies的作用那么cookies有什么作用呢?HTTP cookies就是服务器端发送给浏览器端的一小部分数据,浏览器接管到这个数据之后,能够存起来本人用,也能够在后续发送到server端进行一些数据的校验。 通过在cookies中存储一些有用的数据,能够将无状态的HTTP协定变成有状态的session连贯,或者用来保留登录的权限,下次不必明码即可登陆,十分有用。 一般来说,cookies用在三个方面: session的治理,用来保留登录状态,从而让HTTP申请能够带上状态信息。用户自定义的设置,这些用户非凡的字段,须要保留在cookies中。跟踪用户的行为信息。在很久很久以前,还没有古代浏览器的时候,客户端的惟一存储就是cookies,所以cookies也作为客户端存储来应用的,然而有了古代的浏览器之后,个别是倡议把客户端存储的数据放到其余存储形式中。 为什么呢? 因为每次申请cookies中的数据会主动带上,并且发送到server端,所以如果cookies中存储了太多的数据,就会导致服务器性能的降落。 创立cookies因为cookies是客户端的本地存储,所以如果服务器端想要设置客户端的cookies时,通过在响应头中设置Set-Cookie,浏览器接管到这个响应头之后,就会将对应的cookies内容存储到浏览器本地。 而后在后续的服务器申请中都会带上Cookie header。同时cookie还能够带上过期工夫、发送限度等属性。 先来看下Set-Cookie的格局: Set-Cookie: <cookie-name>=<cookie-value>举个例子,上面是一个server端的响应: HTTP/2.0 200 OKContent-Type: text/htmlSet-Cookie: name=flydeanSet-Cookie: site=www.flydean.com当浏览器接管到这个响应之后,就会在本地的cookies中设置对应的值,并且在后续的申请中将这些值以cookies的header模式带上: GET /test.html HTTP/2.0Host: www.flydean.comCookie: name=flydean; site=www.flydean.com在netty中提供了一个Cookie的类,专门用来示意cookies,这个类中提供了cookies的根本属性,而后通过应用: response.headers().add(HttpHeaderNames.SET_COOKIE, ServerCookieEncoder.STRICT.encode(cookie));来对响应头进行设置。 cookies的生存工夫HTTP的cookies有两种,一种是session cookies,这种cookies会在session完结之后自行删除。 还有一种cookies通过指定Expires或者 Max-Age 来设置过期工夫: Set-Cookie: id=abcdef; Expires=Thu, 31 May 2021 08:00:00 GMT;其中Expires是HTTP1.0中定义的header,Max-Age是HTTP1.1中定义的header。 cookies的权限管制HTTP提供了两个属性来对cookies的权限进行管制,别离是Secure和HttpOnly。 如果cookies中带有Secure属性,那么cookies只会在应用HTTPS协定的时候发送给服务器。如果应用的是HTTP协定,则不会发送cookies信息。 并且,如果是在http的状况下,server端是不容许给cookie设置Secure属性的。 然而设置了Secure属性并不意味着cookies就是平安的,因为能够从其余的伎俩拿到浏览器端的cookies。 还有一个属性是HttpOnly,如果cookies设置了HttpOnly,那么cookies是不容许被JavaScript拜访的,通过设置HttpOnly,咱们能够晋升客户端数据的安全性: Set-Cookie: id=abcdef; Expires=Thu, 21 May 2021 08:00:00 GMT; Secure; HttpOnlycookies还能够增加Domain和Path属性,用于标记cookies能够发送到的URL。 其中Domain示意域名,而Path示意门路。 如果Domain没有设置,则默认是设置cookies的host,这个host是不蕴含子domain的。如果手动指定了Domain,那么子domain是会蕴含在内的。 比方如果咱们设置了Domain=flydean.com,那么子domain:doc.flydean.com也会共享这个cookies。 Path用来匹配URL的门路,只有匹配到的URL才能够发送cookies。 另外HTTP还提供了一个SameSite属性,示意如果是在CORS环境状况下,是否发送cookies到第三方网站,这样能够在肯定水平上爱护网站的信息。 SameSite有三个可能的值,别离是Strict, Lax, 和 None。如果在Strict状况下,那么cookie仅发送到与创立它的站点雷同的站点。Lax跟Strict相似,不同之处在于当用户导航到cookie的原始站点时发送cookie,比方通过拜访内部站点的链接。 None能够在原始网站和跨站资源拜访中应用,然而必须要在平安的环境中进行(设置Secure属性)。如果没有设置SameSite,那么体现是和Lax统一的。 例如: Set-Cookie: name=flydean; SameSite=Strict第三方cookies咱们晓得cookies是和domain相干的,如果cookies的domain是和以后拜访的页面雷同的话,这个cookies就叫做 first-party cookies。如果和以后的拜访页面不同,比方拜访第三方的图片、脚本、css等,第三方的服务器有可能会发送他们本人的cookies,这种cookies叫做第三方cookies,第三方cookies次要被用来广告或者跟踪用户的行为信息。 ...

September 2, 2021 · 1 min · jiezi

关于http:HTTP系列之HTTP缓存

简介为了进步网站的访问速度和效率,咱们须要设计各种各样的缓存,通过缓存能够防止不必要的额定数据传输和申请,从而晋升网站的申请速度。对于HTTP协定来说,自身就自带有HTTP缓存。 明天咱们就深入探讨一下HTTP中的缓存机制和应用。 HTTP中的缓存品种缓存就是将申请的资源在本地保留一份拷贝,从而在下一次申请的时候,间接返回该拷贝,不必再从服务器下载资源,从而缩小了资源的传输晋升了效率。 除了间接拜访和返回资源之外,HTTP中的缓存能够分成两类,一种是共享cache,也就是说不同的客户端都能够从该共享cache中获取资源,并且这些资源是多个客户端能够拜访的。还有一种是公有cache,这意味着该cache只能用户或者客户端公有拜访,其余用户是无权拜访的。 公有cache很好了解,咱们罕用的浏览器中的cache基本上就是公有cache,这些cache是浏览器独有的,并不会共享给其余的浏览器。 共享cache次要用在一些web代理上,比方web代理服务器,因为web代理服务器可能会为泛滥的用户提供资源服务,对于这些用户独特拜访的资源就不必要每个用户保留一份了,只须要在web代理服务器中保留一份即可,这样能够缩小资源的有效拷贝。 HTTP中缓存响应的状态对于HTTP缓存来说,个别缓存的是GET申请,因为GET申请除了URI之外,并没有其余多余的参数,并且其示意的意义是从服务器获取资源。 不同的GET申请,会返回不同的状态码。 如果是胜利返回资源,则会返回200示意OK。 如果是重定向,则返回301。如果是异样,则返回404。如果是不齐全的后果,则会返回206。 HTTP中的缓存管制HTTP中的缓存管制是通过HTTP头来示意的。在HTTP1.1中退出了Cache-Control,咱们能够通过Cache-Control来管制申请和响应的缓存状况。 如果不须要缓存,则应用: Cache-Control: no-store如果须要对客户端的缓存进行验证,则应用: Cache-Control: no-cache如果要强制进行验证,则能够应用: Cache-Control: must-revalidate在这种状况下,过期的资源将不会被容许应用。 对于服务器来说,能够通过Cache-Control来管制缓存是private或者public的: Cache-Control: privateCache-Control: public还有一个十分重要的缓存管制就是过期工夫: Cache-Control: max-age=31536000通过设置max-age,能够笼罩Expires头,示意在这个工夫区间范畴之类,该资源能够看做是最新的,不须要从新从服务器获取。 Cache-Control是HTTP1.1中定义的header字段,在HTTP1.0中也有一个相似的字段叫做Pragma。通过设置 Pragma: no-cache能够失去相似Cache-Control: no-cache的成果。也就是强制客户端从新提交缓存到服务器端进行校验。 然而对于服务器端的响应来说,并不蕴含Pragma,所以Pragma并不能齐全代替Cache-Control。 缓存刷新缓存寄存在客户端之后,就能够在申请的时候被应用了。然而为了平安起见,咱们须要给缓存设置一个过期工夫,只有在过期工夫之前的工夫范畴,缓存才是无效的,如果超过了过期工夫,则须要从服务器从新获取。 这样的机制可能保障客户端获取到的资源始终是最新的。并且可能保障服务器端对资源的更新可能及时达到客户端。 如果客户端的资源在过期工夫之类,那么这个资源的状态就是fresh,否则资源的状态就是stale。 如果资源是stale状态的,该资源并不会立刻从客户端清理进来,而是在下一次的申请中,向服务器发送一个If-None-Match的申请,判断该资源在服务器端是否依然是fresh状态的,如果该资源并没有发生变化,则返回304 (Not Modified),示意该资源依然无效。 而这个fresh的持续时间就是通过"Cache-Control: max-age=N" 来判断的。 如果响应中并没有这个头,则会去判断 Expires header 是否存在,如果存在那么fresh的工夫就能够应用Expires - Date 来进行计算。 如果响应中连Expires header都没有,那么怎么去判断资源的fresh工夫呢? 这种状况下会去查找Last-Modified header,如果这个header存在的话,那么fresh工夫就是(Date - Last-modified )/ 10 。 revving为了晋升HTTP申请的效率,咱们当然心愿缓存工夫越长越好,然而后面咱们也提到了,缓存工夫过长会导致服务器资源更新艰难的问题。怎么解决呢? 对于那些不常常更新的文件,申请他们的URL能够由文件名+版本号来决定。同一个版本号示意该资源内容是固定不变的,咱们能够对其缓存一个十分长的工夫。 当服务器资源内容发生变化之后,只须要在申请的时候更新版本号即可。 尽管这样的操作会造成服务器资源的批改同时要批改客户端申请的版本,然而在古代前端打包工具的帮忙下,这并不是一个很大的问题。 缓存校验当缓存的资源过期之后,有两种解决形式,一种是从新从服务器申请资源,一种是对缓存资源进行再次校验。 当然再次校验须要服务器的反对,并须要设置"Cache-Control: must-revalidate"申请头。 那么客户端怎么去校验资源是否无效呢?很显著咱们不能把资源从客户端发送到服务器端进行校验,这样的操作形式太过简单,并且在文件比拟大的申请下,会造成资源的节约。 咱们很容易想到的一种办法是对资源文件进行hash运行,只有发送这个hash运算的后果进行比照即可。 当然,在HTTP中,提供了一个ETags header,这header能够看做是资源的惟一标记,用来在客户端和服务器端进行校验。这样客户端就能够申请一个If-None-Match,让服务器判断该资源是否match。这种判断被称为强校验。 还有一种弱校验的形式,如果响应中带有Last-Modified,则客户端能够申请一个If-Modified-Since,来向服务器询问该文件是否产生了变动。 对于服务器端来说,它能够抉择是否进行文件的校验,如果不进行校验,则能够间接返回一个200 OK状态码,并间接返回资源。如果进行校验,则返回一个304 Not Modified,示意客户端能够持续应用缓存的资源,同时还可返回一些其余的header字段,比方更新缓存的过期工夫等。 ...

September 1, 2021 · 1 min · jiezi

关于http:是的你没看错HTTP3来了

简介很多小伙伴可能还沉迷在HTTP1.1的世界无法自拔,然而时代的洪流曾经率领咱们来到了HTTP3的世界了。是的,你在桥上看风光,而桥边的房子上有人正在看你。 为了不被时代所摈弃,明天给大家解说一下HTTP3的新个性。 HTTP成长介绍HTTP的全名叫做超文本传输协定,是万维网所基于的应用层传输协定。最后的版本是HTTP 0.9,是在80年的前期产生的,前面在1996年降级到了1.0. 然而HTTP1.0满足不了日益增长的物质文化需要和对美好世界的向往。所以在1997年呈现了HTTP1.1,随后到2014年,HTTP1.1都始终都在更新。 而后到了2015年,为了适应疾速发送的web利用和古代浏览器的需要,在Google的SPDY我的项目根底上倒退出了新的HTTP2协定。 又过了4年,在2019年,Google又开发出了一个新的协定规范QUIC协定,它就是HTTP3的基石,其目标是为了进步用户与网站和API交互的速度和安全性。 不同HTTP协定解决的问题不同HTTP协定解决的问题也是不同的,HTTP1.1有什么问题呢? 因为HTTP1.1一个连贯中数据是程序传输的,所以会有Head-of-line Blocking的问题,如果后面是一个大的数据包,则会导致后续数据包的阻塞。HTTP1.1无奈对申请头和cookie进行压缩,所以传输效率会比拟低。为了保障缓冲区不会溢出,HTTP1.1有一个TCP慢启动的性能,作为拥塞控制措施,协定重复探测网络以计算可用容量,然而这样就会导致屡次数据的传输,从而导致音讯的延时。对于HTTP2来说,它应用二进制进行音讯传输,并且将音讯拆分成一个个的stream,在stream中又蕴含了多个frame,容许资源通过多路复用应用同一个连贯发送,解决了行头阻塞的问题,并且还反对数据包的优先级和服务器推送。 然而HTTP2的服务器推送会导致应用程序变得复杂,TCP级别的头阻塞的问题在数据包失落并且必须从新以正确的程序从新发送时,依然可能产生。 要留神,HTTP/2是HTTP/1.1的扩大,而不是它的替代品。 应用程序语义放弃不变,具备雷同的HTTP办法、状态代码、URI和标头字段。 所以HTTP/2能够被用在任何应用HTTP/1.1的中央。 HTTP/2在客户端和服务器之间应用单个TCP连贯,该连贯在交互期间放弃关上状态。 尽管HTTP/2反对并发,然而过多的并发会导致HTTP/2服务器接管到大批量的申请,从而导致申请超时。 HTTP3和QUICHTTP/3的指标是通过解决HTTP/2的传输相干问题,在所有模式的设施上提供疾速、牢靠和平安的Web连贯。为此,它应用了一种不同的传输层网络协议,称为QUIC,该协定最后由Google开发的。 感叹一下,尽管最近中国在零碎的利用方面有了肯定的提高,然而看看这些底层的协定,还都是外国人搞进去的。HTTP/2和HTTP/3的基本区别在于,HTTP/2底层应用的是TCP协定,而HTTP/3应用的是QUIC,而QUIC的底层应用的是UDP协定。 咱们看一下HTTP/2和HTTP/3的协定栈比照: TCP协定次要保障服务的可靠性和有序交付,然而TCP须要同握手来建设连贯,这样做是为了确保客户端和服务器都存在并且他们违心并且可能替换数据。然而,它也须要一个残缺的网络往返能力实现,而后能力在连贯上实现任何其余操作。 如果客户端和服务器端相距比拟远,那么就须要破费较多的工夫来进行连贯。 咱们晓得UDP是无连贯的,所以它要比TCP简略很多。它不须要TCP这种建设屡次连贯的步骤,只须要发送数据包进来就够了。 所以应用QUIC的长处就在于缩小了零碎的延时,实用于能够容忍一些数据丢包的状况,比方在线游戏、广告竞价、在线视频、实时流等中央。 另外因为UDP反对播送,所以HTTP3还实用于播送利用中,如准确工夫协定和路由信息协定等。 另外HTTP3还能够用在物联网、大数据和VR等方面。 既然HTTP3应用的是QUIC协定,那么QUIC到底是什么呢? 通常来说QUIC是一种通用传输协定,与TCP十分类似。为什么要打造一套新的协定呢?这是因为现有的TCP协定扩大起来十分艰难,因为曾经有太多太多的设施应用了各种不同的TCP协定的版本,如果想间接在现有的TCP协定上进行扩大十分艰难,因为须要给这么多台设施进行降级简直是不可能实现的工作。 所以QUIC在抉择在UDP协定之上进行构建。QUIC应用UDP,次要是因为心愿能让HTTP/3更容易部署,因为它曾经被互联网上的所有设施所知并已实现. QUIC实际上就是在UDP根底上重写了TCP的性能,然而又比TCP更加智能,更高效的实现了TCP的外围性能。 接下来咱们看下QUIC具体有哪些特色。 TLS1.3TLS次要用来保障客户端和服务器端在数据传输过程的数据安全性,能够对明文数据进行加密传输。TLS1.3是TLS协定的最新版本,在旧的版本如TLS1.2中,客户端和服务器端的握手至多须要两次网络往返,然而在TLS1.3中,将其缩小到只有一次往返。 尽管在HTTP/2中是反对无加密传输模式,然而默认状况下所有的古代浏览器都不反对这种模式,所以HTTP/2必须配合HTTPS一起应用。久远看来HTTPS必定是将来的趋势,所以在QUIC中,间接就应用了TLS 1.3协定。QUIC自身就封装了TLS1.3。 这样做的益处就是QUIC没方法运行明文,所以更加的平安。并且QUIC内置了加密协议,将传输和加密握手合二为一,节俭了往返。 因为QUIC是全程加密的,所以对于某些ISP和两头网络来说,无奈再对网络数据进行剖析和统计,所以可能会限度它的应用。并且因为QUIC是独自对每个数据包进行加密的,在高并发的状况下,可能会造成性能问题。 解决HoL阻塞传统的HTTP1.1和HTTP2底层协定是TCP,尽管HTTP2在应用层能够将不同文件的数据拆分成一个个的stream放在同一个连贯中进行传输。然而对于TCP自身来说,它并不知道这些stream属于不同的文件,它会将其当成同一个文件。所以如果发送数据丢包的状况,TCP会从新发送所有的文件包。从而导致HOL阻塞的问题。 而QUIC更加细粒度一点,它能够在每个流的根底上执行丢包检测和复原逻辑。从而只会重发失败的流,而不是整个文件。 连贯的迁徙在TCP中,如果我想要建设客户端和服务器端的连贯,须要晓得这4个元素:客户端IP地址 + 客户端端口 + 服务器IP地址 + 服务器端口。 如果这4个元素中有一个发送了变动,则须要从新建设TCP连贯。并且须要依据应用程序级协定,重新启动过程中的操作。 比方你正在下载一个大的文件,然而网络地址忽然产生了变动,则可能须要从新申请该文件。 为了解决这个问题,QUIC引入了一个名为连贯标识符(CID)的概念 。 每个连贯都在上述4个元素中额定调配一个编号,用于标记客户端和服务器端的惟一连贯。 因为这个CID是由QUIC定义的,所以不会随着网络迁徙的变动而变动。从而不须要新的握手,这种状况被称为连贯迁徙 。 总结好了,明天的HTTP/3和QUIC就介绍到这里,尽管咱们没有波及到底层的更多细节,然而置信大家应该都听得明确了,再总结一下,QUIC实际上行就是在UDP协定之上,再造了一个更加高级无效的TCP协定。 本文已收录于 http://www.flydean.com/03-http3/ 最艰深的解读,最粗浅的干货,最简洁的教程,泛滥你不晓得的小技巧等你来发现! 欢送关注我的公众号:「程序那些事」,懂技术,更懂你!

August 27, 2021 · 1 min · jiezi

关于http:HTTP协议之HTTP11和HTTP2

简介HTTP的全称是Hypertext Transfer Protocol,是在1989年World Wide Web倒退起来之后呈现的标准协议,用来在WWW上传输数据。HTTP/1.1是1997年在原始的HTTP协定根底上进行的补充和优化。 到了2015年,为了适应疾速发送的web利用和古代浏览器的需要,倒退出了新的HTTP/2协定,次要在手机浏览器、延时解决、图像处理和视频解决方面进行了优化。 基本上所有的古代浏览器都反对HTTP/2协定了,然而还有很多应用程序应用的是老的HTTP/1.1协定,本文将会介绍HTTP/1.1和HTTP/2的不同之处。 HTTP/1.1HTTP 1.0 是由Timothy Berners-Lee在1989年作为World Wide Web的标准协议公布的。通常应用HTTP办法如:GET或者POST,以TEXT文本的模式在客户端和服务器端进行音讯传输。 咱们能够应用post man很不便的进行HTTP申请,如下所示: GET /index.html HTTP/1.1Host: www.flydean.com客户端通过GET申请,申请服务器端的/index.html页面,应用的协定是HTTP/1.1,服务器端收到该申请之后,会将相应以文本的模式返回给客户端。 HTTP协定是对底层的TCP/IP协定的封装,因为咱们不须要交接具体的报文拆分和封装的底层细节,只须要关注于具体的业务逻辑即可,十分的不便。 HTTP/2HTTP/2是从SPDY协定倒退进去的,它的发起者是Google,最后是为了在web交互中引入压缩、多路复用等新的技术,最终在2015年被作为HTTP/2协定的一部分。 之前咱们讲到HTTP/1.1是以文本的模式进行传输的,这样的毛病就是数据占用的空间比拟大,相较于HTTP/1.1来说HTTP/2应用的是二进制进行传输的,应用二进制对音讯进行封装,同时保留了HTTP的语义,比方办法,头等。 这种二进制的封装对应用层是无感知的,对于利用来说,还是依照罕用的办法来创立HTTP申请,将其封装成二进制的工作是由HTTP/2来实现的。 传输模式比照在HTTP1.0中,每当客户端向服务器端申请页面的时候,往往返回的不是一个残缺的页面,而是这个页面还须要的额定的资源链接信息,因为残缺的页面须要所有的资源都下载结束之后能力展现,所以在HTTP1.0中,客户端须要中断以后的连贯,而后从新建设新的连贯去申请资源。这会额定消耗多余的资源和工夫。 在HTTP1.1中,引入了长久连贯和管道的概念,这样不必每次申请都去从新开启和新建连贯,HTTP默认底层的TCP连贯是open的,除非手动通知它要去敞开。在这种状况下,客户端能够应用同一个连贯去和server进行交互,从而极大的晋升HTTP的效率。 尽管在HTTP1.1中能够应用同一个连贯进行数据传输了,然而对于这个连贯来说,其中的申请是一一响应的,他们是有程序的。如果最后面的申请被阻塞了,前面的申请也得不到响应。这种状况被称为head-of-line (HOL) blocking。 为了解决这个问题,能够在client和server端建设多个连贯,这样就能够利用多个connection并行进行数据的传输,从而晋升传输效率。 然而这样的毛病就是新建连贯会耗费太多的资源,并且客户端和服务器端的连贯个数也是无限的。 所以HTTP/2呈现了。 在 HTTP/2 中,数据以二进制的的格局进行传输,其自身是将原始申请的切分成为更小的信息包,从而大大增加了数据传输的灵活性。 HTTP1.1须要建设多个TCP连贯从而解决并行传输的问题,然而在HTTP/2 中只须要建设一个连贯就够了。在这个连贯中能够传输多个数据流,每个数据流中又蕴含多个message包,每个message又被切分为多个数据frame。 这些数据frame能够在传输期间替换地位,而后在接管的另一端从新组装。 交织的申请和响应能够并行运行,从而不会阻塞它们背地的音讯,这个过程被称为多路复用。 多路复用的机制使得一个音讯不必期待另外一个音讯发送实现,从而解决了HTTP/1.1 中的队头阻塞问题。 这也意味着服务器和客户端能够发送并发申请和响应,从而实现更好的管制和更无效的连贯治理。 多路复用尽管构建了多个音讯流,然而只占用了一个TCP连贯,从而缩小整个网络的内存和解决占用空间,失去更好的网络和带宽利用率,从而升高整体经营老本。 单个TCP连贯还进步了HTTPS协定的性能,因为客户端和服务器能够为多个申请/响应重用雷同的平安会话。 在HTTPS中,在TLS或SSL握手期间,单方在整个会话期间应用单个密钥。 如果连贯中断从新开始新的会话,则须要新生成的密钥进行进一步通信。 因而,保护单个连贯能够大大减少HTTPS所需的资源。 请留神,只管HTTP/2标准并未强制要求应用TLS,但许多次要浏览器仅反对带有HTTPS的HTTP/2。流优先级尽管HTTP/2解决了多个数据frame通常传输的问题,然而对于同一个资源来说,必须要等到的所有的数据frame都承受结束之后能力展现,如果咱们想优先展现某个资源该怎么做呢? HTTP/2提供了流优先级的解决方案。 在客户端向服务器端发送音讯的时候,音讯会以流的模式在连贯中传输,这些流能够调配1到256之间的权重来确定其申请的响应的优先级。 数字越大示意优先级越高。 除此之外,客户端还通过指定它所依赖的流的ID来阐明每个流对另一个流的依赖关系。 如果省略父标识符,则认为该流依赖于根流。 服务器会应用流中的ID构建一个依赖树,从而确定其相应的程序。 应用程序的开发人员能够依据须要自行设置申请的优先级,比方在网页中提供低分辨率的缩略图的同时提供低优先级的高分辨率的图像。通过为资源分配不同的优先级,开发人员可能更好地管制网页渲染。 缓冲区溢出解决不论是哪种协定,客户端和服务器端在接收数据的时候都有一个缓冲区来长期存储临时解决不了的数据,然而缓冲区的大小是有限度的,所以有可能会呈现缓冲区溢出的状况,比方客户端向服务器端上传一个大的图片,就有可能导致服务器端的缓冲区溢出,从而导致一些额定的数据包失落。 为了防止缓冲区溢出,各个HTTP协定都提供了肯定的解决办法。 在HTTP1.1中,流量的管制依赖的是底层TCP协定,在客户端和服务器端建设连贯的时候,会应用零碎默认的设置来建设缓冲区。在数据进行通信的时候,会通知对方它的接管窗口的大小,这个接管窗口就是缓冲区中残余的可用空间。如果接管窗口大小为零,则阐明接管方缓冲区已满,则发送方将不再发送数据,直到客户端革除其外部缓冲区,而后申请复原数据传输。 因为HTTP1.1应用多个TCP连贯,多以能够对每一个TCP连贯进行独自的流量管制。然而HTTP2应用的是多路复用的模式,所以它的流量管制形式和HTTP1.1是不同的。 HTTP2是通过客户端和服务器端的利用中进行缓冲区大小音讯的传输,是通过在应用层层面管制数据流,所以各个利用端能够自行管制流量的大小,从而实现更高的连贯效率。 HTTP/2提供了更具体的管制级别,从而开启了更大优化的可能性。 预测资源申请在一个典型的web利用中,当客户端动员一个GET申请到服务器端的时候,通常客户端会发现所以须要的不止一个资源,还可能蕴含了CSS或者其余JS等资源。然而客户端只有在首次获取到服务器端的响应时候能力真正确认到底须要哪些资源。而后须要额定申请这些资源以实现整个申请。然而这些额定的申请最终会减少连贯加载工夫。 那么有没有可能服务器在客户端申请之前将资源发送给客户端呢?咱们看下HTTP1.1和HTTP2是怎么做的。 在HTTP1.1中,次要应用的资源内联的形式,比方将客户端所须要的CSS或者JS资源蕴含在服务器最后发送的HTML文档中,也就是做内联操作,从而缩小客户端必须发送的申请总数。 然而这样的解决方案也有问题。因为一般来说资源内联个别是针对较小的资源来说的,如果资源文件太大的话,就会大大的减少HTML文件的大小,从而对消缩小连贯晋升的速度劣势。 另外如果资源被放在HTML中,那么客户端就没有可能对这些资源进行缓存,从而影响整体的效率。 在HTTP/2中应用的是服务器推送。因为HTTP/2在同一个连贯中能够发送多个stream,所以服务器能够将资源与申请的HTML页面一起发送到客户端,在客户端申请之前提供资源。 这个过程被称为服务器推送。 这样就能够在不必新开连贯的同时,实现HTML文档和资源的拆散和同时推送。 然而在HTTP/2中,服务器推送是由应用程序来管制的,所以管制起来会比较复杂。咱们会在后续的文章中具体解说HTTP/2的服务器推送。 ...

August 26, 2021 · 1 min · jiezi

关于http:TLCP的过去现在与未来

TLCP的过来、当初与将来1 起源 Internet和WWW的呈现,掀起了信息化浪潮而且经久不衰。如果事实世界一样,有价值的数据和信息,引来了了各种攻打和威逼,信息安全变得越来越重要。作为互联网基石技术之一HTTP,其平安的重要性显而易见,HTTPS正是为解决HTTP平安而提出平安协定和标准。 HTTPS全称为HTTP over SSL,而SSL正是由晚期WWW霸主Netscape提出的平安协定,其中SSLv3.0从1996年提出,并成为事实上的平安规范长达10年之久。起初IETF以SSLv3.0为根底,提出了新的TLS标准,版本由1.0倒退到当初的1.3,代替SSL成为HTTPS的次要平安协定根底。 HTTPS是信息安全的一个最佳榜样之一。仅仅是简略的在地址栏减少一个字母“S”,在用户简直无感的状况下,就近乎完满地解决了HTTP的平安问题,包含数据传输的平安问题和网站身份的真实性问题。岂但用户无感,而且对Web开发而言也简直是通明的。 为了成就这个最佳榜样,则是数学家、明码学家、平安专家、CA厂商、Web浏览器厂商、Web服务器厂商以及一些列的相干平安厂商(比方明码减速芯片厂商和明码加速卡厂商)通力合作的后果。能够说,为了以一种极简和极致的形式解决HTTP的平安,整个学界和业界使出了洪荒之力。 图1 TLS倒退示意图(摘自ttp://www.bewindoweb.com/271.html | 三颗豆子) 2 过来 明码算法是平安协定的外围和根底,因而为了确保国家信息安全平安,国内的HTTPS和SSLVPN等协定和产品,就不能间接采纳国内TLS规范及其明码算法,因而须要一个采纳国产商用明码算法的类SSL传输层平安协定,即国密版类SSL协定,简称国密SSL。 最早国密SSL是作为明码行业标准存在的,且不是一个独立的协定规范,而是定义在SSVLPN产品的技术规范里,即《GM/T 0024-2014 SL VPN技术规范》。对应的国密HTTPS就是基于国密SSL的平安HTTP。 国密SSL参照了TLSv1.0标准,整个协定握手和加密国产基本一致,但和TLSv1.0并不兼容。次要的不同体现在三个中央: 1) 协定的版本号不同,握手和加密协议细节不同; 2) 协定采纳的次要是SM2/SM3/SM4算法,不同于TLS采纳的国内明码算法; 3) 采纳的是SM2双证书体系。 国密SSL是一个根底的外围平安协定,因为和TLS不兼容,因而国密HTTPS大规模遍及碰到了一系列苦难。首选是国内支流浏览器不反对,其实是国内支流Web服务器不反对,再就是国内支流的CA和证书体系也不反对。 随之国内信息安全的一直倒退和各方的致力,国密SSL和国密HTTPS曾经由了长足的倒退和提高,能够说相干产业链曾经达到了能够初步代替TLS和国内HTTPS的程度。相干的国密浏览器、国密SSL网关、国密中间件等曾经广泛应用。 图2 国密SSL行标(摘自《GM/T 0024-2014》封面) 3 当初 国家更加器重网络安全和信息安全,《明码法》相继失效。相应地,国密SSL的从明码行业标准回升到了独立的国家标准,这就是《GB/T 38636-2020 信息安全技术 传输层明码协定(TLCP)》。《GB/T 38636-2020》根本兼容《GM/T 0024-2014》,次要变动如下: 1)减少了GCM的明码套件,ECC_SM4_GCM_SM3和ECDHE_SM4_GCM_SM3; 2)去掉了行标《GM/T 0024-2014》中的波及SM1和RSA的明码套件。 国内对TLCP的跟进很迅速。国密浏览器端,360平安浏览器在2020年反对了TLCP,奇安信可信浏览器在2021年也反对了TLCP。国密服务器和网关端,也踊跃跟进了TLCP的反对,比方https://www.gmssl.cn实现了nginx、apache、tomcat、netty、springboot的TLCP反对。 国密SSL回升为国标意义重大,为等级爱护和明码评测提供了更好的规范撑持,同时也为产品网络和行业遍及指明了指标和方向。 图3 国密SSL国标(摘自《GB/T 38636-2020》封面) 4将来 从目前的寰球竞争环境和国家的意志来看,我国鼎力推广基于中国国家标准的网络安全和信息案规范是必然趋势。TLCP刚刚成为国家标准,并且TLCP相干的标准都曾经国标化或将要国标化,因而TLCP势必在今后较长的一段时间内是作为支流标准存在的,其权威性不容置疑。 国内标准方面,IETF呈现了一个RFC8998(https://www.ietf.org/rfc/rfc8...),减少了国密算法套TLS_SM4_GCM_SM3和TLS_SM4_CCM_SM3 ,且基于SM2单证书实现。须要留神的是RFC8998并不是Standards Track,而只是一个informational文档。 RFC8998是一个无益的尝试,但在国内上不太可能被chrome和edge等支流国内浏览器反对,并且还得国内支流CA也得反对SM2证书,而在国内又不兼容TLCP国家标准,其前景并不明朗,甚至说是一个难堪的存在。 随着利用场景的拓展,以及技术的一直迭代,在更远的未来,TLCP自身也肯定会排汇包含TLS1.3在内的各种先进思维和技术,持续推出TLCP的新的版本。同时比拟明确的是,TLCP仍然会走中国特色的自有规范之路,国产明码产业也会有更光明的将来。 ...

August 23, 2021 · 1 min · jiezi

关于http:转RPC和HTTP请求

HTTP和RPC不是对等的概念。 RPC是一个残缺的近程调用计划,它包含了:接口标准+序列化反序列化标准+通信协议等。而HTTP只是一个通信协议,工作在OSI的第七层, 不是一个残缺的近程调用计划。 所以,要想答复这个问题,应该拉平为一个对等的概念。例如,HTTP+Restful标准+序列化与反序列化, 形成一个残缺的近程调用计划,再和RPC进行比拟。而单纯的HTTP,只是一个通信协议,天然无奈和RPC比拟。 这就像是牛(HTTP)不能和马车(RPC)比拟。要想比拟,就应该将牛补齐为牛车,而后和马车比拟。感觉题主应该是问:基于HTTP的近程调用计划(蕴含了接口标准、序列化反序列化等) 和 应用RPC的近程调用计划 有什么不同。有了前者,为什么还要有后者。 上面咱们来解答这个问题。 咱们先介绍基于HTTP的近程调用计划。 HTTP+Restful,其劣势很大。它可读性好,且能够失去防火墙的反对、跨语言的反对。而且,在近几年的报告中,Restful大有超过RPC的趋势。 然而应用该计划也有其毛病,这是与其长处绝对应的: 首先是有用信息占比少,毕竟HTTP工作在第七层,蕴含了大量的HTTP头等信息。其次是效率低,还是因为第七层的缘故,必须依照HTTP协定进行层层封装。还有,其可读性仿佛没有必要,因为咱们能够引入网关减少可读性。此外,应用HTTP协定调用近程办法比较复杂,要封装各种参数名和参数值。而RPC则与HTTP互补,咱们具体介绍下。 看完这篇答复,能让你对RPC的产生、原理、实现代码都有着清晰的理解。这样,也能在业务零碎中,在RPC和HTTP之间做好抉择。 但须要再说一句,不是说RPC好,也不是说HTTP好,两者各有千秋,还在比拼中。 要问我站谁?我依据业务场景,灵便站位…… 评论区产生了一些争执,我在这里对立进行阐明。争执次要产生在两点: 1、HTTP和RPC同一级别,还是被RPC蕴含?2、Restful也属于RPC么? 对于以上两点,我画图来一一阐明。 上图是一个比拟残缺的关系图,这时咱们发现HTTP(图中蓝色框)呈现了两次。其中一个是和RPC并列的,都是跨利用调用办法的解决方案;另一个则是被RPC蕴含的,是RPC通信过程的可选协定之一。 因而,第一个问题的答案是都对。看指的是哪一个蓝色框。从题主的发问看,既然题主在纠结这两者,应该是指与RPC并列的蓝色框。所以,题主所述的HTTP申请应该是指:基于HTTP的近程调用计划(蕴含了接口标准、序列化反序列化等)。这样,它才是和RPC同一级别的概念。 第二个问题是在问近程过程调用(红色框)是不是蕴含了Restful(黄色框),这种了解的关键在于对RPC的了解。 RPC字面了解是近程过程调用,即在一个利用中调用另一个利用的办法。那Restful是满足的,通过它能够实现在一个利用中调用另一个利用的办法。 然而,上述了解使得RPC的定义过于宽泛。RPC通常特指在一个利用中调用另一个利用的接口而实现的近程调用,即红色框所指的范畴。这样,RPC是不蕴含Restful的。 因而,第二个问题的答案是Restful不属于RPC,除非对RPC有着非常规的宽泛了解。 RPC的英文全称是Remote Procedure Call,翻译为中文叫“近程过程调用”。其中稍显艰涩的其实就是“过程”,过程其实就是办法。所以,能够把RPC了解为“近程办法调用”。 要理解近程过程调用,那先了解过程调用。非常简单,如下图,就是调用一个办法。这太常见了,不多解释。 而在分布式系统中,因为每个服务的边界都很小,很有可能调用别的服务提供的办法。这就呈现了服务A调用服务B中办法的需要,即近程过程调用。 要想让服务A调用服务B中的办法,最先想到的就是通过HTTP申请实现。是的,这是很常见的,例如服务B裸露Restful接口,而后让服务A调用它的接口。基于Restful的调用形式因为可读性好(服务B暴露出的是Restful接口,可读性当然好)而且HTTP申请能够通过各种防火墙,因而十分不错。 然而,如后面所述,基于Restful的近程过程调用有着显著的毛病,次要是效率低、封装调用简单。当存在大量的服务间调用时,这些毛病变得更为突出。 服务A调用服务B的过程是利用间的外部过程,就义可读性晋升效率、易用性是可取的。基于这种思路,RPC产生了。 通常,RPC要求在调用方中搁置被调用的办法的接口。调用方只有调用了这些接口,就相当于调用了被调用方的理论办法,非常易用。于是,调用方能够像调用外部接口一样调用近程的办法,而不必封装参数名和参数值等操作。 那要想实现这个过程该怎么办呢?别急,咱们一步一步来。 首先,调用方调用的是接口,必须得为接口结构一个假的实现。显然,要应用动静代理。这样,调用方的调用就被动静代理接管到了。 第二,动静代理接管到调用后,应该想方法调用近程的理论实现。这包含上面几步:辨认具体要调用的近程办法的IP、端口将调用办法的入参进行序列化通过通信将申请发送到近程的办法中 这样,近程的服务就接管到了调用方的申请。它应该: 反序列化各个调用参数定位到理论要调用的办法,而后输出参数,执行办法依照调用的门路返回调用的后果整个过程如下所示。 这样,RPC操作就实现了。 调用方调用外部的一个办法,然而被RPC框架移花接木为近程的一个办法。之间的通信数据可读性不须要好,只须要RPC框架能读懂即可,因而效率能够更高。通常应用UDP或者TCP作为通信协定,当然也能够应用HTTP。例如上面的示例中,为了保障实现最简略,就用了HTTP进行通信。 讲到这里,RPC的产生起因、原理应该分明了。为了让大家真的明确,我写了一个真的是最最简略的RPC实现。把它放到了:https://github.com/yeecode/Ea...github.com/yeecode/EasyRPC 它蕴含一个客户端,一个服务端。客户端只有调用本身外部的接口,就通过这个小的RPC实现调用到了服务端的办法。 上面是客户端的代码,看着类有点多,其实代码不长。其中的RPC代码实现实现动静代理、近程调用参数序列化、近程调用发动、近程调用后果反序列化的工作。 RPC客户端上面是服务端的代码,代码更少,实现近程调用接管、调用参数反序列化、调用理论触发、调用后果序列化的工作。 这样,一个RPC小框架就做完了,并不简单。所以,不要被RPC吓到,它就是让一个利用调用另一个利用中办法的一种实现形式。与调用近程接口区别不大,条条大路通罗马。 再说一次,不是说RPC好,也不是说HTTP好,两者各有千秋。实质上,两者是可读性和效率之间的抉择,通用性和易用性之间的抉择。最终谁能倒退更好,很难说。 要问我站谁?我依据业务场景,灵便站位…… 如果还有什么没说分明,能够留言探讨。为什么我晓得RPC的实现细节,因为我读了dubbo的源码,哈哈 作者:易哥链接:https://www.zhihu.com/questio...起源:知乎著作权归作者所有。商业转载请分割作者取得受权,非商业转载请注明出处。

August 20, 2021 · 1 min · jiezi

关于http:在线HTTPHTTPS协议GETPOSTRESTful接口测试

在线HTTP/HTTPS协定GET,POST,RESTful接口测试在线HTTP/HTTPS协定GET,POST,RESTful接口测试 可能在线模仿http协定测试Post和get申请,还蕴含DELETE申请、PUT申请、PATCH申请、HEAD和OPTIONS申请,并且能够自定义Header和Cookie信息,反对设置各项参数,并且提供测试返回值。https://tooltt.com/apitest/

August 12, 2021 · 1 min · jiezi

关于http:Restful接口规范

REST接口标准1、动作GET (SELECT):从服务器检索特定资源,或资源列表。POST (CREATE):在服务器上创立一个新的资源。PUT (UPDATE):更新服务器上的资源,提供整个资源。PATCH (UPDATE):更新服务器上的资源,仅提供更改的属性。DELETE (DELETE):从服务器删除资源。首先是四个半种动作:post、delete、put/patch、get因为put/patch只能算作一类,所以将patch归为半个。另外还有有两个较少出名的HTTP动词:HEAD - 检索无关资源的元数据,例如数据的哈希或上次更新工夫。OPTIONS - 检索对于客户端被容许对资源做什么的信息。2、门路(接口命名)门路又称"起点"(endpoint),示意API的具体网址。在RESTful架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词,而且所用的名词往往与数据库的表格名对应。一般来说,数据库中的表都是同种记录的"汇合"(collection),所以API中的名词也应该应用复数。举例来说,有一个API提供动物园(zoo)的信息,还包含各种动物和雇员的信息,则它的门路应该设计成上面这样。接口尽量应用名词,禁止应用动词,上面是一些例子。 GET /zoos:列出所有动物园POST /zoos:新建一个动物园GET /zoos/ID:获取某个指定动物园的信息PUT /zoos/ID:更新某个指定动物园的信息(提供该动物园的全副信息)PATCH /zoos/ID:更新某个指定动物园的信息(提供该动物园的局部信息)DELETE /zoos/ID:删除某个动物园GET /zoos/ID/animals:列出某个指定动物园的所有动物DELETE /zoos/ID/animals/ID:删除某个指定动物园的指定动物反例:/getAllCars/createNewCar/deleteAllRedCars再比方,某个URI是/posts/show/1,其中show是动词,这个URI就设计错了,正确的写法应该是/posts/1,而后用GET办法示意show。如果某些动作是HTTP动词示意不了的,你就应该把动作做成一种资源。比方网上汇款,从账户1向账户2汇款500元,谬误的URI是:POST /accounts/1/transfer/500/to/2正确的写法是把动词transfer改成名词transaction,资源不能是动词,然而能够是一种服务:POST /transaction HTTP/1.1 Host: 127.0.0.1 from=1&to=2&amount=500.00 理清资源的层次结构,比方业务针对的范畴是学校,那么学校会是一级资源(/school),老师(/school/teachers),学生(/school/students)就是二级资源。 3、版本(Versioning)应该将API的版本号放入URL。如:https://api.example.com/v1/另一种做法是,将版本号放在HTTP头信息中,但不如放入URL不便和直观。Github采纳这种做法。4、过滤信息(Filtering)如果记录数量很多,服务器不可能都将它们返回给用户。API应该提供参数,过滤返回后果。上面是一些常见的参数。?limit=10:指定返回记录的数量?offset=10:指定返回记录的开始地位。?page_number=2&page_size=100:指定第几页,以及每页的记录数。?sortby=name&order=asc:指定返回后果依照哪个属性排序,以及排序程序。?animal_type_id=1:指定筛选条件参数的设计容许存在冗余,即容许API门路和URL参数偶然有反复。比方,GET /zoo/ID/animals 与 GET /animals?zoo_id=ID 的含意是雷同的。5、状态码(Status Codes)状态码范畴 1xx 信息,申请收到,持续解决。范畴保留用于底层HTTP的货色,你很可能永远也用不到。2xx 胜利,行为被胜利地承受、了解和驳回3xx 重定向,为了实现申请,必须进一步执行的动作4xx 客户端谬误,申请蕴含语法错误或者申请无奈实现。范畴保留用于响应客户端做出的谬误,例如。他们提供不良数据或要求不存在的货色。这些申请应该是幂等的,而不是更改服务器的状态。5xx 范畴的状态码是保留给服务器端谬误用的。这些谬误经常是从底层的函数抛出来的,甚至开发人员也通常没法解决,发送这类状态码的目标以确保客户端取得某种响应。当收到5xx响应时,客户端不可能晓得服务器的状态,所以这类状态码是要尽可能的防止。服务器向用户返回的状态码和提示信息,常见的有以下一些(方括号中是该状态码对应的HTTP动词)。 200 OK - [GET]:服务器胜利返回用户申请的数据,该操作是幂等的(Idempotent)。201 CREATED - [POST/PUT/PATCH]:用户新建或批改数据胜利。202 Accepted - [*]:示意一个申请曾经进入后盾排队(异步工作)204 NO CONTENT - [DELETE]:用户删除数据胜利。400 INVALID REQUEST - [POST/PUT/PATCH]:用户收回的申请有谬误,服务器没有进行新建或批改数据的操作,该操作是幂等的。401 Unauthorized - [*]:示意用户没有权限(令牌、用户名、明码谬误)。403 Forbidden - [*] 示意用户失去受权(与401谬误绝对),然而拜访是被禁止的。404 NOT FOUND - [*]:用户收回的申请针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。406 Not Acceptable - [GET]:用户申请的格局不可得(比方用户申请JSON格局,然而只有XML格局)。410 Gone -[GET]:用户申请的资源被永恒删除,且不会再失去的。422 Unprocesable entity - [POST/PUT/PATCH] 当创立一个对象时,产生一个验证谬误。500 INTERNAL SERVER ERROR - [*]:服务器产生谬误,用户将无奈判断收回的申请是否胜利。502 网关谬误503 Service Unavailable504 网关超时

July 26, 2021 · 1 min · jiezi

关于http:如何永久使用Lets-Encrypt颁发的免费SSL证书并配置nginx将网站由不安全HTTP升级至安全的HTTPS

如果你的站点对HTTPS有强需要——出于平安须要或者须要做微信小程序(要求必须HTTPS),同时你又不想一年花个大几千购买付费SSL证书,那么应用Let's Encrypt颁发的收费SSL证书可能就是一个很棒的抉择。上面来说说如何装置应用Let's Encrypt,并配置nginx,达到主动续签永恒收费。 一、筹备工作装置前,你须要凋谢443端口 # 查看凋谢端口firewall-cmd --zone=public --list-ports #80/tcp 3306/tcp#没有443时,增加443端口firewall-cmd --zone=public --add-port=443/tcp --permanent#重启能力失效,增加完重启firewall-cmd --reload#再次查看凋谢端口,发现曾经有了443,筹备工作就实现了firewall-cmd --zone=public --list-ports #80/tcp 3306/tcp 443/tcp二、装置配置1.装置cerbot。cerbot是let's Encrypt举荐的治理客户端,能够主动续签 yum install certbot -y2.生成证书 2.1不分明本人网站根目录时这样生成 #先停用nginxsudo nignx -s stop#再生成证书,须要依据本人的域名批改certbot certonly --standalone -d domain.com -d www.domian.com2.2晓得网站根目录时这样生成 #须要依据本人的域名批改,这里的根目录是 /var/www/domaincertbot certonly --webroot -w /var/www/domain -d domain.com -d www.domain.com不出意外,证书就生成了,个别会放在 /etc/letsencrypt/live 目录内 3.配置nginx # 将listen 80局部按本人的域名做如下批改,去掉location / 及 location /api/ 等局部 server { listen 80; listen [::]:80; server_name www.domain.com domain.com; add_header Strict-Transport-Security max-age=15768000; return 301 https://$server_name$request_uri; #重定向到https }#减少一个listen 443,按本人域名做如下批改。将原listen 80内的 location / 及 location /api/ 等局部copy过去 server { listen 443 ssl http2; server_name www.domain.com domain.com; add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; root /var/www/domain; ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-RC4-SHA:!ECDHE-RSA-RC4-SHA:ECDH-ECDSA-RC4-SHA:ECDH-RSA-RC4-SHA:ECDHE-RSA-AES256-SHA:HIGH:!RC4-SHA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!CBC:!EDH:!kEDH:!PSK:!SRP:!kECDH; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 60m; location / { proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Nginx-Proxy true; proxy_cache_bypass $http_upgrade; proxy_pass http://nuxtapp; #反向代理nuxt } location /api/ { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; } # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; error_page 404 /404.html; location = /404.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }5.重启nginx ...

July 25, 2021 · 1 min · jiezi

关于http:以后打开网页http变成了ipfs你就会知道你错过了什么

IPFS是分布式存储,是由胡安·贝内特于2014年5月提出的胡安毕业于斯坦福大学,在2015年参加了赫赫有名的Y-Combinator孵化较量,怀才不遇,斩获巨额出资基金,同时成立了Protocol Lab协定实验室。 在这之前,咱们先理解一下http是什么?fil咖ipfs554 咱们晓得,HTTP其实就是当初咱们的网址结尾,是指超文本传输协定(HyperText Transfer Protocol)咱们获取信息、传递信息,都得通过服务器,比方 Google有超过100万台服务器!世界最大的芯片制造厂商 Intel 有大概10万台服务器。其余的巨头公司也都不差,都领有本人数量宏大的服务器。 网络 这些服务器始终在机房运行着,如果敞开服务器,你将无法访问下面托管的内容。所以,为了放弃网络能24小时应用,这些服务器也必须24小时的运行。点击下载挖矿app 而且,咱们的所有信息,都记录存储在这些中心化服务器上,所以,只有服务器被攻打或者挟持,那信息就能够被攻击者齐全收集把握,安全性不够。而且在传输效率上也十分的低,用户如果想要获取信息,得先拜访服务器,如果服务器在很远的中央,那传输效率就会升高,而且用户想要获取任何信息,都必须通过服务器。 网络 这里给大家整顿一下目前http存在的一些缺点: 效率低下,服务器老本低廉历史文件保留工夫过短中心化的网络限度了机会网络应用太依赖骨干网安全性较差,用户数据无奈失去保障 所以,有另一种网络传输协定呈现了,IPFS也叫星际文件系统(InterPlanetary File System)他的愿景是超过目前的http。 网络 ipfs,是一种IPFS是点对点的超媒体协定,能够让网络更快、更平安、更凋谢。 IPFS是将内容碎片化,离开存储,并且复制到多个节点存储,当你想要信息时,能够间接抉择就近节点获取。大大提高了传输效率,而且也无需放心因服务器被攻打而使得信息透露或者遗失的状况。 即便有人想获取信息,歹意攻打局部节点,信息也是通过加密,明码只有你本人领有,所以即便攻击者获取到这些信息,他也无奈破解,而且局部节点的信息遗失,并不会造成信息的缺失,因为在其余节点,还存有一样的信息,相当于备了很多份。 依照目前来说,ipfs还无奈取代http,但在当前,置信ipfs可能坐拥一席之地。 你们认为呢? 点击下载挖矿app

July 19, 2021 · 1 min · jiezi

关于http:锁屏面试题百日百刷http必问

锁屏面试题百日百刷,每个工作日保持更新面试题。锁屏面试题app、小程序现已上线,官网地址:https://www.demosoftware.cc/#...。已收录了每日更新的面试题的所有内容,还蕴含特色的解锁屏幕温习面试题、每日编程题目邮件推送等性能。让你在面试中后人一步,吊打面试官!接下来的是今日的面试题: ====什么是http协定?http(Hyper Text Transfer Protocol)协定是对客户端和服务器端之间数据之间实现可靠性的传输文字、图片、音频、视频等超文本数据的标准,格局简称为“超文本传输协定”http协定属于应用层。 ====http申请的申请报文和响应报文的格局?(重点)1)http申请报文:一个HTTP申请报文由申请行(request line)、申请头部(header)、空行和申请数据4个局部组成①申请行:申请行由申请办法字段、URL字段和HTTP协定版本字段3个字段组成,它们用空格分隔。例如,GET /index.html HTTP/1.1。②申请头部:申请头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。申请头部告诉服务器有对于客户端申请的信息,典型的申请头有: User-Agent:产生申请的浏览器类型。 Accept:客户端可辨认的内容类型列表。 Host:申请的主机名,容许多个域名同处一个IP地址,即虚拟主机③空行:最初一个申请头之后是一个空行,发送回车符和换行符,告诉服务器以下不再有申请头。④申请数据:申请数据不在GET办法中应用,而是在POST办法中应用。POST办法实用于须要客户填写表单的场合。与申请数据相干的最常应用的申请头是Content-Type和Content-Length 2)http响应报文:HTTP响应由三个局部组成,别离是:状态行、消息报头、响应注释。①状态行:由协定类型及版本号、状态码、状态码的文字描述组成它们之间用空格分隔,如:HTTP/1.1 200 OK②消息报头:与申请头部格局统一③响应注释:响应返回的次要信息内容 ====http和https的区别?其实HTTPS就是从HTTP加上加密解决(个别是SSL平安通信线路)+认证+完整性爱护区别: https须要拿到ca证书端口不一样,http是80,https443http是超文本传输协定,信息是明文传输,https则是具备安全性的ssl加密传输协定。http和https应用的是齐全不同的连贯形式(http的连贯很简略,是无状态的;HTTPS 协定是由SSL+HTTP协定构建的可进行加密传输、身份认证的网络协议,比http协定平安。)====HTTPS工作原理?一、首先HTTP申请服务端生成证书,客户端对证书的有效期、合法性、域名是否与申请的域名统一、证书的公钥(RSA加密)等进行校验;二、客户端如果校验通过后,就依据证书的公钥的无效, 生成随机数,随机数应用公钥进行加密(RSA加密);三、音讯体产生的后,对它的摘要进行MD5(或者SHA1)算法加密,此时就失去了RSA签名;四、发送给服务端,此时只有服务端(RSA私钥)能解密。五、解密失去的随机数,再用AES加密,作为密钥(此时的密钥只有客户端和服务端晓得)。 ====一次残缺的HTTP申请所经验几个步骤? 建设TCP连贯怎么建设连贯的,看下面的三次捂手Web浏览器向Web服务器发送申请行一旦建设了TCP连贯,Web浏览器就会向Web服务器发送申请命令。例如:GET /sample/hello.jsp HTTP/1.1。Web浏览器发送申请头浏览器发送其申请命令之后,还要以头信息的模式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来告诉服务器,它曾经完结了该头信息的发送。Web服务器应答客户机向服务器发出请求后,服务器会客户机回送应答, HTTP/1.1 200 OK ,应答的第一局部是协定的版本号和应答状态码。Web服务器发送应答头正如客户端会伴随申请发送对于本身的信息一样,服务器也会伴随应答向用户发送对于它本人的数据及被申请的文档。Web服务器向浏览器发送数据 Web服务器向浏览器发送头信息后,它会发送一个空白行来示意头信息的发送到此为完结,接着,它就以Content-Type应答头信息所形容的格局发送用户所申请的理论数据。7.Web服务器敞开TCP连贯====罕用HTTP状态码是怎么分类的,有哪些常见的状态码?(重点)类别:1xx: 批示信息–示意申请已接管,正在解决2xx: 胜利–示意申请已被胜利接管、了解、承受3xx: 重定向–要实现申请必须进行更进一步的操作4xx: 客户端谬误–申请有语法错误或申请无奈实现5xx: 服务器端谬误–服务器未能实现非法的申请常见状态码:200: 申请被失常解决204: 申请被受理但没有资源能够返回206: 客户端只是申请资源的一部分,服务器只对申请的局部资源执行GET办法,相应报文中通过Content-Range指定范畴的资源。301: 永久性重定向302: 长期重定向303: 与302状态码有类似性能,只是它心愿客户端在申请一个URI的时候,能通过GET办法重定向到另一个URI上304: 发送附带条件的申请时,条件不满足时返回,与重定向无关307: 长期重定向,与302相似,只是强制要求应用POST办法400: 申请报文语法有误,服务器无奈辨认401: 申请须要认证403: 申请的对应资源禁止被拜访404: 服务器无奈找到对应资源500: 服务器外部谬误503: 服务器正忙 ====Http协定中有那些申请形式?GET:用于申请拜访曾经被URI(对立资源标识符)辨认的资源,能够通过URL传参给服务器POST:用于传输信息给服务器,次要性能与GET办法相似,但个别举荐应用POST形式。PUT: 传输文件,报文主体中蕴含文件内容,保留到对应URI地位。HEAD:取得报文首部,与GET办法相似,只是不返回报文主体,个别用于验证URI是否无效。PATCH: 客户端向服务器传送的数据取代指定的文档的内容(局部取代)TRACE: 回显客户端申请服务器的原始申请报文,用于"回环"诊断DELETE: 删除文件,与PUT办法相同,删除对应URI地位的文件。OPTIONS: 查问相应URI反对的HTTP办法。 ====GET办法与POST办法的区别?区别一: get重点在从服务器上获取资源,post重点在向服务器发送数据;区别二: Get传输的数据量小,因为受URL长度限度,但效率较高; Post能够传输大量数据,所以上传文件时只能用Post形式;区别三: get是不平安的,因为get申请发送数据是在URL上,是可见的,可能会泄露私密信息,如明码等; post是放在申请数据中的,是平安的 ====http版本的比照?HTTP1.0版本的个性: ==新近1.0的HTTP版本,是一种无状态、无连贯的应用层协定。==HTTP1.0规定浏览器和服务器放弃短暂的连贯,浏览器的每次申请都须要与服务器建设一个TCP连贯,服务器解决实现后立刻断开TCP连贯(无连贯),服务器不跟踪每个客户端也不记录过来的申请(无状态)。 HTTP1.1版本新个性 ==默认长久连贯节俭通信量,只有客户端服务端任意一端没有明确提出断开TCP连贯,就始终放弃连贯,能够发送屡次HTTP申请==管线化,客户端能够同时收回多个HTTP申请,而不必一个个期待响应==断点续传原理 HTTP2.0版本的个性 ==二进制分帧(采纳二进制格局的编码将其封装)==首部压缩(设置了专门的首部压缩设计的HPACK算法。)==流量管制(设置了接管某个数据流的多少字节一些流量管制)==多路复用(能够在共享TCP链接的根底上同时发送申请和响应)==申请优先级(能够通过优化这些帧的交织和传输程序进一步优化性能)==服务器推送(就是服务器能够对一个客户端申请发送多个响应。服务器向客户端推送资源无需客户端明确的申请。(重大更新)) ====什么是cookie和session?cookie是由Web服务器保留在用户浏览器上的文件(key-value格局),能够蕴含用户相干的信息。客户端向服务器发动申请,就提取浏览器中的用户信息由http发送给服务器。session 是浏览器和服务器会话过程中,服务器会调配的一块贮存空间给session。服务器默认为客户浏览器的cookie中设置 sessionid,这个sessionid就和cookie对应,浏览器在向服务器申请过程中传输的cookie 蕴含 sessionid ,服务器依据传输cookie 中的 sessionid 获取出会话中存储的信息,而后确定会话的身份信息。 ...

July 18, 2021 · 1 min · jiezi

关于http:HTTP与HTTPS的区别

超文本传输协定HTTP协定被用于在Web浏览器和网站服务器之间传递信息,HTTP协定以明文形式发送内容,不提供任何形式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就能够间接读懂其中的信息,因而,HTTP协定不适宜传输一些敏感信息,比方:信用卡号、明码等领取信息。 为了解决HTTP协定的这一缺点,须要应用另一种协定:安全套接字层超文本传输协定HTTPS,为了数据传输的平安,HTTPS在HTTP的根底上退出了SSL协定,SSL依附证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。 一、HTTP和HTTPS的基本概念 HTTP:是互联网上利用最为宽泛的一种网络协议,是一个客户端和服务器端申请和应答的规范(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协定,它能够使浏览器更加高效,使网络传输缩小。 HTTPS:是以平安为指标的HTTP通道,简略讲是HTTP的平安版,即HTTP下退出SSL层,HTTPS的平安根底是SSL,因而加密的具体内容就须要SSL。 HTTPS协定的次要作用能够分为两种:一种是建设一个信息安全通道,来保障数据传输的平安;另一种就是确认网站的真实性。 二、HTTP与HTTPS有什么区别? HTTP协定传输的数据都是未加密的,也就是明文的,因而应用HTTP协定传输隐衷信息十分不平安,为了保障这些隐衷数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协定用于对HTTP协定传输的数据进行加密,从而就诞生了HTTPS。简略来说,HTTPS协定是由SSL+HTTP协定构建的可进行加密传输、身份认证的网络协议,要比http协定平安。 HTTPS和HTTP的区别次要如下: 1、https协定须要到ca申请证书,个别收费证书较少,因此须要肯定费用。 2、http是超文本传输协定,信息是明文传输,https则是具备安全性的ssl加密传输协定。 3、http和https应用的是齐全不同的连贯形式,用的端口也不一样,前者是80,后者是443。 4、http的连贯很简略,是无状态的;HTTPS协定是由SSL+HTTP协定构建的可进行加密传输、身份认证的网络协议,比http协定平安。 三、HTTPS的工作原理 咱们都晓得HTTPS可能加密信息,免得敏感信息被第三方获取,所以很多银行网站或电子邮箱等等安全级别较高的服务都会采纳HTTPS协定。 HTTP与HTTPS的区别-马海祥博客 客户端在应用HTTPS形式与Web服务器通信时有以下几个步骤,如图所示。 (1)客户应用https的URL拜访Web服务器,要求与Web服务器建设SSL连贯。 (2)Web服务器收到客户端申请后,会将网站的证书信息(证书中蕴含公钥)传送一份给客户端。 (3)客户端的浏览器与Web服务器开始协商SSL连贯的安全等级,也就是信息加密的等级。 (4)客户端的浏览器依据双方同意的安全等级,建设会话密钥,而后利用网站的公钥将会话密钥加密,并传送给网站。 (5)Web服务器利用本人的私钥解密出会话密钥。 (6)Web服务器利用会话密钥加密与客户端之间的通信。 四、HTTPS的长处 只管HTTPS并非相对平安,把握根证书的机构、把握加密算法的组织同样能够进行中间人模式的攻打,但HTTPS仍是现行架构下最平安的解决方案,次要有以下几个益处: (1)应用HTTPS协定可认证用户和服务器,确保数据发送到正确的客户机和服务器; (2)HTTPS协定是由SSL+HTTP协定构建的可进行加密传输、身份认证的网络协议,要比http协定平安,可避免数据在传输过程中不被窃取、扭转,确保数据的完整性。 (3)HTTPS是现行架构下最平安的解决方案,尽管不是相对平安,但它大幅减少了中间人攻打的老本。 (4)谷歌曾在2014年8月份调整搜索引擎算法,并称“比起等同HTTP网站,采纳HTTPS加密的网站在搜寻后果中的排名将会更高”。 五、HTTPS的毛病 尽管说HTTPS有很大的劣势,但其相对来说,还是存在不足之处的: (1)HTTPS协定握手阶段比拟费时,会使页面的加载工夫缩短近50%,减少10%到20%的耗电; (2)HTTPS连贯缓存不如HTTP高效,会减少数据开销和功耗,甚至已有的安全措施也会因而而受到影响; (3)SSL证书须要钱,性能越弱小的证书费用越高,集体网站、小网站没有必要个别不会用。 (4)SSL证书通常须要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能撑持这个耗费。 (5)HTTPS协定的加密范畴也比拟无限,在黑客攻击、拒绝服务攻打、服务器劫持等方面简直起不到什么作用。最要害的,SSL证书的信用链体系并不平安,特地是在某些国家能够管制CA根证书的状况下,中间人攻打一样可行。 六、http切换到HTTPS ...

July 14, 2021 · 1 min · jiezi

关于http:怎么用手机参与Fil挖矿-Fil币手机挖矿教程

大家最关怀的问题,以后币价的FIL还能参加吗?怎么用手机参加Fil挖矿?Fil币手机挖矿教程!! 挖-矿,其实是一个铸币的过程,就是网络通过区块处分将代币释放出来,而后才有代币的流通、交易和应用,矿工就会有存储收益和检索收益。 FIL币是web3.0时代互联网分布式存储底层协定IPFS的激励机制,在Filecoin倒退初期,区块处分的形式激励矿工奉献本人的服务器来进行分布式存储网络,Filecoin网络根底建设有了网络安全性和稳定性,越来越多的机构和集体开始将本人的数据存储到Filecoin网络的服务器上,矿工就能够产生的存储挖矿的收益。 Fil币手机挖矿教程!!挖-矿的质押币和GAS手续费都是须要耗费FIL币的,目前的市场,FIL价格很低,买雷同数量的fil币价格就会更低,当然矿-机的封装老本也会变低。2021年7月1日FIL主网降级,GAS手续费越来越低,有限靠近于0,GAS是用来领取给网络封装工人的工资,将不会退还,质押币是押金,会退还。GAS越低越好,质押币会退还其实就是囤币,在囤币时机器也在一直产币。Fil当初就是一个很好的机会。 (WK010708)4.jpg 对于手机能不能进行挖矿?怎么用手机参加Fil挖矿?Fil币手机挖矿教程!! 实际上,手机是不能用来挖-矿的。之所以能用手机是因为使用“云算力挖-矿”,用户进行认购算力(矿机的计算能力),矿-场就会依照领有多少算力来调配相应的矿机,而后将每天挖出来的币发放到手机APP威ipfs-899,就能够随时进行提币、交易、变现。 挖-矿的参加形式很简略,能够抉择云-矿-机-挖-矿,云-矿-机-挖-矿有很多劣势,例如没有昂扬的电费,不须要人工治理,不须要场地费用,不必承当培修老本。云矿机挖矿有从事挖矿多年的业余团队,业余的币种抉择、矿-机洽购、矿-场部署、日常保护。矿-机不会掉线,保障用户的质押币不会被罚没,而最不便的是用户能够在手-机上查看每天挖出的币。 怎么用手机参加Fil挖矿?Fil币手机挖矿教程!!ipfs市场正在不断扩大,FIL币值上涨是偶然性。IPFS正在全球化、产业化倒退,分布式存储必将是数据贮存行业将来倒退的趋势,Filecoin也会随着变成未来煊赫一时的数字黄金,将来的一个新财产,大家真正要做的是投“机”,而不是投机。 FIL暴涨,当初的FIL还能参加吗?fil即Filecoin,它是IPFS分布式存储系统的激励层,它也是一个虚构货币币种,FIL最高的时候是1500元一枚,以后大熊市阶段处在318元一枚的地位动荡。那么以后局势下FIL值得咱们去投吗?咱们来算一笔账。算某蜂的96T矿机是9.8个w。依照以后产出计算的年净产出是889.55个FIL,依照明天的行情计算价值28.3个w左右,质押币大略是441个这个是会退还的。打个比方币价略微涨100,早晓得上涨100对于FIL来说只是毛毛雨,FIL最稳固的行情是1100一枚,此时一台矿机年产靠近百万!,那么这台矿机就多赚了靠近9个w,而矿机是永恒挖矿不限工夫的。源源不断的产币。就算币价再跌也还是能赚钱,挖矿不管行情好坏只是赚多赚少的问题。挖矿是币圈惟一一个可能长期稳固赚钱的形式,也是危险最低的形式!挖矿力口wk010708,或者扫一扫

July 14, 2021 · 1 min · jiezi

关于http:『IPFSCN-AMA』时空区块链IPFS社区-X-FILSwan丨实录回顾

由时空区块链IPFS社区推出的垂直畛域生态品牌动作『IPFS.CN AMA』正式上线。IPFS.CN AMA致力于围绕IPFS&Filecoin生态内容,并定期邀请业内人士探讨行业焦点及将来格局。首期AMA于7月2日晚20:00准时开启,本次AMA咱们邀请到的是来自FILSwan首席执行官Charles Cao曹滔韬学生,为大家具体介绍FILSwan我的项目的创建初衷以及在Filecoin生态倒退中对将来的影响。 本次AMA分为固定问答和社区问答环节,咱们将从FILSwan的客户群体、生态反对、嘉宾认识等方面进行全方位剖析,也非常感谢此次币乎、火星财经、金色财经、DoraHacks对本次流动的大力支持。 以下是本次AMA实录回顾: 1.主持人Niic:咱们先请Charles Cao简略的来介绍下FILSwan这个我的项目以及次要的业务组成。Charles Cao:FilSwan是一个基于IPFS和Filecoin网络的数据订单交易撮合和计算平台。在FilSwan平台上你能够不便搜寻发现寰球的存储节点状况,公布订单,存储提供者也能够在平台上进行撮合接单。Filswan将提供在IPFS/Filecoin网络上从存储,散发到计算的一站式服务。2.主持人Niic:能够聊聊您本人还有FILSwan的团队背景么?Charles Cao:FilSwan是一支来自加拿大的团队。从2017年起就深耕云计算和区块链行业。目前在加拿大有十余人的开发团队,团队成员均为硕士以上学历。单干院校有加拿大的Mcgill大学,Concordia大学等。屡次取得加拿大政府,加拿大自然科学基金会对于区块链云计算方向的研发拨款,也是加拿大下一代网络卓越我的项目成员。 我自己2007年毕业于复旦大学电子工程系,在加拿大取得硕士学位。有十多年的研发设计教训,从业于IBM,SAP,Autodesk 和Expedia 等公司,从十年前接触云计算,到五年前接触以太坊,始终为云计算和区块链联合的将来而着迷。 3.主持人Niic:能够分享下当初为什么要做FILSwan这个我的项目么?其创建的初衷是什么呢?Charles Cao:2010年咱们开始试用AWS为Autodesk提供各种商用服务用于代替Autodesk固有的数据中心服务,在那个时候起咱们就深深领会到弹性计算,按需付费的魅力。2017年是以太坊生态暴发之年,Filecoin,ICP等我的项目都在同年实现融资,区块链与云计算联合的端倪开始产生。 在2021年Filecoin实现了主网上线工作,各种存储相干的API 日趋成熟,然而Filecoin的网络目前存在一些服务生态方面能够强化的中央。比方filecoin有超过2000个服务节点,谁能够提供服务,谁能提供什么服务,他们在哪里?Filecoin网络上的数据取回速度有比拟大的提早,如何更快的取回数据?Filecoin的存储为根底能够减少哪些利用?能不能提供计算相干的服务,让计算和存储靠近?这些都是对Filecoin整个生态落地有微小意义的问题。目前并没有特地好的解决方案,FilSwan的成立就是为了解决这几个根本问题。 4.主持人Niic:目前来说,整个IPFS&Filecoin的生态倒退正在逐步完善,并且最近最大的NFT市场——OPENSEA也发表在IPFS上存储NFT。 那么您对IPFS&Filecoin生态的倒退历程以及将来趋势是怎么对待呢? Charles Cao:IPFS是一个全球性自带散发和缓存的分布式web3服务网络,Filecoin则是一个永恒存储的激励层,合二为一完满的解决了存储散发和激励的问题。咱们在主网上线半年后很侥幸的看到了一大批生态我的项目。有专一浏览器等相干服务的filscan,filscout团队,有专一做在线存转发服务的Texile团队, 和Filecoin生态单干的Livepeer团队,以及一大批在各个longhash 和Tachyon孵化器中的团队,他们在Filecoin的协定层模型下不断完善和残缺整个存储,计算,金融的生态。最终将来的几年会帮助Filecoin成长成为一个媲美以太坊的生态系统。5.主持人Niic:在上文中您也提到, 目前Filecoin网络上的数据取回速度有比拟大的提早等问题,您感觉FILSwan在其中能起到的作用是什么呢?Charles Cao:FilSwan 作为一个从主网上线之前就开始研发并且参加Filecoin从太空比赛起全程的团队,他的工作是欠缺Filecoin在订单发送,存储和计算方面的性能。在Filecoin的主网上线周上,FilSwan就被列入Juan主网上线访谈的Filecoin将来这一章,咱们在下面做了一些展现和发言。在Filecoin最近的Filecoin Plus我的项目咱们也应邀参加了Filecoin Plus大规模订单发送的演讲。咱们取得了PT级别数据传输和S3数据兼容接口的2个Filecoin基金会的Grant. 并且是Filecoin 数据build market的成员。 能够说,咱们承载了Filecoin在巨量数据传输,疾速存储散发和数据计算三大方向十分艰巨的性能。作为一个综合性的基础设施平台。FilSwan的胜利能大大降低企业接入老本,提供企业用户从web2转入web3的丝滑体验,FilSwan团队同时还是北美公证人和MinerX 的成员能够更好的协调存储提供者和企业客户的移植工作。 6.主持人Niic:想请问下您目前整个FILSwan生态的客户群体次要涵盖哪些人?FILSwan团队打算采取什么策略来吸引新用户并长期留住他们?Charles Cao:FilSwan的客户群次要是存储需要客户和生态利用的开发者。对于开发者咱们提供一系列的开发利用API来帮助他们实现从传统的web2到web3的接入而无需关注简约的IPFS/Filecoin存储调用,付费过程。对于存储需要的提供者,咱们提供他们敌对的服务发现,和订单竞价,批量发送和批量导入的客户端。 在北美地区咱们提供相当多的技术支持和用户交互服务来帮忙他们登录Filecoin的网络。咱们也推广了一批本地的人工智能和虚拟现实等初创企业进入Filecoin的畛域,并且帮助了一批开发者取得Filecoin的开发者处分。咱们也参加了Dorahack这样的全球性赛事提供奖金池的反对,来帮忙生态利用的倒退。在将来咱们会提供更多的开发工具和资金反对来帮忙企业和开发者登录咱们的平台和应用咱们的组件。 7.主持人Niic:请问FILSwan是依附什么盈利呢?Charles Cao:FilSwan的利润产生形式次要来自于平台的应用付费。FilSwan对晚期的生态企业提供各种收费的服务和反对。对于使用量达到肯定体量的企业,FilSwan会遵循业界通行的按需付费的模式。用户能够按应用的存储空间付费,也有的服务是依照应用的流量计费。对于第三方的服务接入者,也须要缴纳一部分的服务收益提成给平台来帮忙平台的倒退和更好的保护网络。8.主持人Niic:好的。上述您提到FilSwan 从主网上线之前就开始研发并且参加Filecoin从太空比赛起全程的团队,并且据我所知,FilSwan 也是太空比赛两次社区冠军获得者,并且也是北美公证人和两次MinerX成员。 在这里咱们也想请以您集体的角度,分享下对IPFS&Filecoin整个生态接下来的倒退有哪些倡议呢? Charles Cao:说倡议就不敢当了,Filecoin在协定实验室和基金会的领导下始终依照本人既定的指标和步骤在逐渐拓展开发和生态利用,功效卓著。我从集体角度对各位生态的参加团队能够提供一些小小的倡议。 首先Filecoin并不是一个变化无穷的软件协定,据我和基金会以及协定实验室美洲的沟通体验。Filecoin在协定层始终不停的演进,比方智能合约,Filecoin在将来会有本人的智能合约体系,这是媲美以太坊的智能合约体系。有生态利用打算的团队,能够提前布局。 第二个就是在利用层面具备微小的空间。ZX在生态倒退上提供了很多倡议,大家有趣味的能够去看看他对于生态倒退的一些倡议。比方Defi这块,filecoin还是绝对单薄的、第三个就是利用落地,当初有相当多的团队在做网盘相干的利用这是十分好的方向,然而也要留神经济模型和盈利模式。百度网盘每年投入微小,在filecoin上如何做到媲美百度网盘体验的同时还能兼顾老本? 第四个就是法律法规。在Filecoin和IPFS做利用,咱们肯定要恪守当地的法律法规。 社区发问环节: 1.主持人Niic:其实咱们之前也收到了好几个来自社区的问题,  我筛选了两个想求教下您:能够请您分享下FILSwan从创立之初到目前为止的里程碑事件吗,以及将来布局及瞻望等内容吗。Charles Cao: 2020年10月在Filecoin主网上线周第一次展现计算平台和发单的雏形。过后采纳的是第三方发单软件。 2021年1月竞价模块第一次公布。并且加入了Filecoin官网2021年第一期的社区我的项目AMA,就如明天咱们有幸被邀请加入第一期IPFS中国的AMA一样。 2021年3月取得Filecoin基金会的PB级别数据传输处分。 2021年4月凋谢API接入。用户快速增长,累计发单超过2万余,存储超过500TB数据。 2021年5月取得官网的FS3存储grant。进入FS3的业界集成工作。 2021年6月取得北美公证人席位,为企业提供10X算力实在数据审批资格。 后续咱们将陆续上线领取模块,计算模块等重要性能,并且打算在寰球范畴内引入100个生态团队,建设生态处分池。 2.主持人Niic:请问目前相干的融资停顿状况能够分享下么?Charles Cao:FilSwan从成立之初就取得了重量级机构的青眼和投资,目前团队开发资金短缺,机构投资人在各个方面给与了咱们很多的倡议帮忙。Filecoin基金会的dev grant和minerX的资金也对咱们的倒退起到了很大的作用。 主持人Niic:非常感谢Charles Cao明天给咱们带来的分享,让咱们更进一步理解到FILSwan整个生态的运作,同时,Charles Cao对于IPFS&Filecoin生态畛域的见解也让大家受益匪浅。 目前,Filecoin生态倒退日益完善,各种生态中的利用、合作者资本、减速营、开发者工具、基础设施、钻研机构等都在一直新陈代谢,独特为打造Web3.0,挖矿征询SLF5576构建一个分布式、去中心化的网络而致力,而IPFS&Filecoin通过分布式存储技术解决数据异位存储、传输问题,致力于取代HTTP,成为更平安的网络传输协定,能够说这是当今最有价值的亮点。

July 12, 2021 · 1 min · jiezi

关于http:ipfs矿机骗局最新情况你躺枪了吗

Filecoin 太空比赛第一轮完结后,市场激情不减,第二轮比赛跃然纸上。市场上仍旧放弃着对于分布式存储板块的热度,一些投资者的重点全副转向矿机相干测试数据。 一片叫好声中,近几个月以来,北京、深圳、杭州均传出 Filecoin 相干矿机厂商被约谈、设施被没收的音讯,这些事件并非个例。 很显著,一些潜在危险被投资人们漠视掉了。 在 2020 上半年,IPFS 曾一度成为行业关注的焦点,随着 FIL 期货价格的一路攀升,IPFS 相干的生态正逐渐壮大起来。 9 月中旬,随着 Filecoin 太空比赛第一轮完结,寰球诸多矿工受到高达 460 万枚 FIL 的比赛处分吸引,纷纷踊跃加入。目前,官网也在踊跃筹备凋谢第二轮比赛,市场也仍旧放弃着对于分布式存储板块的热度。 但 发现,就在分布式存储计划提供商、已有布局的投资机构、购买了云算力的集体投资者们都将注意力放在了矿机厂商比赛数据上时,一些矿机厂商正在面临着监管危险。 从一位相熟 IDC 业务的行业投资人处获悉,在包含北京在内的一些地区,有肯定数量的与 IPFS 概念相干的厂家设施已被公安部扣押,次要波及到已发币的我的项目方。 警觉潜在危险 往年上半年,分布式存储是一个热点话题。仅仅 2 个月前,作为行业内明星我的项目的 Filecoin 一时间景色无二,成为了 2020 年上半年为数不多的资金大量流入的方向之一。 因为分布式贮存的投资逻辑清晰、概念易懂,无论是传统投资人还是行业内的人,都易于了解与承受,在过后热点较为匮乏的状况下,各类机构相继进入。从 Filecoin 产业链倒退的能够看到,上游的资本、矿机商、我的项目方,中间层的用户群体、开发者、生态参与者,上游的媒体、交易、征询等环节,Filecoin 仍然造成了欠缺的闭环生态。 在此前 7 月底开展的杭州区块链周上,据不齐全统计,参会矿机销售商数量约有 200-300 家,在那一周,所举办的以分布式存储为主题的流动占了全副约 40 余个线下流动的 70-80% 。 据非小号数据,截止 9 月 25 日,Fil 今年以来的涨幅已高达 367.04%,7 月份的价格峰值近 28.25 美元。 能够看到,在以后 IPFS 高热度的状况下,分布式存储计划提供商、已有布局的投资机构、察看热点话题的媒体们、购买了云算力的集体投资者,都把注意力放在了无效算力排行榜、全网质押代币数量、全网总算力及均匀出块工夫等话题上,而漠视了其潜在的一些危险。 独一无二,在北京地区一些 IPFS 相干概念厂家被公安部扣押设施的音讯流出时,8 月下旬,深圳、杭州等地亦有 IPFS 矿机相干厂商曾受到经侦约谈。据 Blocklike 从知情人士处获悉,在杭州更早些的时候,曾经呈现过经侦对于 IPFS 相干企业进行约谈的状况,局部矿机生产商在约谈后只得更换办公地点。 ...

July 9, 2021 · 1 min · jiezi

关于http:ping命令

定义ping是一种计算机网络工具,用来测试数据包是否透过IP协定达到特定主机。ping的运作原理是向指标主机传出一个ICMP的申请回显数据包,并期待接管回显回应数据包。程序会按工夫和胜利响应的次数估算失落数据包率(丢包率)和数据包往返工夫(网络时延,Round-trip delay time)。 数值具体含意在windows零碎ping baidu.com,如下截图所示: 字节每个数据包的大小。 工夫往返行程的工夫。正如截图所示,ping命令执行后,发送了4个数据包,对应的工夫别离是39ms/37ms/38ms/38ms,绝对是比拟安稳的。也就是没有网络抖动的问题。 TTL存活工夫(英语:Time To Live,简写TTL)是电脑网络技术的一个术语,指一个数据包在通过一个路由器时,可传递的最长距离(跃点数)。每当数据包通过一个路由器时,其存活次数就会被减一。当其存活次数为0时,路由器便会勾销该数据包转发,IP网络的话,会向原数据包的收回者发送一个ICMP TTL数据包以告知跃点数超限。其设计目标是避免数据包因不正确的路由表等起因造成的有限循环而无奈送达及耗尽网络资源。 TTL的值不是越小越好,相同,应该是越大越好。因为TTL的值越大,阐明发送数据包通过的路由器越少,则越快到达到目的地。 TTL缺省值,在不同的操作系统是不雷同的。上面是查看Windows 10 专业版的办法:所以默认值的十进制是64。也就是ping baidu.com,两头通过了64-51=13个路由。

July 9, 2021 · 1 min · jiezi

关于http:延迟Latency

Latency is a synonym for delay。在电信畛域,低提早与踊跃的用户体验 (UX) 相干,而高提早与蹩脚的 UX 相干。 在计算机网络中,提早示意数据包从一个指定点传输到另一个指定点所需的工夫。现实状况下,提早将尽可能接近于零。网络提早能够通过确定数据包往返目的地的往返工夫 ( RTT )来掂量。(网络提早 vs RTT) 高网络提早会显着减少网页加载工夫、中断视频和音频流,并使应用程序无奈应用。依据应用程序的不同,即便提早的绝对较小的减少也会毁坏用户体验。提早不佳的次要起因之一是地理位置。高度分布式的互联网协议 (IP) 网络逾越很远的间隔,减少了可能使应用程序脱轨的传输工夫。在感知和响应之间的提早须要极低的任何状况下——例如,主动驾驶中的某些动作——将解决数据的计算机尽可能凑近数据源是有意义的,一个被称为边缘计算的概念。 电信提早的起因提早可能由许多起因引起,包含以下几点: 传输媒体。提早会受到用于传输数据、语音和视频的媒体类型的影响。例如,与通过Cat5电缆传输的数据包相比,通过T1线路传输的数据包预计会遇到更低的提早。数据包大小。一个大数据包比小数据包须要更长的工夫来发送往返。丢包和抖动。高百分比的数据包未能达到目的地或某些数据包从一个零碎传输到另一个零碎所需的工夫变动太大也可能导致提早。信号强度。如果信号很弱并且必须通过中继器加强,这可能会导致提早。流传提早。如果每个 网关 节点 都必须花工夫查看并可能更改数据包中的标头——例如,更改生存工夫 (TTL ) 字段中的跳数——提早会更高。其余计算机和存储提早。如果数据包在中间设备(例如交换机)上受到存储和硬盘拜访提早的影响,则提早可能会更高。提早类型中断提早 是计算机解决信号所用的工夫长度,该信号通知主机操作系统 ( OS ) 进行,直到它能够决定它应该做什么来响应事件。 光纤提早是光通过光纤电缆传输指定间隔所需的工夫。依据光速,每笼罩一公里 (km),天然会产生 3.33 微秒 (s) 的提早。然而,实际上,光纤电缆的每公里提早约为 4.9 微秒——这是因为光在电缆中传播速度较慢。电缆中的蜿蜒或其余缺点可能会使提早更高。 Internet 提早 工夫取决于间隔。数据包在寰球广域网 ( WAN ) 中传输的工夫越长,提早就越高。 WAN 提早 可能是确定 Internet 提早的重要因素。无论是从局域网 ( LAN )上的服务器、该网络上的另一台计算机还是 Internet 上的其余中央申请资源,忙于疏导其余流量的 WAN 都会产生提早。 音频提早 是创立和听到声音之间的提早。在物理世界中产生的声音中,这种提早由声速决定,声速依据声波 流传的介质而略有不同 。声音在密度较大的介质中流传得更快:它在固体中流传得更快,在液体中传播速度较慢,在空气中流传最慢。在音频中,可承受的两头提早约为 8 到 12 微秒。侦听器通常会留神到 30 毫秒 (ms) 的提早。如果操作在线性工作流中执行,则操作提早能够定义为操作的总工夫 。在并行工作流中,提早由单个工作工作者执行的最慢操作决定。 ...

July 9, 2021 · 1 min · jiezi

关于http:FIL挖矿赚钱吗什么是FIL挖矿fil未来价值

大家好,咱们有见面了,见字如见人,明天的话我用这期的话来给大家解说一下什么是数字货币的挖矿。相似于比特币或者是以太币这种币呢就须要用大量的算力去解答一种难题。而后呢当你解答对了,而后呢你就能够取得一部分的处分。 当参加的人越来越多,你须要的算力就越来越多。而后你可能一个人人多势众的曾经做不了了,你须要去矿石和他人单干一起去挖这一个。对于普通人来说啊,其实挖矿还是挺边远的。因为你须要去首先有一个设施去挖矿,而后呢你还须要去思考须要用电呢。而后去保护啊,可能设施会坏啊,所以说大部分的人都在二级市场里去炒作,炒作的呢百分之九十又是被割。这种能够疾速挣钱的效应去忽悠进去的。 所以说可能啊呃只有百分之十到二十的人会盈利,其余的人大部分都是亏损的。尤其是在往年四五月份进来的人,很可能就是亏的,基本上百分之五十都算少的。为什么这么说呢?因为很多的时候啊,你对这个数字货币市场不理解,你没有去参加过他以前的一些走势吧。 你不理解它外面的风险性,所以说你只看到了它的利润。像昨天我跟网友问,我问我说那个的话可不可以挖矿,而后又又说而后什么fil 的话,因为它高大上,又须要稳固的网络。而后才能够去挖,而后你还须要付一些的gas 费。但其实任何的挖矿都是一种噱头,它呢只不过是带动了市场的激情。让更多的人去参加。当你参加的多了,曝光率高了,就会有人去买。你买的越多,它的价格就会越多。所以说对于这种状况来说啊, 当初。因为国家严格的打击,他曾经属于凉凉的状态了,而且大部分真正的大型的企业或者是集体,他们曾经思考去转战到其余国家去挖矿。并且他们也须要去找到其余国家绝对电价低廉的中央,而且还须要找到治安好的中央。如果治安不好的中央,很可能人家过去就把你的矿机或者所有的货色全抢走了。还有一点大家须要留神的是什么呢?就是矿场。的老板其实是和炒币的人,是属于相对来说是对立面的。其实呃大家都会了解地价越高,而后呢矿厂的老板越开心。但不过相对来说,如果呈现踩踏事件的时候,矿厂的老板是不心愿币价上涨的,他呢是须要通过无数次的抬价或者稳固价格能力。让他把手中的货出进来,其实相对来说它是属于一个。 养鸡场的场主,他天天生产鸡蛋,而后呢,你呢是天天去炒鸡蛋,但你不去吃。所以说他须要把这一部分的货色卖给你,让你去置信他有价值。所以说他就是你的对立面。而后再有就是不要置信什么呃,币圈一天世间十年这种暴富的神话。因为暴富的神话永远轮不到你。你是二级市场的参与者。你不可能去一级市场购买筹码,所以说当最低廉的筹码你是买不到的,永远只有上到交易所那天,价格曾经涨了几十倍,几百倍的时候,你才是去接盘的那个人。对于挖矿,其实这种货色来说啊。它的老本就是决定了这个币价的走势。如果你挖的币在市场上,你卖的时候,你能够高于你挖矿的老本,这个是所有人都须要违心干的。 但其实不然,其实的话你挖矿的老本和你市场上交易的老本大概是相等的,这样呢能力处于一个良性的环境。如果。越来越挣钱,那么你就会看到全网的算力越来越高。如果越来越赔钱,你会发现全网的算力在升高。因为有一些人出场了,不想再去挖了。因为他越挖他越赔钱,他只能清清理他这个设施。所以说这次奇怪的景象产生在什么呢?产生在以太坊的币价腰斩了当前,它的全网算力只升高了百分之七。也就是说,大部分的矿主还是想把这个价格挺住,挺住当前让他做一个波段,往上抬升当前他们好出货,因为谁也不晓得明年以太坊的挖矿算法会不会更改。所以说会不会再用显卡这个计算形式的话,大家谁也不分明。而后欢送大家的观看吧。而后喜爱的留言,我会持续给你解说。 点击收费下载APP支付算力,请记住,挖矿始终是最低老本获币的惟一形式!!!如果你想理解更多币圈最新资讯,参加FIL挖矿,WK010708(v同号)理解更多挖矿常识,解刨当初挖矿更多细节

July 9, 2021 · 1 min · jiezi

关于http:网络协议

1:tcp标记位SYN 示意建设连贯客户端发送syn包到服务器,会进入SYN_SEND状态,期待服务端确认 ACK 收到数据或申请后发送的响应报文个别取值为1示意应答无效 RST 敞开异样连贯FIN 终止位,示意敞开连贯URGPSH2:七层网络模式 3:三次握手 (1)第一次握手:Client将标记位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,期待Server确认。 (2)第二次握手:Server收到数据包后由标记位SYN=1晓得Client申请建设连贯,Server将标记位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连贯申请,Server进入SYN_RCVD状态。 (3)第三次握手:Client收到确认后,查看ack是否为J+1,ACK是否为1,如果正确则将标记位ACK置为1,ack=K+1,并将该数据包发送给Server,Server查看ack是否为K+1,ACK是否为1,如果正确则连贯建设胜利,Client和Server进入ESTABLISHED状态,实现三次握手,随后Client与Server之间能够开始传输数据了。

July 8, 2021 · 1 min · jiezi

关于http:HTTP中通过get方法下载文件

http下载文件的实质就是在响应体中拿到响应数据并写入到文件的操作,第二种形式是实现了一个实时显示下载进度的性能 package mainimport ( "fmt" "io" "net/http" "os")func downloadFile(url, fileName string) { resp, err := http.Get(url) if err != nil { panic(err) } defer func() {_ = resp.Body.Close()}() file, err := os.Create(fileName) if err != nil { panic(err) } defer file.Close() n, err := io.Copy(file, resp.Body) fmt.Println(n, err)}type Reader struct { io.Reader Total int64 Currnet int64}func (r *Reader) Read(p []byte) (n int, err error) { n, err = r.Reader.Read(p) r.Currnet += int64(n) fmt.Printf("\r %.2f%%", float64(r.Currnet * 10000 / r.Total) / 100) return}func DownloadFileProgress(url, fileName string){ resp, err := http.Get(url) if err != nil { panic(err) } defer func() {_ = resp.Body.Close()}() file, err := os.Create(fileName) if err != nil { panic(err) } defer file.Close() reader := &Reader{ Reader: resp.Body, Total: resp.ContentLength, } io.Copy(file, reader)}func main(){ //下载文件url url := "https://i1.hdslb.com/bfs/face/0d2f52b9e1dae83b2cd710b38ee911533db32774.jpg" //下载后保留的文件名 fileName := "example.png" //downloadFile(url, fileName) DownloadFileProgress(url, fileName)}

July 8, 2021 · 1 min · jiezi

关于http:HTTP中post方法提交不同格式的数据

http提交数据次要通过post办法实现,在提交不同格局的数据时最大的不同点在于数据的组织模式不同,同时须要设置不同格局对应的Content-type格局 package mainimport ( "bytes" "encoding/json" "fmt" "io" "io/ioutil" "mime/multipart" "net/http" "net/url" "os" "strings")func postForm(){ data := make(url.Values) data.Add("name", "yuan") data.Add("age", "18") payload := data.Encode() resp, err := http.Post("http://httpbin.org/post", "application/x-www-form-urlencoded", strings.NewReader(payload)) if err != nil { panic(err) } defer func() {_ = resp.Body.Close()}() content, err := ioutil.ReadAll(resp.Body) fmt.Printf("%s", content) //{ // "args": {}, // "data": "", // "files": {}, // "form": { // "age": "18", // "name": "yuan" // }, // "headers": { // "Accept-Encoding": "gzip", // "Content-Length": "16", // "Content-Type": "application/x-www-form-urlencoded", // "Host": "httpbin.org", // "User-Agent": "Go-http-client/1.1", // "X-Amzn-Trace-Id": "Root=1-60e4770f-2a5448187a3ae2d560ebf3ff" // }, // "json": null, // "origin": "222.211.214.252", // "url": "http://httpbin.org/post" //}}func postJson() { u := struct { Name string `json:"name"` Age int `json:"age"` }{ Name: "yuan", Age: 18, } payload, _ := json.Marshal(u) //data := make(url.Values) //data.Add("name", "yuan") //data.Add("age", "18") //payload := data.Encode() resp, err := http.Post("http://httpbin.org/post", "application/json", bytes.NewReader(payload)) if err != nil { panic(err) } defer func() { _ = resp.Body.Close() }() content, err := ioutil.ReadAll(resp.Body) fmt.Printf("%s", content) //{ // "args": {}, // "data": "{\"name\":\"yuan\",\"age\":18}", // "files": {}, // "form": {}, // "headers": { // "Accept-Encoding": "gzip", // "Content-Length": "24", // "Content-Type": "application/json", // "Host": "httpbin.org", // "User-Agent": "Go-http-client/1.1", // "X-Amzn-Trace-Id": "Root=1-60e47872-48e5cb7c65ce959f03544ffb" //}, // "json": { // "age": 18, // "name": "yuan" //}, // "origin": "222.211.214.252", // "url": "http://httpbin.org/post" //}}func postFile(){ body := &bytes.Buffer{} writer := multipart.NewWriter(body) upload1, _ := writer.CreateFormFile("formName1", "test.txt") uploadFile1, _:= os.Open("test.txt") defer uploadFile1.Close() io.Copy(upload1, uploadFile1) upload2, _ := writer.CreateFormFile("formName2", "test.txt") uploadFile2, _:= os.Open("test.txt") defer uploadFile2.Close() io.Copy(upload2, uploadFile2) writer.Close() //以上数据组织实现 fmt.Println(writer.FormDataContentType()) resp, err := http.Post("http://httpbin.org/post", writer.FormDataContentType(), body) if err != nil { panic(err) } defer func() {_ = resp.Body.Close()}() content, _ := ioutil.ReadAll(resp.Body) fmt.Printf("%s", content) //{ // "args": {}, // "data": "", // "files": { // "formName1": "qwqwertwertwertwert", // "formName2": "qwqwertwertwertwert" // }, // "form": {}, // "headers": { // "Accept-Encoding": "gzip", // "Content-Length": "462", // "Content-Type": "multipart/form-data; boundary=c7d43bcbc370e8f128df077361e7f5551970ee279eb483fc4c1a7016e68f", // "Host": "httpbin.org", // "User-Agent": "Go-http-client/1.1", // "X-Amzn-Trace-Id": "Root=1-60e4806a-501ee1f8562afc5c74143bcf" // }, // "json": null, // "origin": "222.211.214.252", // "url": "http://httpbin.org/post" //}}func main(){ //postForm() //post 表单 //postJson() //post Json postFile() //post file}

July 8, 2021 · 2 min · jiezi

关于http:HTTP中request请求参数的设置

在发送的http申请中咱们能够定制本人的申请体,上面是几个示例代码 package mainimport ( "fmt" "io/ioutil" "net/http" "net/url")func printBody(r *http.Response){ content, err := ioutil.ReadAll(r.Body) if err != nil { panic(err) } fmt.Printf("%s", content)}//设置申请查问参数func requestByParams(){ request, err := http.NewRequest(http.MethodGet, "http://httpbin.org/get", nil) if err != nil { panic(err) } params := make(url.Values) params.Add("name", "yuan") params.Add("age", "18") request.URL.RawQuery = params.Encode() fmt.Println(params.Encode()) resp, err := http.DefaultClient.Do(request) if err != nil { panic(err) } defer func() {_ = resp.Body.Close()}() printBody(resp) //{ // "args": { // "age": "18", // "name": "yuan" //}, // "headers": { // "Accept-Encoding": "gzip", // "Host": "httpbin.org", // "User-Agent": "Go-http-client/1.1", // "X-Amzn-Trace-Id": "Root=1-60e46b98-58667aee5367f1aa1ca102c9" //}, // "origin": "222.211.214.252", // "url": "http://httpbin.org/get?age=18&name=yuan" //}}//定制申请头func reauestByHead(){ request, err := http.NewRequest(http.MethodGet, "http://httpbin.org/get", nil) if err != nil { panic(err) } request.Header.Add("user-agent", "chrome") resp, err := http.DefaultClient.Do(request) if err != nil { panic(err) } defer func() {_ = resp.Body.Close()}() printBody(resp) //{ // "args": {}, // "headers": { // "Accept-Encoding": "gzip", // "Host": "httpbin.org", // "User-Agent": "chrome", // "X-Amzn-Trace-Id": "Root=1-60e46c63-22fd52047229e6175f52166c" //}, // "origin": "222.211.214.252", // "url": "http://httpbin.org/get" //}}func main() { requestByParams() reauestByHead()}

July 7, 2021 · 1 min · jiezi

关于http:ITI-1121

ITI 1121. Introduction to Computing IIAssignment 3Submission deadline: See BrightpsaceAssignment: Group of 2 students Maximum.Submission: A3_123456_123789.zip the two numbers are the students’ numbers.Reminders: The submitted code must be yours.You are also responsible to not expose your code to others.The submission must be done through Brightspace, before the deadline. Only submit your java files, do not submit any .class files.You must test your programs to make sure they give the correct results.A program that gives a compilation error or an execution error will receive a mark of zero.You have to put comments in the programs. The comments are not needed for each line ofcode. However, they have to explain in simple English what the program does.Some java files are provided, they should be used and the content already there cannot be modified.Which means you need to keep the existing code and add your code to it.Important: one submission per group is enough, however both students are responsible to make sure thesubmission was done before the deadline.Academic Integrityhttps://www.uottawa.ca/admini...https://www.uottawa.ca/vice-p...By submitting this assignment, you acknowledge the following:I have read the academic regulations of the University of Ottawa regarding academic fraud.I understand the consequences of plagiarism.With the exception of the source code provided by the professor for this course, all the source code is mine and my grouppartner only.ITI 1121. Introduction to Computing IIA3Q1In this question, you will implement PostFixCalculator, a calculator using postfix expressions.Ask the user to enter a postfix expression. He can use five operators. He can use one or more operators among:‘plus’, ‘minus’, ‘multiply’, ’divide’, ‘squareRoot’. Use spaces as your separators.Implement your custom exceptions. You need to handle at least the following exceptions:The user enters an operator not among the five allowed, throw you custom exceptionOperatorNotSupportedExceptionThe user enters an expression that involves a division by zero, throw ArithmeticException. Use 1 as a defaultoperand to divide on. This means replace the operand which is zero by one, and continue.The user enters an expression that involves the square root of a negative number, throwArithmeticException. Display 0 as output to the user and terminate the execution of the current expression.The ask the user if he wants to enter another expression to evaluate.The expression is not well formatted, throw your custom exception WrongExpressionFormatException, askthe user if he wants to enter another expression to evaluate.Depending on your implementation, you may need to handle other exceptions so that your program doesn’t crash(Example: if you used an array in your program, handle ArrayIndexOutOfBoundsException).Catch all of your exceptions, and display a proper message. The message displayed should start with the name ofthe exception that was thrown. Example, “WrongExpressionFormatException: The expression you entered has awrong format”.Solve the arithmetic expression entered using a stack. LinkedStack.java is provided for that, don’t change it.Push the operands encountered in the postfix expression into the stack, and pop the needed operands as soon as anoperator is encountered in the postfix expression.Do Not let your program crash. Handle all your exceptions properly.A3Q1.java contains the main program, it gets the user input, uses PostFixHandler, and displays the output.If no exception occurred: the output should be the correct result of the evaluation of the expression.After completing an expression, ask the user if they want to enter another expression to evaluate. Both ‘Y’and ‘y’ mean yes, continue. Any other character can be taken as no.An example:Enter your postfix expression: 30 4 minus 25 squareRoot plusoutput: 31Do you want to enter another expression to evaluate? (Y/N):Test your program for the five operators and combinations of them.Add your names and student numbers to all the java files.Submit A3Q1.java, LinkedStack.java, PostFixHandler.java, Stack.java and any java files you added.ITI 1121. Introduction to Computing IIA3Q2In this question, you will implement a Linked List of elements of type Item. This is similar to the linked list weused in class as a stack. In this question, you will use the same structure, but you will not use it as a stack. Thismeans you can access any element, even if it is not at the top.An item attributes are: label, quantity, price.Prompt the user to enter these values, separated by spaces, for each item. After entering each item, ask theuser if there are more items Y/N. Both ‘Y’ or ‘y’ mean yes continue, any other character can be taken as no.Store the items in the Linked List of Items and display them to the user.Implement a method to find duplicates and to eliminate the duplicated items in this way:▪ keep one of the duplicated items,▪ its quantity will be the sum of the quantities of duplicated items of the same label,▪ its price will be the minimum price of the duplicates.When the duplicates are eliminated, display the new list to the user.Implement a method to calculate the value of the current stock: the quantity of available items * the price.Display this value to the user.Implement a method to find the most expensive item, display the label of this item and its price to the user.Implement a method to find the least expensive item, display the label of this item and its price to the user.The program should not crash at runtime, catch your exceptions and handle them by displaying thecorresponding message to the user. Example: if, for an item, the user enters a string/char instead of an int forquantity, this will cause the exception: NumberFormatException, make sure you handle it. Ignore this item, theuser should re-enter this item. Same for other exceptions.Use the provided files: Item.java, LinkedItems.java, and A3Q2.java. Add your student numbers and names to all.Submit all three files. WX:codehelp

July 7, 2021 · 5 min · jiezi

关于http:http头部字段hopbyhop-headers-vs-endtoend-headers

一、起源在看RFC文档的时候,看到hop-by-hop这个词,有点纳闷,所以开掘了下它的相干含意。 二、含意hop是跳,hop-by-hop是逐跳的意思。end-to-end则是端到端。这两者都是http的头部字段。 1、含意原文13.5.1 End-to-end and Hop-by-hop HeadersFor the purpose of defining the behavior of caches and non-caching proxies, we divide HTTP headers into two categories:End-to-end headers, which must be transmitted to the ultimate recipient of a request or response. End-to-end headers in responses must be stored as part of a cache entry and transmitted in any response formed from a cache entry.Hop-by-hop headers, which are meaningful only for a single transport-level connection, and are not stored by caches or forwarded by proxies.The following HTTP/1.1 headers are hop-by-hop headers:ConnectionKeep-AlivePublicProxy-AuthenticateTransfer-EncodingUpgradeAll other headers defined by HTTP/1.1 are end-to-end headers.Hop-by-hop headers introduced in future versions of HTTP MUST be listed in a Connection header, as described in section 14.10.起源:https://www.freesoft.org/CIE/...[翻译]13.5.1 端到端和逐跳报头为了定义缓存和非缓存代理的行为,咱们将 HTTP 标头分为两类:End-to-end headers,必须传输到申请或响应的最终接收者。响应中的端到端标头必须作为缓存条目标一部分存储,并在从缓存条目造成的任何响应中传输。Hop-by-hop headers,仅对单个传输级连贯有意义,不禁缓存存储或由代理转发。以下 HTTP/1.1 标头是逐跳标头:ConnectionKeep-AlivePublicProxy-AuthenticateTransfer-EncodingUpgradeHTTP/1.1 定义的所有其余标头都是端到端标头。如第 14.10 节所述,在将来版本的 HTTP 中引入的逐跳标头必须列在连贯标头中。 ...

July 6, 2021 · 1 min · jiezi

关于http:在线HTTP请求响应头转JSON工具

在线HTTP申请/响应头转JSON工具在线HTTP申请/响应头转JSON工具 本工具能够将HTTP的申请或相应头的文本数据转成JSON格局数据,纯客户端实时转换。 https://tooltt.com/header2json/

July 5, 2021 · 1 min · jiezi

关于http:http协议与udp协议

http网络分层图

July 5, 2021 · 1 min · jiezi

关于http:在线HTTP请求响应头转JSON工具

在线HTTP申请/响应头转JSON工具在线HTTP申请/响应头转JSON工具 本工具能够将HTTP的申请或相应头的文本数据转成JSON格局数据,纯客户端实时转换。 https://tooltt.com/header2json/

July 4, 2021 · 1 min · jiezi

关于http:HTTP代理

代理类型公共代理泛滥客户端共享的代理被称为公共代理大多数代理都是公共的共享代理。集中式代理的老本效率更高,更容易治理。某些代理利用,比方高速缓存代理服务器,会利用用户间独特的申请,这样的话,汇入同一个代理服务器的用户越多,它就越有用。 公有代理单个客户端专用的代理被称为公有代理。专用的公有代理并不常见,但它们的确存在,尤其是间接运行在客户端计算机上的时候。有些浏览器辅助产品,以及一些ISP服务,会在用户的PC上间接运行一些小型的代理,以便扩大浏览器个性,进步性能,或为收费ISP服务提供主机广告。 为什么要应用代理-代理的作用它们能够改善安全性,进步性能,节俭费用。里给出了几种代理应用办法的示例 儿童过滤器能够利用过滤器代理来阻止学生拜访成人内容。如下图所示 文档访问控制集中式访问控制代理: 容许客户端1无限度地拜访服务器A的新闻页面;客户端2能够无限度地拜访因特网;在容许客户端3拜访服务器B之前,要求其输出口令。平安防火墙 Web缓存 反向代理反向代理服务器位于用户与指标服务器之间,然而对于用户而言,反向代理服务器就相当于指标服务器正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器获得内容,客户端向代理发送一个申请并指定指标(原始服务器),而后代理向原始服务器转交申请并将取得的内容返回给客户端。和反向代理不同之处在于,典型的正向代理是一种最终用户晓得并被动应用的代理形式 转码器代理服务器在将内容发送给客户端之前,能够批改内容的主体格局。在这些数据表示法之间进行的通明转换被称为转码(transcoding) 部署代理的地位按部署代理的地位代理能够分为一下几种:1、进口代理:部署在本地网络端,用于爱护本地网络或者限度公司带宽2、拜访(入口)代理:用于实现提供缓存响应3、反向代理:部署在服务器端本地网络上,用于实现更准确的申请和提供性能4、网络替换代理:部署在网络上,用于检测漂泊等 代码层次结构代理层次结构形容的代理的部署层级构造,比方一级代理,二级代理等,这是一种动态层级构造,有父代理和子代理的概念,离原始服务器进的的代理是离服务器远的代理的父代理!然而代理层级不应该动态的,而应该能够是动静的,以保障代理能够依据理论网络负载状况而下发报文到不同的代理!从而产生的动静层级代理概念有负载平衡、地理位置左近的路由等! http申请报文流量导入代理http申请报文是怎么进入代理的,形容的怎么把http申请报文流量导入代理!次要有一下几种形式:1、批改客户端:比方当初的客户端都反对收手动和主动配置代理!2、批改网络:网络通过一些技术在客户端不知情的状况揽入流量进入代理!3、批改dns命名空间:把主机名映射为代理的ip地址,比方批改零碎的dns映射文件,让代理伪装成原始服务器,从而把web申请导入代理!4、批改服务器:让服务器返回一个重定向无关的代码,把http申请报文导入到代理! 客户端代理的配置显式的手工配置事后配置浏览器代理的主动配置,通过PAC动静计算代理的设置,抉择适合的代理服务器 代理的URI和服务器的URI的不同客服端向web服务器发送申请时,申请行只蕴含局部URI,但向代理发送申请时,申请行蕴含所有的URI 解决规定1、如果提供的是残缺URI,代理就应该应用这个残缺URI。2、如果提供的是局部URI,而且有Host首部,就应该用Host首部来确定原始服务器的名字和端口号。3、如果提供的是局部URI,而且没有Host首部,就要用其余办法来确定原始服务器: 1. 如果代理是代表原始服务器的替代物,能够用实在服务器的地址和端口号来配置代理;2. 如果流量被拦挡了,而且拦挡者也能够提供原始的IP地址和端口,代理就能够应用拦挡技术提供的IP地址和端口号;3. 如果所有办法都失败了,代理没有足够的信息来确定原始服务器,就必须返回一条谬误报文(通常是倡议用户降级到反对Host首部的古代浏览器)。URI 的客户端主动扩大和主机名解析没有代理是URI的解析浏览器会对主机名进行主动扩大,直到找到一个无效主机名为止有显示代理URI的解析浏览器不会对主机名进行主动扩大,发送给代理时,只会对加默认计划和门路有拦挡代理时URI的解析此时,对于客户端来说是没有代理的,浏览器会主动扩大主机名 追踪报文Via首部Via首部字段会列出与报文路径的每个两头节点无关的信息,没过一个代理或网关,就会在尾部加一个代理或网关的信息留神,每个Via路标中最多蕴含4个组件: 1. 一个可选的协定名:两头节点收到的协定,默认为HTTP;2. 一个必选的协定版本;3. 一个必选的节点名;4. 一个可选的描述性正文TRACE通过HTTP/1.1的TRACE办法,朱总经代理传输的申请报文,以及每个代理如何对申请报文进行批改的当TRACE申请达到目标服务器时,整条申请报文都会被封装在一条HTTP响应的主体中回送给发送端(参见图6-23)。当TRACE响应达到时,客户端能够查看服务器收到的确切报文,以及它所通过的代理列表(在Via首部)。TRACE响应的Content-Type为message/http,状态为200 OK Max-Forwards能够应用Max-Forwards(最大转发次数)首部来限度TRACE和OPTIONS申请所通过的代理跳数如果Max-Forwards的值为零(Max-Forwards:0),那么即便接收者不是原始服务器,它也必须将TRACE报文回送给客户端,而不应该持续转发。 代理认证对受限内容的申请达到一台代理服务器时,代理服务器能够返回一个要求应用拜访证书的407 Proxy Authorization Required状态码,以及一个用于形容怎么提供这些证书的Proxy-Authenticate首部字段 代理认证的处理过程1、客户端收到407响应时,会尝试着从本地数据库中,或者通过提醒用户来收集所须要的证书。2、只有取得了证书,客户端就会从新发送申请,在Proxy-Authorization首部字段中提供所要求的证书。3、如果证书无效,代理就会将原始申请沿着传输链路向下传送(如上图所示);否则,就发送另一条407应答。 Proxy-Authorization<type>身份验证类型。一个常见的类型是 "Basic"。<credentials>凭证的形成形式如下:将用户名和明码用冒号拼接(aladdin:opensesame)。将拼接生成的字符串应用 base64 编码方式进行编码(YWxhZGRpbjpvcGVuc2VzYW1l)。解决代理不反对的首部和办法代理必须对不意识的首部字段进行转发,而且必须维持同名首部字段的绝对程序。相似地,如果代理不相熟某个办法,那么只有可能,就应该尝试着将报文转发到下一跳节点下来。

July 4, 2021 · 1 min · jiezi

关于http:通过分析http协议实现Post提交数据

测试剖析Http协定数据接口,能够应用谷歌或火弧浏览器的开发者工具,也能够应用抓包工具。1、关上谷歌浏览器,关上填写的表单网址,先把所有输入框都填满,关上开发者工具,抉择Network网络选项卡,最初点击表单的确认提交按钮,就能够捕捉Http协定数据包了。2、在开发者工具里,抉择剖析第一个http协定数据包,能够看到数据提交网址,提交形式为Post,http协定头以及服务器响应数据。 3、临时抛开响应数据,看提交数据,http协定头内容比拟多,在这里不须要一条条地去剖析,只有晓得这部分是协定头部,能够复制全副http申请协定头内容,导入到测试工具中。在提交数据里,能够看到方才填写的表格内容,同样不须要剖析具体内容,只有全副复制导入测试工具即可。 4、关上木头浏览器(旗舰版)的我的项目管理器,按下图的形式,新建一个Http申请的步骤。 5、在Http申请设置窗口,输出提交数据网址,抉择Post提交形式。(通过上述第3步剖析取得)6、设置Http协定头内容,点击导入按钮,从开发者工具中复制协定头数据即可。 7、设置Http协定提交的数据,抉择数据选项卡,点击导入按钮,从开发者工具中复制Post数据。 8、如果须要循环提交数据,能够设置数据起源为txt文档或Excel表格,软件每次运行到本步骤时,主动从文件读取一行数据或一条记录提交。点击单步测试按钮,立刻提交数据,在测试后果中显示服务器响应数据。同时在木头浏览器中显示返回的页面内容。

July 3, 2021 · 1 min · jiezi

关于http:COSC-23912401-Style-Gaming-Wheel

代写、代做Java课程作业、Java编程作业调试、代写Casino Style作业Further Programming COSC 2391/2401Semester 1, 2019Casino Style Gaming WheelAssignment Part 1: Console Implementation(25 marks)NOTE: The provided Javadoc and commented interface source code is your mainspecification, this document only serves as an overview. You should also regularly follow theCanvas assignment discussion board for assignment related clarifications and discussion.This assignment requires you to implement a game engine and console-based user interface (loggingoutput only, no user interaction required) for a casino style gaming wheel that is loosely based onRoulette but with a simplified betting and scoring system.The rules are simple, each player places a bet with three different bet types, each with the oddsdescribed below. The house then spins the wheel and the result is the numbered and colored SLOTthe ball lands in when it stops.After the wheel spins the win or loss amount is applied to the players point balance as follows.Bet Type Odds Description ExampleRed 1 to 1 Win on redslot/numberBet 100 win or lose100Black 1 to 1 Win on blackslot/numberAs aboveZeros WHEEL_SIZE / 2 – 1to 1 for win, 1 to 1 forlossWin on green 0 or 00slotsBet 100 win 1800 orlose 100*Table 1 – Bet types and odds to be implemented ...

June 28, 2021 · 11 min · jiezi

关于http:Android客户端网络预连接优化机制探究

一、背景个别状况下,咱们都是用一些封装好的网络框架去申请网络,对底层实现不甚关注,而大部分状况下也不须要特地关注解决。得益于因特网的协定,网络分层,咱们能够只在应用层去解决业务就行。然而理解底层的一些实现,有益于咱们对网络加载进行优化。本文就是对于依据http的连贯复用机制来优化网络加载速度的原理与细节。 二、连贯复用对于一个一般的接口申请,通过charles抓包,查看网络申请Timing栏信息,咱们能够看到相似如下申请时长信息: Duration 175 msDNS 6 msConnect 50 msTLS Handshake 75 msRequest 1 msResponse 1 msLatency 42 ms同样的申请,再来一次,时长信息如下所示: Duration 39 msDNS -Connect -TLS Handshake -Request 0 msResponse 0 msLatency 39 ms咱们发现,整体网络申请工夫从175ms升高到了39ms。其中DNS,Connect,TLS Handshake 前面是个横线,示意没有时长信息,于是整体申请时长极大的升高了。这就是Http(s)的连贯复用的成果。那么问题来了,什么是连贯复用,为什么它能升高申请工夫? 在解决这个疑难之前,咱们先来看看一个网络申请发动,到收到返回的数据,这两头产生了什么? 客户端发动网络申请通过DNS服务解析域名,获取服务器IP (基于UDP协定的DNS解析)建设TCP连贯(3次握手)建设TLS连贯(https才会用到)发送网络申请request服务器接管request,结构并返回responseTCP连贯敞开(4次挥手)下面的连贯复用间接让下面2,3,4步都不须要走了。这两头省掉的时长应该怎么算?如果咱们定义网络申请一次发动与收到响应的一个来回(一次通信来回)作为一个RTT(Round-trip delay time)。 1)DNS默认基于UDP协定,解析起码须要1-RTT; 2)建设TCP连贯,3次握手,须要2-RTT; (图片起源自网络) 3)建设TLS连贯,依据TLS版本不同有区别,常见的TLS1.2须要2-RTT。 Client ServerClientHello --------> ServerHello Certificate* ServerKeyExchange* CertificateRequest* <-------- ServerHelloDoneCertificate*ClientKeyExchangeCertificateVerify*[ChangeCipherSpec]Finished --------> [ChangeCipherSpec] <-------- FinishedApplication Data <-------> Application Data TLS 1.2握手流程(来自 RFC 5246)注:TLS1.3版本相比TLS1.2,反对0-RTT数据传输(可选,个别是1-RTT),但目前支持率比拟低,用的很少。http1.0版本,每次http申请都须要建设一个tcp socket连贯,申请实现后敞开连贯。前置建设连贯过程可能就会额定破费4-RTT,性能低下。 http1.1版本开始,http连贯默认就是长久连贯,能够复用,通过在报文头部中加上Connection:Close来敞开连贯 。如果并行有多个申请,可能还是须要建设多个连贯,当然咱们也能够在同一个TCP连贯上传输,这种状况下,服务端必须依照客户端申请的先后顺序顺次回送后果。 注:http1.1默认所有的连贯都进行了复用。然而闲暇的长久连贯也能够随时被客户端与服务端敞开。不发送Connection:Close不意味着服务器承诺连贯永远放弃关上。http2 更进一步,反对二进制分帧,实现TCP连贯的多路复用,不再须要与服务端建设多个TCP连贯了,同域名的多个申请能够并行进行。 ...

June 17, 2021 · 4 min · jiezi

关于http:免费网络代理的质量如何

代理IP是当初很多人常常应用的工具,比方网络营销、推广、爬虫等等都须要用到代理ip,还有IP被网站限度的问题都能够应用代理IP来解决。许多人都晓得代理IP有收费和付费两种,那么,收费网络代理的品质如何呢?毫无疑问,收费的网络代理不须要花钱,能够收费取得。但获取收费可用的代理ip是有些麻烦的,因为你要从泛滥的代理ip中筛选出可用的ip,还要常常保护ip池,比拟消耗工夫。若是你不常常应用代理ip或者只是进行小数据爬取的还是能够应用收费的网络代理的。如果你须要大量的注册账号、爬取数据等,收费代理ip就不实用了,因为收费代理ip可能不止你一个人应用,如果他人在应用这个ip的时候被限度拜访,当你再次应用的时候很容易受到影响。简而言之,收费代理ip可用性不高,影响工作效率。以上内容是对收费网络代理品质的剖析。如果你的业务须要高纯度、高可用性的代理ip,收费代理ip可能不适宜你的业务。

June 16, 2021 · 1 min · jiezi

关于http:COMP-1043-Problem-Solving-and-Programming

UO Problem Solving and ProgrammingProgramming Assignment 3IntroductionThis document describes the first assignment for Problem Solving and Programming.The assignment is intended to provide you with the opportunity to put into practice what you have learnt in the course by applying your knowledge and skills to implement a game of Blackjack.This document is a kind of specification of the required end product that will be generated by implementing the assignment. Like many specifications, it is written in English and hence will contain some imperfectly specified parts. Please make sure you seek clarification if you are not clear on any aspect of this assignment.Assignment OverviewYou are required to write a Python program that allows a player to play a game of Blackjack against the computer. The program will allow a player to play as many games of Blackjack as they wish. ...

June 16, 2021 · 37 min · jiezi

关于http:什么是Socks5代理协议

现在,人们在生存和工作中常常须要应用代理ip。依据协定,代理ip能够分为http代理、https代理、Socks代理等。在这些代理中,Socks5是一种常见的代理ip类型。上面ipidea小编给大家介绍一下Socks5代理协定。Socks属于一个代理协定,能够在一些应用层协定两头工作(比方HTTP(S),FTP等)。SOCKS5是SOCKS协定的最新版本。它通过反对UDP和TCP对SOCKS4进行了改良,减少反对UDP、验证,以及IPv6。Socks5代理协定反对多种协定,实践上应用层协定都能够反对,比方HTTP(S)/WS(S)/SSH等。实际上,HTTP代理是最罕用的代理服务器,但SOCKS5确实有它的长处。它们能够解决更多协定并绕过防火墙,从而使它们成为须要隐衷而又无需太多工作的人的重要工具。以上就是Socks5代理协定的具体介绍,大家在抉择代理ip类型时,须要理解各种类型代理ip的特点,从而抉择最合适本人的。

June 15, 2021 · 1 min · jiezi

关于http:HTTP有哪些特点

HTTP有哪些特点 HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和标准。1.灵便可扩大HTTP协定通过空格分隔单词、换行符分隔字段等语法语义规定了报文的根本格局,以及body不再限于文本模式的传输数据,使得HTTP协定能够失去开发者的任意定制。例如传输图片、音视频等数据流,以及传输的实体数据可缓存可压缩、可分段获取数据、反对身份认证、反对国际化语言等性能的实现。 2.牢靠传输因为HTTP协定是基于TCP/IP协定进行数据传输的应用层协定。因而继承了TCP/IP协定牢靠传输的个性。HTTP协定对理论传输数据进行封装后,调用Socket API,通过 TCP/IP 协定栈发送或者接管,可能最大限度保证数据的牢靠传输。 3.应用层协定HTTP协定是一个应用层协定。区别于ftp协定只能传输文件、smtp协定只能发送邮件,HTTP 凭借着可携带任意头字段和实体数据的报文构造,以及连贯管制、缓存代理等不便易用的个性。简直能够传递所有数据,满足各种需要。 4.申请-应答申请-应答模式是HTTP协定最根本的通信模型。只有当申请方发动动作后,应答刚才会作出响应。 5.无状态HTTP 协定是无状态的。区别于TCP/IP协定的三次握手和四次挥手。HTTP在传输完结之后,从新发动第二次申请时,应答方不会记录第一次发动申请的状态。在建设连贯前两者互不知情,每次收发的报文也都是相互独立的,没有任何的分割。 与HTTP协定、TCP/IP协定不同,UDP协定既无状态也无连贯,程序发包乱序收包。而HTTP协定属于有连贯无状态,程序发包程序收包,依照收发的程序治理报文。

June 15, 2021 · 1 min · jiezi

关于http:HTTP报文结构

HTTP报文构造1.申请报文:申请行,申请头,申请体 其中 POST /wdinfo.php HTTP/1.1\r\n 是申请行,POST示意申请办法,另一种罕用的申请办法为GET,/wdinfo.php是申请地址,HTTP/1.1示意应用HTTP协定,版本为1.1\r是回车,\n是换行,\r\n示意申请行完结。申请头里的参数,以key:vlaue模式显示。申请头常见的参数有:Content-Type:用于阐明申请体数据的格局,如x-www-form-urlencoded,text/xml,application/json等User-Agent:阐明浏览器版本,操作系统等信息Host:域名Content-Length:示意申请体的长度,服务端能够依据此参数确认数据是否接管残缺Cache-control:缓存设置Accept:代表客户端心愿接管的数据类型。如:Accept:text/html,代表客户端心愿接管的数据类型是html类型Accept-Encoding:代表客户端心愿接管服务端返回数据的压缩模式,如Accept-Encoding:gzip,deflate,示意客户端心愿返回数据被压缩成gzip,压缩的目标是为了进步传输效率Accept-Language:示意反对的语言,如Accept-Language: zh-cn,zh;q=0.5,示意浏览器反对的语言是简体中文和中文,优先反对简体中文Accept-Charset:示意客户端心愿服务端返回数据的编码格局,如Accept-Charset: iso-8859-1,示意客户端心愿返回数据的编码格局为iso-8859-1申请头和申请体之间用一空行隔开,申请体能够为空。Connection:示意是否须要长久连贯。(HTTP 1.1默认进行长久连贯) 2.响应报文:状态行,响应头,响应体 其中 HTTP/1.1 200 OK \r\n 和申请行区别在少了协定HTTP,多了状态码200,示意200申请胜利.状态码有以下几种:1XX:示意接管到申请,能够持续申请2XX:申请胜利,示意申请已被胜利承受3XX:重定向4XX:客户端谬误5XX:服务端谬误响应头常见的参数有:Server:服务器应用程序软件的名称和版本Content-Type:阐明响应体数据的格局Content-Length:响应体的长度Content-Charset:返回内容的类型Content-Encoding:响应内容压缩编码类型,如Content-Encoding: gzipContent-Language:响应体的语言,如Content-Language: en,zhCache-Control:通知所有的缓存机制是否能够缓存及哪种类型,如Cache-Control: no-cache参考文章:Web服务之HTTP报文HTTP 响应头与状态码

June 15, 2021 · 1 min · jiezi

关于http:实际的Web服务器处理客户端请求的步骤分析

第一步——承受客户端连贯承受一个客户端连贯,或者如果不心愿与这个客户端建设连贯,就将其敞开。 第二步——接管申请报文从网络中读取一条HTTP申请报文 解析报文1. 解析申请行,查找申请办法、指定的资源标识符(URI)以及版本号,各项之间由一个空格分隔,并以一个回车换行(CRLF)序列作为行的完结;2. 读取以CRLF结尾的报文首部;3. 检测到以CRLF结尾的、标识首部完结的空行(如果有的话);4. 如果有的话(长度由Content-Length首部指定),读取申请主体。报文的外部表示法有些Web服务器还会用便于进行报文操作的外部数据结构来存储申请报文 连贯的输出/输入解决构造不同的Web服务器构造会以不同的形式为申请服务 单线程Web服务器一次只解决一个申请,直到其实现为止。一个事务处理完结之后,才去解决下一条连贯 多过程及多线程Web服务器服务器会为每条连贯调配一个线程/过程;但当服务器同时要解决成百、上千,甚至数以万计的连贯时,须要的过程或线程数量可能会耗费太多的内存或系统资源。因而,很多多线程Web服务器都会对线程/过程的最大数量进行限度。 复用I/O的服务器Web服务器都采纳了复用构造。在复用构造中,要同时监督所有连贯上的流动。当连贯的状态发生变化时(比方,有数据可用,或呈现谬误时),就对那条连贯进行大量的解决;解决完结之后,将连贯返回到凋谢连贯列表中,期待下一次状态变动。只有在有事件可做时才会对连贯进行解决;在闲暇连贯上期待的时候并不会绑定线程和过程。 复用的多线程Web服务器有些零碎会将多线程和复用性能联合在一起,以利用计算机平台上的多个CPU。多个线程(通常是一个物理处理器)中的每一个都在察看关上的连贯(或关上的连贯中的一个子集),并对每条连贯执行大量的工作 第三步——解决申请对申请报文进行解释,并采取行动,比方post可能提交了一些信息,服务器须要来解决这些信息 第四步——对资源的映射及拜访拜访报文中的指定资源,比方Get申请依据地址映射获取服务器上的某个文件。 docroot通常,Web服务器的文件系统中会有一个非凡的文件夹专门用于寄存Web内容。这个文件夹被称为文档的根目录(document root,或docroot)。Web服务器从申请报文中获取URI,并将其附加在文档根目录的前面。很多web服务器都反对配置document 在配置文件httpd.conf中增加一个DocumentRoot行就能够为Apache Web服务器设置文档的根目录了:DocumentRoot /usr/local/httpd/files 虚构托管的docroot虚构托管的Web服务器会在同一台Web服务器上提供多个Web站点;每个站点在服务器上都有本人独有的文档根目录。虚构托管Web服务器会依据URI或Host首部的IP地址或主机名来辨认要应用的正确文档根目录。通过这种形式,即便申请URI完全相同,托管在同一Web服务器上的两个Web站点也能够领有齐全不同的内容了。 解析目录咱们能够对大多数Web服务器进行配置,使其在客户端申请目录URL时采取不同的动作。 1. 返回一个谬误。2. 不返回目录,返回一个非凡的默认“索引文件”(Web服务器可自行配置索引优先级)。3. 扫描目录,返回一个蕴含目录内容的HTML页面(主动生成且返回一个展现目录下的所有文件/目录的html文件)。大多数Web服务器都会去查找目录中一个名为index.html或index.htm的文件来代表此目录。如果用户申请的是一个目录的URL,而且这个目录中有一个名为index.html(或index.htm)的文件,服务器就会返回那个文件的内容。 第五步——构建响应一旦Web服务器辨认出了资源,就执行申请办法中形容的动作,并返回响应报文。 响应实体如果事务处理产生了响应主体,就将内容放在响应报文中回送过来。响应报文中通常包含: 1. 形容了响应主体MIME类型的Content-Type首部;2. 形容了响应主体长度的Content-Length首部;3. 理论报文的主体内容。重定向Web服务器有时会返回重定向响应而不是胜利的报文。Web服务器能够将浏览器重定向到其余中央来执行申请。重定向响应由返回码3XX阐明。Location响应首部蕴含了内容的新地址或优选地址的URI。重定向可用于下列状况。 永恒搬离的资源资源可能曾经被挪动到了新的地位,或者被重新命名,有了一个新的URL。态码301Moved Permanently就用于此类重定向。 长期搬离的资源如果资源被长期移走或重命名了,服务器可能心愿将客户端重定向到新的地位下来。状态码303 See Other以及状态码307 Temporary Redirect就用于此类重定向。 URL加强服务器通常用重定向来重写URL,往往用于嵌入上下文。当申请达到时,服务器会生成一个新的蕴含了嵌入式状态信息的URL,并将用户重定向到这个新的URL下来。[插图]客户端会追随这个重定向信息,从新发动申请,但这次的申请会蕴含残缺的、通过状态加强的URL。这是在事务间保护状态的一种无效形式。状态码303 See Other和307 Temporary Redirect用于此类重定向。 负载平衡如果一个超载的服务器收到一条申请,服务器能够将客户端重定向到一个负载不太重的服务器下来。状态码303 See Other和307 TemporaryRedirect可用于此类重定向。 第六步——发送响应将响应报文返回给客户端 第七步——记录日志最初,当事务完结时,Web服务器会在日志文件中增加一个条目,来形容已执行的事务。大多数Web服务器都提供了几种日志配置格局。

June 14, 2021 · 1 min · jiezi

关于http:HTTP持续连接和管道化连接

继续连贯重用已对指标服务器关上的闲暇连贯,就能够避开迟缓的连贯建设阶段。而且,曾经关上的连贯还能够防止慢启动的拥塞适应阶段,以便更疾速地进行数据的传输。 建设继续连贯keep-aliveHTTP/1.0 keep-alive连贯的客户端能够通过蕴含Connection: Keep-Alive首部申请将一条连贯放弃在关上状态。HTTP/1.1客户端默认Keep-Alive是关上的 keep-alive参数1. 参数timeout是在Keep-Alive响应首部发送的。它预计了服务器心愿将连贯放弃在沉闷状态的工夫。这并不是一个承诺值。2. 参数max是在Keep-Alive响应首部发送的。它预计了服务器还心愿为多少个事务放弃此连贯的沉闷状态。这并不是一个承诺值。Keep-Alive连贯的限度和规定1. 发送了Connection: close申请首部之后,客户端就无奈在那条连贯上发送更多的申请了。2. 只有响应报文的主体长度(Content-Length)确定或者能够确定响应报文什么时候能发送完(Transfer-Encoding),这样能力建设继续连贯,否则不能3. 每个长久连贯都只实用于一跳传输。4. 除非申请有副作用,否则如果申请在实现之前连贯敞开了,浏览器会主动从新发送该申请5. 一个用户客户端对任何服务器或代理最多只能保护两条长久连贯,以防服务器过载管道化连贯HTTP/1.1容许在长久连贯上可选地应用申请管道。这是绝对于keep-alive连贯的又一性能优化。在响应达到之前,能够将多条申请放入队列。当第一条申请通过网络流向地球另一端的服务器时,第二条和第三条申请也能够开始发送了。在高时延网络条件下,这样做能够升高网络的环回工夫,进步性能。 管道化的限度如果HTTP客户端无奈确认连贯是长久的,就不应该应用管道。必须依照与申请雷同的程序回送HTTP响应HTTP客户端必须做好连贯会在任意时刻敞开的筹备,还要筹备好重发所有未实现的管道化申请。如果客户端关上了一条长久连贯,并立刻收回了10条申请,服务器可能在只解决了,比方说,5条申请之后敞开连贯。剩下的5条申请会失败,客户端必须可能应答这些过早敞开连贯的状况,从新收回这些申请。HTTP客户端不应该用管道化的形式发送会产生副作用的申请(比方POST)。出错的时候,管道化形式会妨碍客户端理解服务器执行的是一系列管道化申请中的哪一些。因为无奈平安地重试POST这样的非幂等申请,所以出错时,就存在某些办法永远不会被执行的危险。留神点和一些名词解释http继续连贯敞开时的一些问题HTTP应用程序要做好正确处理非预期敞开的筹备。如果在客户端执行事务的过程中,传输连贯敞开了,那么,除非事务处理会带来一些副作用,否则客户端就应该从新关上连贯,并重试一次。对管道化连贯来说,这种状况更加重大一些。客户端能够将大量申请放入队列中排队,但源端服务器能够敞开连贯,这样就会留下大量未解决的申请,须要从新调度。 事务副作用副作用是很重要的问题。如果在发送出一些申请数据之后,收到返回后果之前,连贯敞开了,客户端就无奈百分之百地确定服务器端理论激活了多少事务。有些事务,比方GET一个动态的HTML页面,能够重复执行屡次,也不会有什么变动。而其余一些事务,比方向一个在线书店POST一张订单,就不能反复执行,不然会有下多张订单的危险。 事务幂等性如果一个事务,不论是执行一次还是很屡次,失去的后果都雷同,这个事务就是幂等的。实现者们能够认为GET、HEAD、PUT、DELETE、TRACE和OPTIONS办法都共享这一个性。客户端不应该以管道化形式传送非幂等申请(比方POST)。否则,传输连贯的过早终止就会造成一些不确定的结果。

June 14, 2021 · 1 min · jiezi

关于http:get和post的区别

1.get申请发一次tcp包,post申请发两次tcp包。get把所有数据一次性发送给服务器,post第一次先发蕴含申请头的tcp包,服务器返回状态码100,示意服务器收到了申请的初始局部,请客户端持续发送,第二次发蕴含申请体的tcp包。2.get申请形式参数通过"?"拼接在url后,post申请形式参数放在申请体中。3.get申请形式长度有限度,个别在2K~4K,而post申请形式长度不限。4.get申请形式参数是在url中是可见的,post须要捉包能力看到参数,后者绝对来讲安全性好一些。5.get能够缓存,post不能缓存。

June 14, 2021 · 1 min · jiezi

关于http:HTTP-Post请求的四种编码方式

HTTP协定规定 POST 提交的数据必须放在音讯主体(entity-body)中,但协定并没有规定数据必须应用什么编码方式。实际上,开发者齐全能够本人决定音讯主体的格局,只有最初发送的 HTTP 申请满足下面的格局就能够。然而,数据发送进来,还要服务端解析胜利才有意义。个别服务端语言如 php、python 等,以及它们的 framework,都内置了主动解析常见数据格式的性能。服务端通常是依据申请头(headers)中的 Content-Type 字段来获知申请中的音讯主体是用何种形式编码,再对主体进行解析。所以说到 POST 提交数据计划,蕴含了 Content-Type 和音讯主体编码方式两局部。 POST申请中,提交的数据放到音讯体中,并且提供了四种数据的编码方式。 FORM表单的 enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。默认地,表单数据会编码为 "application/x-www-form-urlencoded"。就是说,在发送到服务器之前,所有字符都会进行编码(空格转换为 "+" 加号,特殊符号转换为 ASCII HEX 值)。 四种enctype属性值值形容application/x-www-form-urlencoded在发送前编码所有字符(默认)multipart/form-data不对字符编码。在应用蕴含文件上传控件的表单时,必须应用该值。application/jsontext/plain空格转换为 "+" 加号,但不对特殊字符编码。上面就正式开始介绍它们。 1.application/x-www-form-urlencoded这应该是最常见的 POST 提交数据的形式了。浏览器的原生 <form> 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 形式提交数据。 <form action="form_action.asp" enctype="text/plain"> <p>First name: <input type="text" name="fname" /></p> <p>Last name: <input type="text" name="lname" /></p> <input type="submit" value="Submit" /></form>此时Form提交的申请数据,抓包时看到的申请会是这样的内容(无关的申请头在本文中都省略掉了): POST http://www.example.com HTTP/1.1Content-Type: application/x-www-form-urlencoded;charset=utf-8title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3首先,Content-Type 被指定为 application/x-www-form-urlencoded; 其次,提交的数据依照 key1=val1&key2=val2 的形式进行编码,key 和 val 都进行了 URL 转码。大部分服务端语言都对这种形式有很好的反对。例如 PHP 中,$_POST['title'] 能够获取到 title 的值,$_POST['sub'] 能够失去 sub 数组。 ...

June 13, 2021 · 2 min · jiezi

关于http:HTTP-contenttype

Content-Type(内容类型),个别是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么模式、什么编码读取这个文件,这就是常常看到一些 PHP 网页点击的后果却是下载一个文件或一张图片的起因。 Content-Type 标头通知客户端理论返回的内容的内容类型。 语法格局: Content-Type: text/html; charset=utf-8Content-Type: multipart/form-data; boundary=something实例: 常见的媒体格式类型如下: text/html : HTML格局text/plain :纯文本格式text/xml : XML格局image/gif :gif图片格式image/jpeg :jpg图片格式image/png:png图片格式以application结尾的媒体格式类型: application/xhtml+xml :XHTML格局application/xml: XML数据格式application/atom+xml :Atom XML聚合格局application/json: JSON数据格式application/pdf:pdf格局application/msword : Word文档格局application/octet-stream : 二进制流数据(如常见的文件下载)application/x-www-form-urlencoded : <form encType=””>中默认的encType,form表单数据被编码为key/value格局发送到服务器(表单默认的提交数据的格局)另外一种常见的媒体格式是上传文件之时应用的: multipart/form-data : 须要在表单中进行文件上传时,就须要应用该格局HTTP content-type 对照表文件扩展名Content-Type(Mime-Type)文件扩展名Content-Type(Mime-Type).*( 二进制流,不晓得下载文件类型)application/octet-stream.tifimage/tiff.001application/x-001.301application/x-301.323text/h323.906application/x-906.907drawing/907.a11application/x-a11.acpaudio/x-mei-aac.aiapplication/postscript.aifaudio/aiff.aifcaudio/aiff.aiffaudio/aiff.anvapplication/x-anv.asatext/asa.asfvideo/x-ms-asf.asptext/asp.asxvideo/x-ms-asf.auaudio/basic.avivideo/avi.awfapplication/vnd.adobe.workflow.biztext/xml.bmpapplication/x-bmp.botapplication/x-bot.c4tapplication/x-c4t.c90application/x-c90.calapplication/x-cals.catapplication/vnd.ms-pki.seccat.cdfapplication/x-netcdf.cdrapplication/x-cdr.celapplication/x-cel.cerapplication/x-x509-ca-cert.cg4application/x-g4.cgmapplication/x-cgm.citapplication/x-cit.classjava/*.cmltext/xml.cmpapplication/x-cmp.cmxapplication/x-cmx.cotapplication/x-cot.crlapplication/pkix-crl.crtapplication/x-x509-ca-cert.csiapplication/x-csi.csstext/css.cutapplication/x-cut.dbfapplication/x-dbf.dbmapplication/x-dbm.dbxapplication/x-dbx.dcdtext/xml.dcxapplication/x-dcx.derapplication/x-x509-ca-cert.dgnapplication/x-dgn.dibapplication/x-dib.dllapplication/x-msdownload.docapplication/msword.dotapplication/msword.drwapplication/x-drw.dtdtext/xml.dwfModel/vnd.dwf.dwfapplication/x-dwf.dwgapplication/x-dwg.dxbapplication/x-dxb.dxfapplication/x-dxf.ednapplication/vnd.adobe.edn.emfapplication/x-emf.emlmessage/rfc822.enttext/xml.epiapplication/x-epi.epsapplication/x-ps.epsapplication/postscript.etdapplication/x-ebx.exeapplication/x-msdownload.faximage/fax.fdfapplication/vnd.fdf.fifapplication/fractals.fotext/xml.frmapplication/x-frm.g4application/x-g4.gbrapplication/x-gbr.application/x-.gifimage/gif.gl2application/x-gl2.gp4application/x-gp4.hglapplication/x-hgl.hmrapplication/x-hmr.hpgapplication/x-hpgl.hplapplication/x-hpl.hqxapplication/mac-binhex40.hrfapplication/x-hrf.htaapplication/hta.htctext/x-component.htmtext/html.htmltext/html.htttext/webviewhtml.htxtext/html.icbapplication/x-icb.icoimage/x-icon.icoapplication/x-ico.iffapplication/x-iff.ig4application/x-g4.igsapplication/x-igs.iiiapplication/x-iphone.imgapplication/x-img.insapplication/x-internet-signup.ispapplication/x-internet-signup.IVFvideo/x-ivf.javajava/*.jfifimage/jpeg.jpeimage/jpeg.jpeapplication/x-jpe.jpegimage/jpeg.jpgimage/jpeg.jpgapplication/x-jpg.jsapplication/x-javascript.jsptext/html.la1audio/x-liquid-file.larapplication/x-laplayer-reg.latexapplication/x-latex.lavsaudio/x-liquid-secure.lbmapplication/x-lbm.lmsffaudio/x-la-lms.lsapplication/x-javascript.ltrapplication/x-ltr.m1vvideo/x-mpeg.m2vvideo/x-mpeg.m3uaudio/mpegurl.m4evideo/mpeg4.macapplication/x-mac.manapplication/x-troff-man.mathtext/xml.mdbapplication/msaccess.mdbapplication/x-mdb.mfpapplication/x-shockwave-flash.mhtmessage/rfc822.mhtmlmessage/rfc822.miapplication/x-mi.midaudio/mid.midiaudio/mid.milapplication/x-mil.mmltext/xml.mndaudio/x-musicnet-download.mnsaudio/x-musicnet-stream.mochaapplication/x-javascript.movievideo/x-sgi-movie.mp1audio/mp1.mp2audio/mp2.mp2vvideo/mpeg.mp3audio/mp3.mp4video/mpeg4.mpavideo/x-mpg.mpdapplication/vnd.ms-project.mpevideo/x-mpeg.mpegvideo/mpg.mpgvideo/mpg.mpgaaudio/rn-mpeg.mppapplication/vnd.ms-project.mpsvideo/x-mpeg.mptapplication/vnd.ms-project.mpvvideo/mpg.mpv2video/mpeg.mpwapplication/vnd.ms-project.mpxapplication/vnd.ms-project.mtxtext/xml.mxpapplication/x-mmxp.netimage/pnetvue.nrfapplication/x-nrf.nwsmessage/rfc822.odctext/x-ms-odc.outapplication/x-out.p10application/pkcs10.p12application/x-pkcs12.p7bapplication/x-pkcs7-certificates.p7capplication/pkcs7-mime.p7mapplication/pkcs7-mime.p7rapplication/x-pkcs7-certreqresp.p7sapplication/pkcs7-signature.pc5application/x-pc5.pciapplication/x-pci.pclapplication/x-pcl.pcxapplication/x-pcx.pdfapplication/pdf.pdfapplication/pdf.pdxapplication/vnd.adobe.pdx.pfxapplication/x-pkcs12.pglapplication/x-pgl.picapplication/x-pic.pkoapplication/vnd.ms-pki.pko.plapplication/x-perl.plgtext/html.plsaudio/scpls.pltapplication/x-plt.pngimage/png.pngapplication/x-png.potapplication/vnd.ms-powerpoint.ppaapplication/vnd.ms-powerpoint.ppmapplication/x-ppm.ppsapplication/vnd.ms-powerpoint.pptapplication/vnd.ms-powerpoint.pptapplication/x-ppt.prapplication/x-pr.prfapplication/pics-rules.prnapplication/x-prn.prtapplication/x-prt.psapplication/x-ps.psapplication/postscript.ptnapplication/x-ptn.pwzapplication/vnd.ms-powerpoint.r3ttext/vnd.rn-realtext3d.raaudio/vnd.rn-realaudio.ramaudio/x-pn-realaudio.rasapplication/x-ras.ratapplication/rat-file.rdftext/xml.recapplication/vnd.rn-recording.redapplication/x-red.rgbapplication/x-rgb.rjsapplication/vnd.rn-realsystem-rjs.rjtapplication/vnd.rn-realsystem-rjt.rlcapplication/x-rlc.rleapplication/x-rle.rmapplication/vnd.rn-realmedia.rmfapplication/vnd.adobe.rmf.rmiaudio/mid.rmjapplication/vnd.rn-realsystem-rmj.rmmaudio/x-pn-realaudio.rmpapplication/vnd.rn-rn_music_package.rmsapplication/vnd.rn-realmedia-secure.rmvbapplication/vnd.rn-realmedia-vbr.rmxapplication/vnd.rn-realsystem-rmx.rnxapplication/vnd.rn-realplayer.rpimage/vnd.rn-realpix.rpmaudio/x-pn-realaudio-plugin.rsmlapplication/vnd.rn-rsml.rttext/vnd.rn-realtext.rtfapplication/msword.rtfapplication/x-rtf.rvvideo/vnd.rn-realvideo.samapplication/x-sam.satapplication/x-sat.sdpapplication/sdp.sdwapplication/x-sdw.sitapplication/x-stuffit.slbapplication/x-slb.sldapplication/x-sld.slkdrawing/x-slk.smiapplication/smil.smilapplication/smil.smkapplication/x-smk.sndaudio/basic.soltext/plain.sortext/plain.spcapplication/x-pkcs7-certificates.splapplication/futuresplash.spptext/xml.ssmapplication/streamingmedia.sstapplication/vnd.ms-pki.certstore.stlapplication/vnd.ms-pki.stl.stmtext/html.styapplication/x-sty.svgtext/xml.swfapplication/x-shockwave-flash.tdfapplication/x-tdf.tg4application/x-tg4.tgaapplication/x-tga.tifimage/tiff.tifapplication/x-tif.tiffimage/tiff.tldtext/xml.topdrawing/x-top.torrentapplication/x-bittorrent.tsdtext/xml.txttext/plain.uinapplication/x-icq.ulstext/iuls.vcftext/x-vcard.vdaapplication/x-vda.vdxapplication/vnd.visio.vmltext/xml.vpgapplication/x-vpeg005.vsdapplication/vnd.visio.vsdapplication/x-vsd.vssapplication/vnd.visio.vstapplication/vnd.visio.vstapplication/x-vst.vswapplication/vnd.visio.vsxapplication/vnd.visio.vtxapplication/vnd.visio.vxmltext/xml.wavaudio/wav.waxaudio/x-ms-wax.wb1application/x-wb1.wb2application/x-wb2.wb3application/x-wb3.wbmpimage/vnd.wap.wbmp.wizapplication/msword.wk3application/x-wk3.wk4application/x-wk4.wkqapplication/x-wkq.wksapplication/x-wks.wmvideo/x-ms-wm.wmaaudio/x-ms-wma.wmdapplication/x-ms-wmd.wmfapplication/x-wmf.wmltext/vnd.wap.wml.wmvvideo/x-ms-wmv.wmxvideo/x-ms-wmx.wmzapplication/x-ms-wmz.wp6application/x-wp6.wpdapplication/x-wpd.wpgapplication/x-wpg.wplapplication/vnd.ms-wpl.wq1application/x-wq1.wr1application/x-wr1.wriapplication/x-wri.wrkapplication/x-wrk.wsapplication/x-ws.ws2application/x-ws.wsctext/scriptlet.wsdltext/xml.wvxvideo/x-ms-wvx.xdpapplication/vnd.adobe.xdp.xdrtext/xml.xfdapplication/vnd.adobe.xfd.xfdfapplication/vnd.adobe.xfdf.xhtmltext/html.xlsapplication/vnd.ms-excel.xlsapplication/x-xls.xlwapplication/x-xlw.xmltext/xml.xplaudio/scpls.xqtext/xml.xqltext/xml.xquerytext/xml.xsdtext/xml.xsltext/xml.xslttext/xml.xwdapplication/x-xwd.x_bapplication/x-x_b.sisapplication/vnd.symbian.install.sisxapplication/vnd.symbian.install.x_tapplication/x-x_t.ipaapplication/vnd.iphone.apkapplication/vnd.android.package-archive.xapapplication/x-silverlight-app

June 13, 2021 · 1 min · jiezi

关于http:httpconnection首部字段的作用

Connection的三种类型Connection首部能够承载4种不同类型的标签,因而有时会很令人费解: 1. HTTP首部字段名,列出了只与此连贯无关的首部;2. 任意标签值,用于形容此连贯的非标准选项;3. 值close,阐明操作实现之后需敞开这条长久连贯。HTTP 1.0默认值4. 值keep-alive , 开启HTTP长久连贯,HTTP 1.1默认值HTTP首部字段名举个栗子,客户端发送申请报文,代理服务器承受到这个申请报文之后,客户端的申请报文中的Connection字段指定的头部字段,代理服务器会把这些指定的字段从申请报文中剔除掉之后再转发。比方例子中Meter字段 任意标签值它是不在规范外面的。例子中的bill-my-credit-card属于任意标签值,他这个假想指的是发送报文方本人指定,而非标准的首部字段,也就是自定义首部字段 connection的作用-对首部的爱护当代理收到一条带有Connection首部的报文时,会解析发送端申请的所有选项,并将其利用。而后会在将此报文转发给服务器之前,删除Connection首部以及Connection中列出的所有首部。也就是这些首部字段只在这层应用,在服务器层无奈获取。

June 13, 2021 · 1 min · jiezi

关于http:HTTP事务的时延

MSL是Maximum Segment Lifetime英文的缩写,中文能够译为“报文最大生存工夫”,他是任何报文在网络上存在的最长工夫,超过这个工夫报文将被抛弃。MSS:最大报文段长度 TCP连贯的握手时延 tcp建设须要工夫通常HTTP事务都不会替换太多数据,此时,SYN/SYN+ACK握手(参见上图-8a和上图-8b)会产生一个可测量的时延。TCP连贯的ACK分组(参见上图-8c)通常都足够大,能够承载整个HTTP申请报文,而且很多HTTP服务器响应报文都能够放入一个IP分组中去(比方,响应是蕴含了装饰性图片的小型HTML文件,或者是对浏览器高速缓存申请产生的304 Not Modified响应)。最初的后果是,小的HTTP事务可能会在TCP建设上破费50%,或更多的工夫提早确认因为因特网本身无奈确保牢靠的分组传输(因特网路由器超负荷的话,能够随便抛弃分组),所以TCP实现了本人的确认机制来确保数据的胜利传输。每个TCP段都有一个序列号和数据完整性校验和。每个段的接收者收到完整的段时,都会向发送者回送小的确认分组。如果发送者没有在指定的窗口工夫内收到确认信息,发送者就认为分组已被毁坏或损毁,并重发数据。因为确认报文很小,所以TCP容许在发往雷同方向的输入数据分组中对其进行“捎带”。TCP将返回的确认信息与输入的数据分组联合在一起,能够更无效地利用网络。为了减少确认报文找到同向传输数据分组的可能性,很多TCP栈都实现了一种“提早确认”算法。提早确认算法会在一个特定的窗口工夫(通常是100~200毫秒)内将输入确认寄存在缓冲区中,以寻找可能捎带它的输入数据分组。如果在那个时间段内没有输入数据分组,就将确认信息放在独自的分组中传送。 TCP慢启动TCP数据传输的性能还取决于TCP连贯的使用期(age)。TCP连贯会随着工夫进行自我“调谐”,起初会限度连贯的最大速度,如果数据胜利传输,会随着工夫的推移进步传输的速度。这种调谐被称为TCP慢启动(slow start),用于避免因特网的忽然过载和拥塞。TCP慢启动限度了一个TCP端点在任意时刻能够传输的分组数。简略来说,每胜利接管一个分组,发送端就有了发送另外两个分组的权限。如果某个HTTP事务有大量数据要发送,是不能一次将所有分组都发送进来的。必须发送一个分组,期待确认;而后能够发送两个分组,每个分组都必须被确认,这样就能够发送四个分组了,以此类推。这种形式被称为“关上拥塞窗口”。 Nagle算法Nagle算法激励发送全尺寸(mss)(LAN上最大尺寸的分组大概是1500字节,在因特网上是几百字节)的段。 if there is new data to send #有数据要发送 # 发送窗口缓冲区和队列数据 >=mss,队列数据(available data)为原有的队列数据加上新到来的数据 # 也就是说缓冲区数据超过mss大小,nagle算法尽可能发送足够大的数据包 if the window size >= MSS and available data is >= MSS send complete MSS segment now # 立刻发送 else if there is unconfirmed data still in the pipe # 前一次发送的包没有收到ack # 将该包数据放入队列中,直到收到一个ack再发送缓冲区数据 enqueue data in the buffer until an acknowledge is received else send data immediately # 立刻发送 end if end if end if Nagle算法的规定(1)如果包长度达到MSS,则容许发送;(2)如果该蕴含有FIN(敞开连贯标识),则容许发送;(3)设置了TCP_NODELAY选项,则容许发送;默认状况下,发送数据采纳Nagle 算法。这样尽管进步了网络吞吐量,然而实时性却升高了,在一些交互性很强的应用程序来说是不容许的,应用TCP_NODELAY选项能够禁止Nagle 算法。(4)之前产生的包都曾经确认了,则容许发送;(5)上述条件都未满足,但产生了超时(个别为200ms),则立刻发送。 ...

June 12, 2021 · 1 min · jiezi

关于http:url编码和解码

url为什么要编码URL只能应用一些绝对较小的、通用的平安字母表中的字符。人们设计了一种编码机制,用来在URL中示意各种不平安的字符。这种编码机制就是通过一种“本义”表示法来示意不平安字符的,这种本义表示法蕴含一个百分号(%),前面跟着两个示意字符ASCII码的十六进制数。 上面列出了几个例子。 保留字符与限度字符在URL中,有几个字符被保留起来,有着非凡的含意。有些字符不在定义的US-ASCII可打印字符集中。还有些字符会与某些因特网网关和协定产生混同,因而不赞成应用。上面列出了一些字符,在将其用于保留用处之外的场合时,要在URL中对其进行编码。 编码和解码办法encodeURI 和 decodeURI 函数操作的是残缺的 URI;这俩函数假设 URI 中的任何保留字符都有非凡意义,所有不会编码它们。encodeURIComponent 和 decodeURIComponent 函数操作的是组成 URI 的个别组件;这俩函数假设任何保留字符都代表一般文本,所以必须编码它们,所以它们(保留字符)呈现在一个残缺 URI 的组件外面时不会被解释成保留字符了。 encodeURI("https://segmentfault.com/write")//返回后果"https://segmentfault.com/write"encodeURIComponent("https://segmentfault.com/write")//返回后果"https%3A%2F%2Fsegmentfault.com%2Fwrite"

June 11, 2021 · 1 min · jiezi

关于http:从浏览器输入URL到页面加载的具体流程http协议

从浏览器输出URL到页面加载的具体流程(http协定)域名解析建设TCP连贯浏览器发送HTTP申请服务器解决申请并返回HTTP报文浏览器解析渲染页面连贯完结1.域名解析域名在解析的过程中会有多级缓存,首先浏览器会查找本身缓存中是否存在对应的ip信息,若没有则会进一步向操作系统的缓存要,还没有的话,则会查看本机的域名解析文件hosts,看是否存在对应的域名 - ip配置信息。如果通过以上步骤依然无奈获取域名对应的ip地址,则会被动向DNS服务器发动申请,获取IP地址。 DNS 域名零碎(Domain Name System)是互联网的一项服务。它作为将域名和IP地址互相映射的一个分布式数据库,可能使人更不便地拜访互联网。以查问 zh.wikipedia.org 为例: 客户端发送查问报文"query zh.wikipedia.org"至DNS服务器,DNS服务器首先查看本身缓存,如果存在记录则间接返回后果。如果记录老化或不存在,则:DNS服务器向根域名服务器发送查问报文"query zh.wikipedia.org",根域名服务器返回顶级域 .org 的顶级域名服务器地址。DNS服务器向 .org 域的顶级域名服务器发送查问报文"query zh.wikipedia.org",失去二级域 .wikipedia.org 的权威域名服务器地址。DNS服务器向 .wikipedia.org 域的权威域名服务器发送查问报文"query zh.wikipedia.org",失去主机 zh 的A记录,存入本身缓存并返回给客户端。2.建设TCP连贯HTTP协定是在TCP/IP协定的根底上运行的,依附TCP/IP协定进行牢靠的数据传输,因而浏览器在发送申请前,须要先建设TCP连贯。 建设TCP连贯流程(三次握手): 客户端(通过执行connect函数)向服务器端发送一个SYN包,申请一个被动关上。该包携带客户端为这个连贯申请而设定的随机数A作为音讯序列号。服务器端收到一个非法的SYN包后,把该包放入SYN队列中;回送一个SYN/ACK。ACK的确认码应为A+1,SYN/ACK包自身携带一个随机产生的序号B。客户端收到SYN/ACK包后,发送一个ACK包,该包的序号被设定为A+1,而ACK的确认码则为B+1。而后客户端的connect函数胜利返回。当服务器端收到这个ACK包的时候,把申请帧从SYN队列中移出,放至ACCEPT队列中;这时accept函数如果处于阻塞状态,能够被唤醒,从ACCEPT队列中取出ACK包,从新创立一个新的用于双向通信的sockfd,并返回。3.浏览器发送HTTP申请TCP连贯构建胜利后,浏览器依据HTTP协定规定的格局,构建HTTP申请报文并通过TCP协定发送到服务器指定端口,申请报文由三局部组成:申请行、申请报头和申请注释。 申请行:形容申请或响应的根本信息。头部字段汇合:应用 key-value 模式更具体地阐明报文。音讯注释:理论传输的数据,它不肯定是纯文本,能够是图片、视频等二进制数据。4.服务器解决申请并返回HTTP报文HTTP响应报文由三局部组成: 状态行:版本号、状态码、起因。响应头部字段:应用 key-value 模式更具体地阐明报文。响应注释:服务器发送给浏览器的内容。5.浏览器解析渲染页面简要流程: HTML解析与DOM树构建CSS解析渲染6.连贯完结TCP四次挥手,完结连贯。

June 11, 2021 · 1 min · jiezi

关于http:SameSite-那些事

在《Web 安全漏洞之 CSRF》中咱们理解到,CSRF 的实质实际上是利用了 Cookie 会主动在申请中携带的个性,诱使用户在第三方站点发动申请的行为。除了文中说的一些解决形式之外,规范还专门为 Cookie 减少了 SameSite 属性,用来躲避该问题。Chrome 于 2015 年 6 月反对了该属性,Firefox 和 Safari 紧随其后也减少了反对。SameSite 属性有以下几个值: SameSite=None:无论是否跨站都会发送 CookieSameSite=Lax:容许局部第三方申请携带 CookieSameSite=Strict:仅容许同站申请携带 Cookie,即以后网页 URL 与申请指标 URL 完全一致该属性适宜所有在网页下的申请,包含但不限于网页中的 JS 脚本、图片、iframe、接口等页面内的申请。能够看到 None 是最宽松的,和之前的行为无异。而 Lax 和 Strict 都针对跨站的状况下做了限度。其中 Strict 最为严格,不容许任何跨站状况下携带该 Cookie。Lax 则绝对宽松一点,容许了一些显式跳转后的 GET 行为携带。以下是一个带有 SameSite 属性的规范 Cookie 响应示例: Set-Cookie: name=lizheming; SameSite=None; Secure须要留神的是,浏览器做了仅针对 HTTPS 域名才反对 SameSite=None 配置。所以如果你要设置 SameSite=None 的话,则必须还要携带 Secure 属性才行。 Same SiteSame Site 直译过去就是同站,它和咱们之前说的同域 Same Origin 是不同的。两者的区别次要在于判断的规范是不一样的。一个 URL 次要有以下几个局部组成: 能够看到同域的判断比拟严格,须要 protocol, hostname, port 三局部完全一致。相对而言,Cookie 中的同站判断就比拟宽松,次要是依据 Mozilla 保护的公共后缀表(Pulic Suffix List)应用无效顶级域名(eTLD)+1的规定查找失去的一级域名是否雷同来判断是否是同站申请。 ...

June 11, 2021 · 2 min · jiezi

关于http:http-主要版本的历史

一、定义http协定:超文本传输协定(通信协议),用于从服务器传输超文本到本地浏览,建设再TCP/IP协定根底上三个特点:1、无连贯 是限度每次连贯只解决一个申请。服务器解决完客户的申请,并收到客户的应答后,即断开连接。采纳这种形式能够节俭传输工夫 2、无状态 是指协定对于事务处理没有记忆能力。短少状态意味着如果后续解决须要后面的信息,则它必须重传,这样可能导致每次连贯传送的数据量增大。另一方面,在服务器不须要先前信息时它的应答就较快 3、灵便容许传输任意类型的数据对象。传输的类型由Content-Type(Content-Type是HTTP包中用来示意内容类型的标识)加以标记 HTTP/0.9版本特点:构造简略,仅有GET申请,纯文本格式 例如GET /index.html示意:TCP建设连贯后,客户端向服务端申请index.html页面,协定规定,服务端只能返字符串,返回后即敞开TCP链接,如果申请的页面不存在,也不反悔任何错误码,这也是无状态的一个体现HTTP/1.0版本相比拟上一个版本减少了如下次要内容: 减少了post申请,丰盛了浏览器与客户端的互动伎俩传输数据不限于文本,能够是图片、视频、二进制文件等内容减少了协定版本号减少的响应状态码引入了HTTP HEADER(头部)概念,让HTTP解决申请更加灵便GET /HTTP/1.0User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5)Accept: */*HTTP/1.0 200 OKContent-Type: text/plainContent-Length: 137582Expires: Thu, 05 Dec 1997 16:00:00 GMTLast-Modified: Wed, 5 August 1996 15:55:28 GMTServer: Apache 0.84<html>  <body>Hello World</body></html>其中content-type是体现灵便的字段,咱们常见的value值包含:text/html, text/css, image/png, application/javascript, application/x-www-form-urlencoded form, Multipart/form-data,以上数据统称为MIME类型。 1.0的毛病:连贯无奈复用:每个TCP连贯只能发送一个申请。发送数据结束,连贯就敞开,如果还要申请其余资源,就必须再新建一个连贯。为了解决这个问题,有些浏览器在申请时,用了一个非标准的Connection字段:Connection: keep-alive,示意TCP能够复用,直到被动敞开链接。 下面是又没有keep-alive的区别,然而这不是规范字段,不同实现的行为可能不统一,因而不是基本的解决办法,并且TCP的新建老本很高,因为每次链接服务端和客户端都须要通过三次握手,并且开始时发送的速率较慢。 HTTP/1.1版本也就是目前地位用的最多的一个版本,相比拟1.0版本减少了: 长久链接,默认TCP不敞开,能够被多个申请复用,不必申明connection:keep-alive字段新增了PUT、PATCH、OPTIONS、DELETE申请办法,也新增了许多状态码强制HOST头:HTTP1.0中认为每台服务器都绑定一个惟一的IP地址,因而,申请音讯中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的倒退,在一台物理服务器上能够存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的申请音讯和响应音讯都应反对Host头域,且申请音讯中如果没有Host头域会报告一个谬误(400 Bad Request)。有了Host字段,就能够将申请发往同一台服务器上的不同网站,为虚拟主机的衰亡打下了根底缓存解决:HTTP/1.0 应用 Pragma:no-cache + Last-Modified/If-Modified-Since + Expire来作为缓存判断的规范;HTTP/1.1 引入了更多的缓存控制策略:Cache-Control、Etag/If-None-Match管道机制(pipelining):即在同一个TCP链接外面,客户端能够共事发送多个申请。从而进一步改善HTTP协定的效率问题 例如:客户端须要申请两个资源。以前的做法是,在同一个TCP连贯外面,先发送A申请,而后期待服务器做出回应,收到后再收回B申请。管道机制则是容许浏览器同时收回A申请和B申请,然而服务器还是依照程序,先回应A申请,实现后再回应B申请,通过下图能够很清晰的看出区别1.1毛病:尽管1.1版容许复用TCP连贯,然而同一个TCP连贯外面,所有的数据通信是按秩序进行的。服务器只有解决完一个回应,才会进行下一个回应。要是后面的回应特地慢,前面就会有许多申请排队等着。这称为“队头梗塞"(Head-of-line blocking)解决方案:1、缩小申请数量(雪碧图)2、多开长久链接,如下图中并行的申请,就是多开了几个TCP链接,然而浏览器也有规定,同一域名下TCP开启的个数时无限,个别不超过10个,这也是SEO中,将资源CDN的起因。 个人见解:1.1版本中减少了许多头部的标识,使得申请更加的灵便,例如类型、缓存等等!利用好了能大幅晋升申请效率,也能够当作优化的重点去攻克!然而也有太多的字段须要去学习,有利有弊吧!接下来就是重点HTTP/2 HTTP/2版本为什么是2而不是2.0,因为规范委员会不筹备公布子版本,下一个版本将是HTTP/31、二进制传输:在HTTP1.x中,咱们是通过文本的形式传输数据。基于文本的形式传输数据存在很多缺点,文本的表现形式有多样性,因而要做到健壮性思考的场景必然有很多,然而二进制则不同,只有0和1的组合,因而抉择了二进制传输,实现不便且强壮。为了保障HTTP不受影响,那就须要在应用层(HTTP2.0)和传输层(TCP or UDP)之间减少一个二进制分帧层。在二进制分帧层上,HTTP2.0会将所有传输的信息分为更小的音讯和帧,并采纳二进制格局编码,其中HTTP1.x的首部信息会被封装到Headers frame,而Request Body则封装到Data frame。 ...

June 2, 2021 · 1 min · jiezi

关于http:理解http

HTTP特点无状态:长处应答快,毛病不晓得先前信息(这是也是cookie的作用)无连贯:每次链接只发送一次申请灵便:能够容许任意类型的数据对象简略疾速:只传申请办法和门路,罕用的申请办法:GET POST HEDE反对客户/服务器模式HTTP1和HTTP2 的区别特点HTTP1HTTP2采纳的数据格式文本格式二进制格局链接形式一次链接一次申请,起初增加了keep-alive(长链接)多路复用申请头没有压缩压缩了申请头资源加载客户端解析html后,在向服务器发出请求,加载资源服务器将资源相应被动推送给客户缓存中keep-alive 和多路复用的区别 keep-alive 因为http1是串行的文件传输,所以服务器相应前一次申请后,能力发动第二次申请,依照程序发送申请,浏览器最大的申请数是6,服务器是50,当第51集体拜访时,必须期待前50集体。 多路复用能够同时发送多个申请,HTTP2最重要的概念是 帧 和流 ; 帧是最小的数据单位,流是由帧组成的数据流,多路复用就是一个TCP链接能够存在多个帧,对端能够通过帧中的标识,晓得属于那个申请

May 14, 2021 · 1 min · jiezi

关于http:常见面试题之计算机网络

title: 常见面试题之计算机网络categories: [网络通信]tags:[面试题]date: 2021/05/13 作者:hackett 微信公众号:加班猿 计算机网络1 请你说一下TCP怎么保障可靠性,并且简述一下TCP建设连贯和断开连接的过程TCP保障可靠性: (1)序列号、确认应答、超时重传 数据达到接管方,接管方须要收回一个确认应答,示意曾经收到该数据段,并且确认序号会阐明了它下一次须要接管的数据序列号。如果发送发迟迟未收到确认应答,那么可能是发送的数据失落,也可能是确认应答失落,这时发送方在期待肯定工夫后会进行重传。这个工夫个别是2*RTT(报文段往返工夫)+一个偏差值。 (2)窗口管制与高速重发管制/疾速重传(反复确认应答) TCP会利用窗口管制来进步传输速度,意思是在一个窗口大小内,不必肯定要等到应答能力发送下一段数据,窗口大小就是无需期待确认而能够持续发送数据的最大值。如果不应用窗口管制,每一个没收到确认应答的数据都要重发。 应用窗口管制,如果数据段1001-2000失落,前面数据每次传输,确认应答都会不停地发送序号为1001的应答,示意我要接管1001开始的数据,发送端如果收到3次雷同应答,就会立即进行重发;但还有种状况有可能是数据都收到了,然而有的应答失落了,这种状况不会进行重发,因为发送端晓得,如果是数据段失落,接收端不会放过它的,会疯狂向它揭示...... (3)拥塞管制 如果把窗口定的很大,发送端间断发送大量的数据,可能会造成网络的拥挤(大家都在用网,你在这狂发,吞吐量就那么大,当然会堵),甚至造成网络的瘫痪。所以TCP在为了避免这种状况而进行了拥塞管制。 慢启动:定义拥塞窗口,一开始将该窗口大小设为1,之后每次收到确认应答(通过一个rtt),将拥塞窗口大小*2。 拥塞防止:设置慢启动阈值,个别开始都设为65536。拥塞防止是指当拥塞窗口大小达到这个阈值,拥塞窗口的值不再指数回升,而是加法减少(每次确认应答/每个rtt,拥塞窗口大小+1),以此来防止拥塞。 将报文段的超时重传看做拥塞,则一旦产生超时重传,咱们须要先将阈值设为以后窗口大小的一半,并且将窗口大小设为初值1,而后从新进入慢启动过程。 疾速重传:在遇到3次反复确认应答(高速重发管制)时,代表收到了3个报文段,然而这之前的1个段失落了,便对它进行立刻重传。 而后,先将阈值设为以后窗口大小的一半,而后将拥塞窗口大小设为慢启动阈值+3的大小。 这样能够达到:在TCP通信时,网络吞吐量出现逐步的回升,并且随着拥挤来升高吞吐量,再进入缓缓回升的过程,网络不会轻易的产生瘫痪。 TCP建设连贯和断开连接的过程: 三次握手: \1. Client将标记位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,期待Server确认。 \2. Server收到数据包后由标记位SYN=1晓得Client申请建设连贯,Server将标记位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连贯申请,Server进入SYN_RCVD状态。 \3. Client收到确认后,查看ack是否为J+1,ACK是否为1,如果正确则将标记位ACK置为1,ack=K+1,并将该数据包发送给Server,Server查看ack是否为K+1,ACK是否为1,如果正确则连贯建设胜利,Client和Server进入ESTABLISHED状态,实现三次握手,随后Client与Server之间能够开始传输数据了。 四次挥手: 因为TCP连贯时全双工的,因而,每个方向都必须要独自进行敞开,这一准则是当一方实现数据发送工作后,发送一个FIN来终止这一方向的连贯,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,然而在这个TCP连贯上依然可能发送数据,直到这一方向也发送了FIN。首先进行敞开的一方将执行被动敞开,而另一方则执行被动敞开。 1.数据传输完结后,客户端的利用过程收回连贯开释报文段,并进行发送数据,客户端进入FIN_WAIT_1状态,此时客户端仍然能够接管服务器发送来的数据。 2.服务器接管到FIN后,发送一个ACK给客户端,确认序号为收到的序号+1,服务器进入CLOSE_WAIT状态。客户端收到后进入FIN_WAIT_2状态。 3.当服务器没有数据要发送时,服务器发送一个FIN报文,此时服务器进入LAST_ACK状态,期待客户端的确认 4.客户端收到服务器的FIN报文后,给服务器发送一个ACK报文,确认序列号为收到的序号+1。此时客户端进入TIME_WAIT状态,期待2MSL(MSL:报文段最大生存工夫),而后敞开连贯。 2 请你说一说TCP的模型四层TCP/IP模型如下: 3 请答复一下HTTP和HTTPS的区别,以及HTTPS有什么毛病?HTTP协定和HTTPS协定区别如下: 1)HTTP协定是以明文的形式在网络中传输数据,而HTTPS协定传输的数据则是通过TLS加密后的,HTTPS具备更高的安全性 2)HTTPS在TCP三次握手阶段之后,还须要进行SSL 的handshake,协商加密应用的对称加密密钥 3)HTTPS协定须要服务端申请证书,浏览器端装置对应的根证书 4)HTTP协定端口是80,HTTPS协定端口是443 HTTPS长处: HTTPS传输数据过程中应用密钥进行加密,所以安全性更高 HTTPS协定能够认证用户和服务器,确保数据发送到正确的用户和服务器 HTTPS毛病: HTTPS握手阶段延时较高:因为在进行HTTP会话之前还须要进行SSL握手,因而HTTPS协定握手阶段延时减少 HTTPS部署老本高:一方面HTTPS协定须要应用证书来验证本身的安全性,所以须要购买CA证书;另一方面因为采纳HTTPS协定须要进行加解密的计算,占用CPU资源较多,须要的服务器配置或数目高 4 请你说一说HTTP返回码HTTP协定的响应报文由状态行、响应头部和响应包体组成,其响应状态码总体形容如下: 1xx:批示信息--示意申请已接管,持续解决。 2xx:胜利--示意申请已被胜利接管、了解、承受。 3xx:重定向--要实现申请必须进行更进一步的操作。 4xx:客户端谬误--申请有语法错误或申请无奈实现。 5xx:服务器端谬误--服务器未能实现非法的申请。 常见状态代码、状态形容的具体阐明如下。 200 OK:客户端申请胜利。 206 partial content服务器曾经正确处理局部GET申请,实现断点续传或同时分片下载,该申请必须蕴含Range申请头来批示客户端冀望失去的范畴 300 multiple choices(可选重定向):被申请的资源有一系列可供选择的反馈信息,由浏览器/用户自行抉择其中一个。 301 moved permanently(永恒重定向):该资源已被永恒挪动到新地位,未来任何对该资源的拜访都要应用本响应返回的若干个URI之一。 ...

May 13, 2021 · 1 min · jiezi

关于http:get请求和post请求的区别

GET和POST是HTTP申请的两种根本办法,要说它们的区别,接触过WEB开发的人都能说出一二。 最直观的区别就是GET把参数蕴含在URL中,POST通过request body传递参数。 你可能本人写过无数个GET和POST申请,或者曾经看过很多权威网站总结出的他们的区别,你十分分明晓得什么时候该用什么。 当你在面试中被问到这个问题,你的心田充斥了自信和喜悦。 你轻轻松松的给出了一个“标准答案”: GET在浏览器回退时是有害的,而POST会再次提交申请。 GET产生的URL地址能够被Bookmark,而POST不能够。 GET申请会被浏览器被动cache,而POST不会,除非手动设置。 GET申请只能进行url编码,而POST反对多种编码方式。 GET申请参数会被残缺保留在浏览器历史记录里,而POST中的参数不会被保留。 GET申请在URL中传送的参数是有长度限度的,而POST么有。 对参数的数据类型,GET只承受ASCII字符,而POST没有限度。 GET比POST更不平安,因为参数间接裸露在URL上,所以不能用来传递敏感信息。 GET参数通过URL传递,POST放在Request body中。 (本标准答案参考自w3schools) “很遗憾,这不是咱们要的答复!” 请通知我假相。。。 如果我通知你GET和POST实质上没有区别你信吗? 让咱们扒下GET和POST的外衣,坦诚相见吧! GET和POST是什么?HTTP协定中的两种发送申请的办法。 HTTP是什么?HTTP是基于TCP/IP的对于数据如何在万维网中如何通信的协定。 HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事件是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是齐全行的通的。 那么,“标准答案”里的那些区别是怎么回事? 在我大万维网世界中,TCP就像汽车,咱们用TCP来运输数据,它很牢靠,从来不会产生丢件少件的景象。然而如果路上跑的全是看起来截然不同的汽车,那这个世界看起来是一团凌乱,送急件的汽车可能被后面满载货物的汽车拦堵在路上,整个交通系统肯定会瘫痪。为了防止这种状况产生,交通规则HTTP诞生了。HTTP给汽车运输设定了好几个服务类别,有GET, POST, PUT, DELETE等等,HTTP规定,当执行GET申请的时候,要给汽车贴上GET的标签(设置method为GET),而且要求把传送的数据放在车顶上(url中)以不便记录。如果是POST申请,就要在车上贴上POST的标签,并把货物放在车厢里。当然,你也能够在GET的时候往车厢内偷偷藏点货物,然而这是很不荣耀;也能够在POST的时候在车顶上也放一些数据,让人感觉傻乎乎的。HTTP只是个行为准则,而TCP才是GET和POST怎么实现的根本。 然而,咱们只看到HTTP对GET和POST参数的传送渠道(url还是requrest body)提出了要求。“标准答案”里对于参数大小的限度又是从哪来的呢? 在我大万维网世界中,还有另一个重要的角色:运输公司。不同的浏览器(发动http申请)和服务器(承受http申请)就是不同的运输公司。 尽管实践上,你能够在车顶上有限的堆货物(url中有限加参数)。然而运输公司可不傻,装货和卸货也是有很大老本的,他们会限度单次运输量来管制危险,数据量太大对浏览器和服务器都是很大累赘。业界不成文的规定是,(大多数)浏览器通常都会限度url长度在2K个字节,而(大多数)服务器最多解决64K大小的url。超过的局部,恕不解决。如果你用GET服务,在request body偷偷藏了数据,不同服务器的解决形式也是不同的,有些服务器会帮你卸货,读出数据,有些服务器间接疏忽,所以,尽管GET能够带request body,也不能保障肯定能被接管到哦。 好了,当初你晓得,GET和POST实质上就是TCP链接,并无差别。然而因为HTTP的规定和浏览器/服务器的限度,导致他们在利用过程中体现出一些不同。 你认为本文就这么完结了? 咱们的大BOSS还等着出场呢。。。 这位BOSS有多神秘?当你试图在网上找“GET和POST的区别”的时候,那些你会看到的搜寻后果里,从没有提到他。他到底是什么呢。。。 GET和POST还有一个重大区别,简略的说: GET产生一个TCP数据包;POST产生两个TCP数据包。 长的说: 对于GET形式的申请,浏览器会把http header和data一并发送进来,服务器响应200(返回数据); 而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。 也就是说,GET只须要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,而后再回头把货送过来。 因为POST须要两步,工夫上耗费的要多一点,看起来GET比POST更无效。因而Yahoo团队有举荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。为什么? GET与POST都有本人的语义,不能轻易混用。据钻研,在网络环境好的状况下,发一次包的工夫和发两次包的工夫差异根本能够忽视。而在网络环境差的状况下,两次包的TCP在验证数据包完整性上,有十分大的长处。并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

May 6, 2021 · 1 min · jiezi

关于golang:golang-io-timeout-希望你不要踩到这个nethttp包的坑

i/o timeout , 心愿你不要踩到这个net/http包的坑文章继续更新,能够微信搜一搜「golang小白成长记」第一工夫浏览,回复【教程】获golang收费视频教程。本文曾经收录在GitHub https://github.com/xiaobaiTec... , 有大厂面试残缺考点和成长路线,欢送Star。 问题咱们来看一段日常代码。 package mainimport ( "bytes" "encoding/json" "fmt" "io/ioutil" "net" "net/http" "time")var tr *http.Transportfunc init() { tr = &http.Transport{ MaxIdleConns: 100, Dial: func(netw, addr string) (net.Conn, error) { conn, err := net.DialTimeout(netw, addr, time.Second*2) //设置建设连贯超时 if err != nil { return nil, err } err = conn.SetDeadline(time.Now().Add(time.Second * 3)) //设置发送承受数据超时 if err != nil { return nil, err } return conn, nil }, }}func main() { for { _, err := Get("http://www.baidu.com/") if err != nil { fmt.Println(err) break } }}func Get(url string) ([]byte, error) { m := make(map[string]interface{}) data, err := json.Marshal(m) if err != nil { return nil, err } body := bytes.NewReader(data) req, _ := http.NewRequest("Get", url, body) req.Header.Add("content-type", "application/json") client := &http.Client{ Transport: tr, } res, err := client.Do(req) if res != nil { defer res.Body.Close() } if err != nil { return nil, err } resBody, err := ioutil.ReadAll(res.Body) if err != nil { return nil, err } return resBody, nil}做的事件,比较简单,就是循环去申请 http://www.baidu.com/ , 而后期待响应。 ...

April 22, 2021 · 6 min · jiezi

关于前端:重学前端http-和https

(1)http 和 https 的基本概念http: 超文本传输协定(Hyper Text Transfer Protocol),是互联网上利用最为宽泛的一种网络协议,是一个客户端和服务器端申请和应答的规范(TCP),用于从 WWW 服务器传输超文本到本地浏览器的传输协定,它能够使浏览器更加高效,使网络传输缩小。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查问后果等)https: 是以平安为指标的 HTTP 通道,简略讲是 HTTP 的平安版,即 HTTP 下退出 SSL层,HTTPS 的平安根底是 SSL,因而加密的具体内容就须要 SSL。https 协定的次要作用是:建设一个信息安全通道,来确保数组的传输,确保网站的实在性。(2)http 和 https 的区别?http 传输的数据都是未加密的,也就是明文的,网景公司设置了 SSL 协定来对 http 协定传输的数据进行加密解决,简略来说 https 协定是由 http 和 ssl 协定构建的可进行加密传输和身份认证的网络协议,比 http 协定的安全性更高。次要的区别如下:Https 协定须要 ca 证书,费用较高。http 是超文本传输协定,信息是明文传输,https 则是具备安全性的 ssl 加密传输协定。应用不同的链接形式,端口也不同,一般而言,http 协定的端口为 80,https 的端口为443http 的连贯很简略,是无状态的;HTTPS 协定是由 SSL+HTTP 协定构建的可进行加密传输、身份认证的网络协议,比 http 协定平安。(3)https 协定的工作原理客户端在应用 HTTPS 形式与 Web 服务器通信时有以下几个步骤,如图所示。 客户应用 https url 拜访服务器,则要求 web 服务器建设 ssl 链接。web 服务器接管到客户端的申请之后,会将网站的证书(证书中蕴含了公钥),返回或者说传输给客户端。客户端和 web 服务器端开始协商 SSL 链接的安全等级,也就是加密等级。客户端浏览器通过单方协商一致的安全等级,建设会话密钥,而后通过网站的公钥来加密会话密钥,并传送给网站。web 服务器通过本人的私钥解密出会话密钥。web 服务器通过会话密钥加密与客户端之间的通信。(4)https 协定的长处应用 HTTPS 协定可认证用户和服务器,确保数据发送到正确的客户机和服务器;HTTPS 协定是由 SSL+HTTP 协定构建的可进行加密传输、身份认证的网络协议,要比http 协定平安,可避免数据在传输过程中不被窃取、扭转,确保数据的完整性。HTTPS 是现行架构下最平安的解决方案,尽管不是相对平安,但它大幅减少了中间人攻击的老本。谷歌曾在 2014 年 8 月份调整搜索引擎算法,并称“比起等同 HTTP 网站,采纳 HTTPS加密的网站在搜寻后果中的排名将会更高”。(5)https 协定的毛病https 握手阶段比拟费时,会使页面加载工夫缩短 50%,减少 10%~20%的耗电。https 缓存不如 http 高效,会减少数据开销。SSL 证书也须要钱,性能越弱小的证书费用越高。SSL 证书须要绑定 IP,不能再同一个 ip 上绑定多个域名,ipv4 资源反对不了这种耗费。 ...

April 19, 2021 · 1 min · jiezi

关于http:HTTP-413-错误-Payload-Too-Large

呈现此谬误时我在互联网上寻找过很多起因,大部分都说的是上传大文件出了问题,而且相干环境是 nginx,然而我用的是 IIS Web 寄存器,而且基本就没有上传文件,仅仅只是表单提交了很多内容,没有发现有人呈现相似的问题。起初我是在 MDN 上找到了相干的异样信息,并且 MDN 把信息指向了 RFC 7231 文件的某一节,如下图: 再起初我在某一外国网站上(www.codetwo.com)找到了解决方案,配置 IIS 上的问题网站,在 system.webServer/serverRuntime 下的 uploadReadAheadSize 属性上批改限度的大小就行了,留神默认状况下该节是被锁定了的,只能在 IIS 总配置进行更改,不能通过网站的 Web.config 进行批改,目前尚不分明是否与网站的 SSL 有关系。 相干环境:IIS 7.5

April 17, 2021 · 1 min · jiezi

关于http:HTTP11-详解附-PDF-图书下载

一、HTTP 简介HTTP(Hyper Text Transfer Protocol,超文本传输协定)是一个用于传输超媒体文档(例如 HTML)的应用层协定,被设计用于 Web 浏览器与 Web 服务器之间的通信(但也能够用于其余目标),它通常基于 TCP/IP 协定传输数据。 简略来说就是客户端和服务端进行数据传输的一种规定。Web 应用 HTTP 协定作为标准,实现从客户端到服务器端等一系列运作流程。能够说,Web 是建设在 HTTP 协定上通信的。 二、与 HTTP 相干的协定:IP、TCP、DNSTCP/IP 协定族 TCP/IP 协定是互联网相关联的各类协定汇合的总称。不同的网络间要互相通信,就是在 TCP/IP 协定族的根底上运作的,而 IP、ICMP、TCP、UDP、FTP、HTTP 等都属于它外部的一个子集。 TCP/IP 协定族按档次别离分为以下四层: 应用层传输层网络层(又名网络互连层)链路层(又名数据链路层,网络接口层) 负责传输的 IP 协定 / IP 地址 IP 协定 Internet Protocol 网络之间互连的协定,位于网络层。简直所有应用网络的零碎都会用到 IP 协定,它的作用是把各种数据传送给对方。 IP 地址 IP地址是IP协定提供的一种对立的地址格局,它指明了每一个网络和每一台主机被调配到的逻辑地址。在同一个网络中,IP 地址具备唯一性。 在 IP 协定中,IP 地址有两个版本 IPv4 网络应用32为地址,以点分十进制示意,如:192.168.0.1、罕用于测试的本机地址127.0.0.1IPv6 地址的128位(16个字节)写成8个16位的无符号整数,每个整数用四个十六进制位示意,这些数之间用冒号(:)离开,例如:3ffe:3201:1401:1280:c8ff:fe4d:db39:1984在 windows 下,能够通过 ipconfig 查看本机的 IP 地址确保可靠性的 TCP 协定 Transmission Control Protocol 传输控制协议,用于从应用程序到网络的数据传输管制,是一种牢靠的、基于字节流的传输层通信协议。 TCP 负责在数据传送之前,将它们宰割成以报文段为单位的 IP 数据报包,而后在它们达到的时候将它们重组。 ...

April 15, 2021 · 2 min · jiezi

关于http:Tomcat服务器

一、服务器相干概念1、什么是服务器 服务器:分为软件服务器和硬件服务器硬件服务器:运行在互联网上的、具备动态IP的一台计算机(通常配置比拟高)软件服务器:运行在互联网上的计算机程序(软件),将服务器软件装置在硬件服务器上,才能够对外提供服务。 服务器软件分为很多种:数据库服务器(MySQL,Oracle,SQL Server等),Web服务器(tomcat,jetty,jboss等),邮件服务器,FTP服务器。。。2、什么Web服务器 Web服务器: 运行在互联网上的计算机程序,专门用于接管客户端的申请,依据申请进行解决,最初给出回应!比方:关上浏览器,输出"http://www.baidu.com"回车,其实拜访的就是百度的服务器,此时会向百度服务器发送一个申请,申请百度的首页,百度服务器会接管并解决这个申请,依据申请给出回应(将百度首页响应给客户端浏览器)tomcat就是一个Web服务器,特点是:玲珑灵便,简略易用,学习老本非常低!二、Tomcat服务器下载、装置、启动、配置1、下载tomcat服务器 下载地址: http://tomcat.apache.orgtomcat分为很多版本,有windows版本(解压版和安装版)、linux版本举荐应用解压版(须要用的时候解压一份,不须要用了间接删除解压的目录即可!)2、tomcat的装置、启动、配置2.1.装置tomcat 装置:解压之后就能够应用(装置的门路中最好不要蕴含中文和空格)在启动tomcat之前,须要配置(查看)一个JAVA_HOME环境变量,该变量须要指向JDK的装置根目录变量名:JAVA_HOME变量值:D:\software\Java\jdk1.8.0_161因为tomcat服务器是由Java语言开发的,所以运行tomcat须要JDK的反对JAVA_HOME这个变量就是在通知tomcat服务器,须要应用哪一个地位上的JDK.2.1.启动tomcat 启动tomcat: 通过[tomcat装置目录]/bin/startup.bat文件能够启动tomcat服务器;敞开tomcat: 通过[tomcat装置目录]/bin/shutdown.bat文件能够敞开tomcat服务器; 或者间接点击右上角的叉号 启动tomcat之后,能够关上浏览器,拜访: http://localhost:8080 http://127.0.0.1:8080 如果能够拜访到tomcat服务器的主页,就阐明tomcat装置并且启动胜利了!3.批改tomcat服务器默认端口 如果不批改端口,每次在拜访tomcat服务器时,都须要在主机名/ip地址的前面加上:8080如果想在拜访时,在主机名或ip地址前面省略端口,能够将端口批改为80(这个端口非凡,能够省略不写!)批改端口的办法是: 找到[tomcat装置目录]/conf/server.xml并用文本编辑工具关上这个文件 找到文件的69行,将Connector标签上的port属性值改为80,保留文件,并重启服务器即可失效!重启服务器后,就能够通过如下门路拜访tomcat服务器: http://localhost http://127.0.0.1三、tomcat服务器的目录构造 bin: 寄存批处理文件的目录(startup.bat、shutdown.bat文件)conf: 寄存tomcat配置文件的目录(server.xml是tomcat外围配置文件)lib: 寄存tomcat服务器在运行时所依赖的jar包的目录logs: 存在tomcat服务器在运行时产生的日志文件的目录temp: 寄存tomcat服务器在运行时产生的临时文件的目录work: 寄存tomcat服务器在运行期间产生的一些工作文件 (JSP在第一次被拜访时翻译后的Servlet文件、 session对象序列化(序列化是指:将对象以流的模式在网上进行传输或者是保留在硬盘上;反序列化:把文件以流的模式读到服务器的内存中变成对象)后产生的文件等都会放在这个目录下)webapps: 是Web利用的寄存目录,放在这个目录中的Web应用程序, 能够通过localhost虚拟主机进行拜访 webapps目录是localhost主机默认寄存Web利用的目录 把Web利用放在webapps目录下,就相当于公布到了localhost主机中 四、Web利用和虚拟主机1、Web利用: Web利用其实就是一个目录,其中能够蕴含很多资源文件(html/css/js/图片/jsp/servlet..等)虚拟主机中不能间接治理Web资源文件(html/css/js/图片/jsp..等)须要将Web资源文件组织成一个Web利用(目录),将Web利用公布到虚拟主机中运行才能够被虚拟主机所治理2、虚拟主机: 就是在tomcat服务器中配置的一个站点,在拜访时就如同在拜访一台实在独立的主机一样咱们将这个站点称之为是,运行在tomcat服务器中的一台虚拟主机tomcat服务器中能够配置多个站点,每一个站点都是一台虚拟主机。上面是tomcat默认提供的localhost主机的配置:<Host name="localhost" appBase="webapps"...></Host><Host name="www.baidu123.com" appBase="baidu"...></Host>========================================================1)在服务器硬件上装置了一个tomcat服务器软件2)在tomcat服务器软件外部能够配置多个站点(虚拟主机),其中tomcat默认自带了一个localhost虚拟主机。3)localhost虚拟主机默认治理Web利用的目录--webapps,公布到webapps目录下的web利用,也就都公布到了localhost主机中4)往webapps中公布了一个 jt web利用,其中蕴含一些Web资源文件5)web资源文件能够是(html/css/js/图片/servlet/jsp等)五、Web利用1、Web利用的目录构造 news(目录,Web利用) |-- 也能够将Web资源文件放在Web利用的根目录下 |-- 其它目录(放在其它目录中的资源文件能够被浏览器间接拜访到) |-- WEB-INF目录(隐衷目录,放在这外面的资源文件,不能被浏览器间接拜访) |-- classes目录(Java程序编译后的class文件会放在这个目录下) |-- lib目录(Web利用所依赖的jar包会放在这个目录下) |-- web.xml文件(以后Web利用的外围配置文件)2、如何公布一个Web利用到虚拟主机中 间接将Web利用的目录复制到虚拟主机所治理的目录下即可例如:将news复制到webapps目录下,因为webapps是localhost主机公布web利用的目录,所以相当于将news公布到了localhost主机中,能够通过localhost主机进行拜访! 3、扩大内容: 如何配置一台虚拟主机 tomcat服务器中就提供了一台虚拟主机叫做localhost主机1)在[tomcat装置目录]/conf/server.xml文件中,找到Host标签(140多行),在这标签下面或上面 增加一个Host标签,如下:<Host name="www.baidu123.com" appBase="baidu123"></Host>name属性用于指定主机名appBase属性用于指定主机公布web利用的目录2)模仿在DNS服务器中配置主机名和IP地址的映射(对应)关系 找到hosts文件:C:/Windows/System32/drivers/etc/hosts在这个文件中有一些正文(能够疏忽),在第一行增加如下配置:127.0.0.1 www.baidu123.com3)重启服务器,服务器读取到咱们增加的Host标签就会在tomcat根目录帮咱们创立baidu123目录 再将一个Web利用(比方news)公布到baidu123目录下,通过如下门路拜访:http://www.baidu123.com:8080/news/hello.html

April 9, 2021 · 1 min · jiezi

关于http:HTTPHTTP2HTTPS全解析

微信公众号:[前端一锅煮]一点技术、一点思考。问题或倡议,请公众号留言。UDPTCP三次握手四次挥手拥塞管制HTTPHTTP/2HTTPS证书认证对称加密非对称加密压缩形式优化网络申请长篇预警~ UDPUDP(User Data Protocol,用户数据报协定)是一个面向无连贯的传输层协定。 UDP 是一个非连贯的协定,传输数据之前源端和终端不建设连贯,当它想传送时就简略地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP 传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限度。在接收端,UDP 把每个音讯段放在队列中,应用程序每次从队列中读一个音讯段。因为传输数据不建设连贯,因而也就不须要保护连贯状态,包含收发状态等,因而一台服务机可同时向多个客户机传输雷同的音讯。UDP 信息包的题目很短,只有 8 个字节,绝对于 TCP 的 20 个字节信息包的额定开销很小。吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限度。UDP 应用尽最大致力交付,即不保障牢靠交付,因而主机不须要维持简单的链接状态表(这外面有许多参数)。UDP 是面向报文的。发送方的 UDP 对应用程序交下来的报文,在增加首部后就向下交付给 IP 层。既不拆分,也不合并,而是保留这些报文的边界,因而,应用程序须要抉择适合的报文大小。TCPTCP(Transmission Control Protocol,传输控制协议)是一个面向连贯的、牢靠的、基于字节流的传输层协定。在收发数据前,必须和对方建设牢靠的连贯。一个 TCP 连贯必须通过三次握手能力建设起来,断开连接要通过四次挥手,其中的过程非常复杂。 三次握手名词解释: SYN:示意建设一个连贯,携带 SYN 的 tcp 报文段为同步报文段。FIN:示意告知对方本端要敞开连贯了。ACK:示意确认好是否无效,携带 ack 标记的报文段也称确认报文段。只有当 ACK=1 时确认号才无效,当 ACK=0 时确认号有效,这时会要求重传数据,保证数据的完整性。三次握手过程: Client:告诉 Server 我要连贯,不含应用层数据(SYN 1 => Server)。Server:收到 Client 告诉,批准连贯,不含应用层数据(SYN+ACK 1 => Client)。Client:收到了 Server 的批准(ACK 1 => Server TCP)留神: Client:没收到重发,只承受最初一次发 SYN 的 SYN+ACK 回应,疏忽其余回应。 Server:没收到重发,始终没收到 ACK,开释资源。 为什么要三次握手: 为了避免有效的连贯申请达到服务器。 因为有可能客户端先发了一个连贯申请报文,然而因为网络的问题,迟迟没有达到服务器。这时候,客户端就超时重传了该报文,而后服务器响应了该申请报文。然而过一会,第一个报文竟然又到了服务器,那么服务器就会把它作为新的连贯申请。如果只有两次握手,那么服务器对于该连贯申请也会建设连贯,但如果是三次握手,服务器收回确认报文后,客户端不予理睬,这样就不会建设TCP连贯了。 四次挥手四次挥手过程: Client 我要敞开连贯(FIN 1 => Server)Server 收到确认,此时 Server 还未敞开(ACK 1 => Client)Server 我要关了(FIN 1 => Client)Client 收到确认(ACK 1 => Server)为什么要四次挥手 ...

April 5, 2021 · 2 min · jiezi

关于前端:请求响应原理及HTTP协议学习记录三

5. Node.js异步编程5.1 同步API, 异步API // 门路拼接 const public = path.join(__dirname, 'public'); // 申请地址解析 const urlObj = url.parse(req.url); // 读取文件 fs.readFile('./demo.txt', 'utf8', (err, result) => { console.log(result); });同步API:只有以后API执行实现后,能力继续执行下一个API console.log('before'); console.log('after');异步API:以后API的执行不会阻塞后续代码的执行 console.log('before');setTimeout( () => { console.log('last');}, 2000);console.log('after');5.2 同步API, 异步API的区别( 获取返回值 )同步API能够从返回值中拿到API执行的后果, 然而异步API是不能够的 // 同步 function sum (n1, n2) { return n1 + n2; } const result = sum (10, 20); // 异步 function getMsg () { setTimeout(function () { return { msg: 'Hello Node.js' } }, 2000); } const msg = getMsg ();5.3 回调函数本人定义函数让他人去调用。 ...

April 2, 2021 · 2 min · jiezi

关于前端:请求响应原理及HTTP协议学习记录二

3. HTTP协定3.1 HTTP协定的概念超文本传输协定(英文:HyperText Transfer Protocol,缩写:HTTP)规定了如何从网站服务器传输超文本到本地浏览器,它基于客户端服务器架构工作,是客户端(用户)和服务器端(网站)申请和应答的规范。 3.2 报文在HTTP申请和响应的过程中传递的数据块就叫报文,包含要传送的数据和一些附加信息,并且要恪守规定好的格局。 3.3 申请报文1. 申请形式 (Request Method)GET 申请数据POST 发送数据2. 申请地址 (Request URL) app.on('request', (req, res) => { req.headers // 获取申请报文 req.url // 获取申请地址 req.method // 获取申请办法 });3.4 响应报文1. HTTP状态码200 申请胜利404 申请的资源没有被找到500 服务器端谬误400 客户端申请有语法错误2. 内容类型text/htmltext/cssapplication/javascriptimage/jpegapplication/json app.on('request', (req, res) => { // 设置响应报文 res.writeHead(200, { 'Content-Type': 'text/html;charset=utf8' }); });4. HTTP申请与响应解决4.1 申请参数客户端向服务器端发送申请时,有时须要携带一些客户信息,客户信息须要通过申请参数的模式传递到服务器端,比方登录操作。 4.2 GET申请参数参数被搁置在浏览器地址栏中,例如:http://localhost:3000/?name=z...参数获取须要借助零碎模块url,url模块用来解决url地址 const http = require('http'); // 导入url零碎模块 用于解决url地址 const url = require('url'); const app = http.createServer(); app.on('request', (req, res) => { // 将url门路的各个局部解析进去并返回对象 // true 代表将参数解析为对象格局 let {query} = url.parse(req.url, true); console.log(query); }); app.listen(3000);4.3 POST申请参数参数被搁置在申请体中进行传输获取POST参数须要应用data事件和end事件应用querystring零碎模块将参数转换为对象格局 // 导入零碎模块querystring 用于将HTTP参数转换为对象格局 const querystring = require('querystring'); app.on('request', (req, res) => { let postData = ''; // 监听参数传输事件 req.on('data', (chunk) => postData += chunk;); // 监听参数传输结束事件 req.on('end', () => { console.log(querystring.parse(postData)); }); });4.4 路由http://localhost:3000/indexhttp://localhost:3000/login路由是指客户端申请地址与服务器端程序代码的对应关系。简略的说,就是申请什么响应什么。 ...

April 2, 2021 · 1 min · jiezi

关于前端:请求响应原理及HTTP协议学习记录一

1. 服务器端根底概念1.1 网站的组成网站应用程序次要分为两大部分:客户端和服务器端。客户端:在浏览器中运行的局部,就是用户看到并与之交互的界面程序。应用HTML、CSS、JavaScript构建。服务器端:在服务器中运行的局部,负责存储数据和解决应用逻辑。1.2 Node网站服务器 可能提供网站拜访服务的机器就是网站服务器,它可能接管客户端的申请,可能对申请做出响应。 1.3 IP地址互联网中设施的惟一标识。IP是Internet Protocol Address的简写,代表互联网协议地址. 1.4 域名因为IP地址难于记忆,所以产生了域名的概念,所谓域名就是平时上网所应用的网址。http://www.baidu.com => http://124.165.219.100/尽管在地址栏中输出的是网址, 然而最终还是会将域名转换为ip能力拜访到指定的网站服务器。 1.5 端口端口是计算机与外界通信交换的进口,用来辨别服务器电脑中提供的不同的服务。 1.6 URL对立资源定位符,又叫URL(Uniform Resource Locator),是专为标识Internet网上资源地位而设的一种编址形式,咱们平时所说的网页地址指的即是URL。 URL的组成传输协定://服务器IP或域名:端口/资源所在位置标识http://www.baidu.cn/news/2018...http:超文本传输协定,提供了一种公布和接管HTML页面的办法。 1.7 开发过程中客户端和服务器端阐明在开发阶段,客户端和服务器端应用同一台电脑,即开发人员电脑。 本机域名:localhost本地IP :127.0.0.12. 创立web服务器创立web服务器 // 援用零碎模块 const http = require('http'); // 创立web服务器 const app = http.createServer(); // 当客户端发送申请的时候 app.on('request', (req, res) => { // 响应 res.end('<h1>hi, user</h1>'); }); // 监听3000端口 app.listen(3000); console.log('服务器已启动,监听3000端口,请拜访 localhost:3000')

April 2, 2021 · 1 min · jiezi

关于golang:有趣一行代码居然无法获取请求的完整URL

来自公众号:Gopher指北缘起做Web服务的时候,可能会有这样一个业务场景,获取一个HTTP申请的残缺URL。很巧,老许就碰到了这样的业务场景。面对如此简略的需要,CV大法基本没有展现能力的机会。啪啪啪,获取申请的残缺URL代码就进去了。 过后离验证只差一步,老许信念满满,很快,打脸来得很快就像龙卷风。。。 从图中能够晓得,req.URL中的Scheme和Host均为空,所以r.URL.String()无奈失去残缺的申请连贯。这个后果让老许一阵冲动,万万没想到有一天我也有机会发现Go源码中可能脱漏的赋值。老许强行按耐住心中的冲动,筹备好好钻研一番,万一成为了Go的Contributor呢^^。最初发现官网实现没有问题,因而就有了明天这篇文章。 HTTP1.1中为什么无奈获取残缺的连贯HTTP1.1的Server读取申请并构建Request.URL对象的逻辑在request.go文件的readRequest办法中,上面老许对其源码做一个简略剖析总结。 读取申请的第一行,HTTP申请的第一行又称为申请行。// First line: GET /index.html HTTP/1.0var s stringif s, err = tp.ReadLine(); err != nil { return nil, err}将申请行的内容别离解析为req.Method、req.RequestURI和req.Proto。var ok boolreq.Method, req.RequestURI, req.Proto, ok = parseRequestLine(s)将req.RequestURI解析为req.URL。rawurl := req.RequestURIif req.URL, err = url.ParseRequestURI(rawurl); err != nil { return nil, err}注:当申请办法是CONNECT时,上述流程略有变动通过下面的流程咱们晓得req.URL的数据起源为req.RequestURI,而req.RequestURI到底是什么让咱们持续浏览后文。 申请资源依据rfc7230中的定义, 申请行分为申请办法、申请资源和HTTP版本,别离对应上述的req.Method、req.RequestURI和req.Proto(request-target在本文均被译作申请资源)。 对于申请办法有哪些想必不必老许在这儿科普了吧。至于罕用的HTTP版本无非就是HTTP1.1和HTTP2。 上面次要介绍申请资源的几种模式。 origin-form这种模式是申请资源中最常见的模式,其格局定义如下。 origin-form = absolute-path [ "?" query ]当间接向服务器发动申请时,除开CONNECT和OPTIONS申请,只容许发送path和query作为申请资源。如果申请链接的path为空,则必须发送/作为申请资源。申请链接中的Host信息以Header头的模式发送。 以http://www.example.org/where?q=now为例,申请行和Host申请头信息如下 GET /where?q=now HTTP/1.1Host: www.example.orgabsolute-form这种模式目前仅在向代理发动申请时应用,其格局定义如下。 absolute-form = absolute-URI依据rfc7230中的定义,目前client仅会向代理发送这种模式的申请资源,但为了未来某个HTTP版本可能会转换为这种模式的申请资源所以server须要反对这种模式的申请资源。这大略就是为什么req.URL中大部分字段值为空却依然将URL各局部定义残缺的起因。 一个absolute-form模式的申请行例子如下。 GET http://www.example.org/pub/WWW/TheProject.html HTTP/1.1authority-formauthority-form模式的申请资源仅用于CONNECT申请中,其格局定义如下。 ...

March 31, 2021 · 1 min · jiezi

关于以太坊:filecoin每天产出怎么算filecoin云算力挖矿靠谱吗filecoin云算力和矿机怎么选

前不久,filecoin的币价能够说是皆大欢喜,暴涨的音讯也是寰球的参与者们兴奋不已。现在,filecoin币价趋于平稳,各界也都预言并期待下一次的大涨。那么接下来,小编会为大家解读一下:filecoin每天产出怎么算?filecoin云算力挖矿靠谱吗?filecoin云算力和矿机怎么选? 一、filecoin每天产出怎么算?大家应该知悉:目前的全网无效算力和铸造基准线2.5EiB之间的关系,由此来测算每日的产出情况。给大家附上目前的每天产出计算公式:实践每天的产出×30%+实践每天产出×70%×以后全网无效算力÷2.5EiB。二、filecoin云算力挖矿靠谱吗?filecoin云算力挖矿是当初相当一部分敌人们的抉择。对于filecoin矿机挖矿而言,云算力挖矿的门槛比拟低,同时进入老本也比拟低,因而受到了很多人的青眼。然而也要留神,云算力门槛低因而非法矿商也是很多的,各位须要擦亮双眼,或征询专家是否靠谱。 三、filecoin云算力和矿机怎么选?filecoin挖矿目前最热门的形式也就是这两种。能够说是有利有弊。从归属层面,矿机是大家本人领有产权,而云算力没有拥有权。从门槛来看,矿机的进入老本高于云算力,云算力的进入门槛会低一些,能够依照单t购买,而矿机须要整机购买。从性质上来看,filecoin挖矿是靠无效存储,也就是本人存储的数据量,好不容易通过一年两年存了那么多数据,然而云算力却没有产权不归属本人所有,而矿机则继续领有收益,长期来看性价比远高于云算力。总之,各位依照本人的需要能够来进行筛选。 filecoin作为一个上线不到半年的支流货币,展示进去的实力无疑是弱小的,然而,各位也要擦亮眼睛,选对正规靠谱的公司,好了,还有任何问题都欢送随时分割或私信我。

March 31, 2021 · 1 min · jiezi

关于以太坊:ipfs项目是国家许可的吗ipfs的应用有哪些ipfs为什么可能取代http

ipfs和filecoin最近堪称是越来越火了,filecoin的币价也是稳步回升。与此同时,对于ipfs的各种探讨也是不绝于耳,接下来我来为大家解说一下几个热议话题:ipfs我的项目是国家许可的吗?ipfs的利用有哪些?ipfs为什么可能取代http?一、ipfs我的项目是国家许可的吗?首先通知大家:ipfs我的项目是被国家认可的,这个其实我之前也提到过。ipfs只有是非法合规的,国家就是认可的。国家并没有禁止ipfs我的项目,相同的对于ipfs还进行了报道。所以,ipfs我的项目是被国家许可的。 二、ipfs的利用有哪些?ipfs次要是致力于建设短暂信息档案,升高存储、带宽老本,与区块链完满联合,实现内容创作的自在。目前,ipfs曾经被利用到了微软、沧州华为云、维基百科等各大巨头之上,寰球第二大浏览器火狐也是反对ipfs,ipfs会随着工夫的推移而被利用的越来越宽泛。 三、ipfs为什么可能取代http?很多人都在问这个问题:ipfs真的会取代http吗?从性质上来看,ipfs能够作为是颠覆性的技术改革,现在曾经进入了web3.0时代,而ipfs作为全新的去中心化的分布式网络,会更加顺应时代的背景和需要,前景会更加光洁。不过要晓得http曾经是一个很胜利的互联网协议,当初ipfs要做的并不是立即取代,而是携手并行,再予以变革。置信缓缓的大家会看到网页组件里不光是http,也会存在ipfs的获取,这就是逐渐的变革前行。 ipfs将来会怎么样,每个人都有每个人的认识,不过就当下而言,显然这个上线才五个月的我的项目给了全世界太多的惊喜和关注,而随着后续filecoin币价还会迎来大涨,ipfs我的项目无疑会更加热门。好了,如果还有什么问题,欢送随时分割和征询。

March 30, 2021 · 1 min · jiezi

关于http:大白话讲明白互联网五层协议

当你看到这篇文章时,你的电脑就向segment的服务器发送了很多http申请,而后页面显示在你的电脑上。这些http到底是如何从一台电脑到另一台电脑(服务器)的,它们是怎么进行通信的?这就波及到的互联网的通信协议。 咱们时常听到http协定,http又是通过tcp传输,这两个就是其中的两层协定。互联网协议大体能够分为五层协定,如上图。 最底层的协定就是“物理层”,设施与设施之间的物理连贯,这既能够是有线(光纤、光缆)也能够是无线,这也是互联网通信的基石。咱们看到的任何文字、图片、视频,实质上就是通过这些物理层线路一直传输0与1这样的电信号。 一长串连续不断的0与1这样的电信号,无奈精确别表白意思,这就诞生了第二层协定“链接层”。链接层也能够叫“以太网协定”,它把0和1这样的电信号进行分组,多少个算一组,每一组表白什么意思。 这里有个外围问题,尽管有了物理线路,也有了一组一组各种组合的电信号,它们到底又是如何从一台电脑到另一台电脑的? 电脑往外发送信号,和从里面接管信号,都是通过网卡进行的。每个网卡都有本人的一个MAC地址(相当于身份识别码),每台电脑网卡的MAC地址身份都是全世界惟一的,这是在工厂制作的时候就弄好的。 当几台电脑处在同一个网络外部(局域网),比如有A、B、C、D四台电脑,A电脑要往C电脑传递信息,A电脑并不会把信息“间接送达”给C,而是“播送”的形式,就是广而告之。 A电脑网卡收回的电信号,同一组网络里的B、C、D电脑的网卡都会收到这些电信号,然而A电脑网卡发送信号的时候,在信号里标注了接管方的网卡MAC地址,比如标注了C电脑的网卡MAC地址为接管方,那么B和D接管了电信号后发现接管方不是本人就不会进行任何解决,只有C会发现接管方是本人才会解决这些收到的电信号。 或者你会有纳闷,为什么A的信号不中转C呢?这关键在于,难道苹果制作的100万台电脑里,就把其中一台电脑明确规定好,信息就必须只能发送到戴尔制作的1000万台电脑里其中一台吗?实际上,古代的任何电子设备的通信都是采纳这样的”播送“模式,诸如GPS卫星也一样,GPS卫星是不会晓得你的手机的,它会往笼罩的整个空域发送电磁波信号,每个手机都会承受到这样的电磁波信号,只是有的手机有权解决和解析信号,有的手机无权解决而已。 通过MAC地址的通信就是这第二层的链接层”以太网“协定,它次要用于在同一网络内把信号从A电脑送到到C电脑。这一层也只能对在处在同一网络里的电脑通信,处在不同网络的电脑要实现通信,就须要第三层参加,即网络层,IP协定。这就是咱们熟知的IP地址,如从北京的将数据发送到上海,这须要借助ip地址帮忙。 ip协定的信号中定义了远方指标设施的IP地址,但要留神的是,电信号也不会间接就从北京”飞到“上海。你的电脑是处在一组网络中,每一组网络都有一个交换机的角色,各个不同网络组的交换机又处在一个更下层的一组网络里,更下层的网络又有更下层的网络组。城市也有城市的各种交换机,这些交换机又会处在一组网络里。这些网络都在通过”播送“的形式,一层层播送信号。每个网络组都有本人的ip地址,你的电信号里定义了指标方的ip地址,有的网络组发现ip地址不是本人,接管到了播送过去的数据也是抉择不解决。通过这一张微小的网,一层层的相互播送信号,你的信号才最初达到了上海。 实际上到此,地球上任何两台电脑都能够建设连贯了。前面的协定层次要针对计算机里的各种应用程序了。 电脑上会开很多应用程序,电脑会接管到很多数据,这须要晓得将接管到的数据分发给哪个应用程序(过程)。不同的应用程序(过程)会监听系统不同的端口号,这就产生了传输层,TCP协定和UDP协定都属于传输层。传输层协定是嵌在ip协定里,ip协定帮忙找到了指标电脑,网卡终于接管到了信息,但网卡还要散发信息。ip协定中嵌入的传输层协定数据就规定了端口号,信息达到了指标电脑的网卡后,网卡会通过外面的传输层协定的端口号把信息散发的电脑的各种过程。 TCP协定和UDP协定都属于传输层协定,二者的区别次要在于,UDP协定的数据无奈晓得对方是否收到,而TCP协定中的每一个数据包都要求失去确认,如果一个数据失落得不到确认,收回方都会重发。 建设在tcp传输层之上的http协定就是属于应用层。数据能够通过传输层达到一个具体的应用程序(过程),然而一个应用程序会有各种各样的性能,如浏览器这样一个应用程序,既可浏览网页,也能够写邮件,也下载文件,也能够看电影。这些各种各样的性能,它们就都须要有本人专门的数据格式。如网页次要就是http协定格局、文件传输就是ftp协定格局,电子邮件就是smpt协定格局。应用层协定,就是帮忙应用程序(过程)解析出各种性能须要的格式化数据。 自此,这五层协定帮忙咱们实现了互联网的各种通信和性能。这五层协定的数据,一层层嵌在一起组成一个个数据包,一起发送,一起接管,每个数据包里的这五层协定数据,它们都有各自的使命。

March 28, 2021 · 1 min · jiezi

关于c++:C调用HTTP接口发送带UTF8编码的请求

参考了文章:https://blog.csdn.net/breakso...https://blog.csdn.net/barry10...https://blog.csdn.net/elaine_...https://blog.csdn.net/yuanwow...https://blog.csdn.net/erdong1...以及微软的官网文档。 通过比拟WinHttp、WinINet、libcurl,我决定用看起来最专精就是给http用的WinHttp,反正需要也很简略,大略不太须要扩大。 需要:发送申请,带有几个value短的参数,和一个value长度不定的参数,并接管返回数据。 #include <string>#include <iostream>#include <windows.h>#include <winhttp.h> #include <atlstr.h>#pragma comment(lib,"winhttp.lib")#pragma comment(lib,"user32.lib")using namespace std;BOOL HttpSend(wchar_t* pwszType, wchar_t* pwszIp, WORD nServerPort, wchar_t* pwcsSourcePath, char* content, char* pszOutData)//pwszType: http verb//pwszIp: ip//pwcsSourcePath: url path//content: parameters and text{ DWORD dwSize = 0; wchar_t* lpHeadBuffer = NULL; HINTERNET hSession = NULL; HINTERNET hConnect = NULL; HINTERNET hRequest = NULL; BOOL bResults = FALSE; BOOL bUTF8Code = TRUE; //Obtain a session handle hSession = WinHttpOpen(L"User Agent", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0); if(!hSession) { cout << "Open failed!" << endl; return FALSE; } //Specify an HTTP server with ip and port hConnect = WinHttpConnect(hSession, pwszIp, nServerPort, 0); if(!hConnect) { cout << "Connect failed!" << endl; return FALSE; } //Create an HTTP request handle hRequest = WinHttpOpenRequest(hConnect, pwszType, pwcsSourcePath, NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, 0); if(!hRequest) { cout << "Open request failed!" << endl; return FALSE; } //Add header std::wstring wstrHeader[] = { L"Content-type: application/x-www-form-urlencoded\r\n"}; WinHttpAddRequestHeaders(hRequest, wstrHeader[0].c_str(), wstrHeader[0].length(), WINHTTP_ADDREQ_FLAG_ADD); //Send a request /*USES_CONVERSION; std::string strExtInfo = CW2A(content, CP_UTF8); //get content DWORD dwTotal = strExtInfo.length();*/ DWORD dwTotal = strlen(content); //bResults = WinHttpSendRequest(hRequest, wstrHeader[0].c_str(), wstrHeader[0].length(), WINHTTP_NO_REQUEST_DATA, 0, dwTotal, 0); bResults = WinHttpSendRequest(hRequest, WINHTTP_NO_ADDITIONAL_HEADERS, 0, WINHTTP_NO_REQUEST_DATA, 0, dwTotal, 0); if(!bResults) { cout << "SendRequest failed!" << endl; return FALSE; } //Write data to the server bResults = WinHttpWriteData(hRequest, content, dwTotal, NULL); if(!bResults) { cout << "WriteData failed!" << endl; return FALSE; } //End the request, receive response from server bResults = WinHttpReceiveResponse(hRequest,NULL); //Get header info if(bResults) { bResults=WinHttpQueryHeaders(hRequest, WINHTTP_QUERY_RAW_HEADERS_CRLF, WINHTTP_HEADER_NAME_BY_INDEX, NULL, &dwSize, WINHTTP_NO_HEADER_INDEX); //Allocate buffer by header length if( GetLastError() == ERROR_INSUFFICIENT_BUFFER) //If the function fails and ERROR_INSUFFICIENT_BUFFER is returned, lpdwBufferLength specifies the number of bytes that the application must allocate to receive the string. { lpHeadBuffer = new wchar_t[dwSize / sizeof(wchar_t)]; bResults = WinHttpQueryHeaders(hRequest,WINHTTP_QUERY_RAW_HEADERS_CRLF,WINHTTP_HEADER_NAME_BY_INDEX, lpHeadBuffer, &dwSize,WINHTTP_NO_HEADER_INDEX); } //Get Content-Type from header to specify encoding if ( NULL != wcsstr(lpHeadBuffer, L"charset=gbk") ) { bUTF8Code = FALSE; } } else { cout << "Get header failed!" << endl; } printf("Header contents: \n%S", lpHeadBuffer); delete [] lpHeadBuffer; //Get data from server LPSTR pszOutBuffer = NULL; DWORD dwDownloaded = 0; wchar_t *pwText = NULL; int nSize = 0; if (bResults) { do { //Check for available data to get data size in bytes dwSize = 0; if (!WinHttpQueryDataAvailable(hRequest, &dwSize)){ cout << "Error:WinHttpQueryDataAvailable failed:" << GetLastError() << endl; bResults = FALSE; break; } if (!dwSize) { break; //data size 0 } //Allocate buffer by data size pszOutBuffer = new char[dwSize + 1]; if (!pszOutBuffer) { cout<<"Out of memory."<<endl; bResults = FALSE; break; } ZeroMemory(pszOutBuffer, dwSize + 1); //Read data from server if (!WinHttpReadData(hRequest, pszOutBuffer, dwSize, &dwDownloaded)) { cout << "Error:WinHttpQueryDataAvailable failed:" << GetLastError() << endl; } if (!dwDownloaded) { delete [] pszOutBuffer; bResults = FALSE; break; } if ( FALSE == bUTF8Code ) { //Transcoding to UTF-8 int len = MultiByteToWideChar(CP_ACP, 0, pszOutBuffer, -1, NULL, 0); //If the function succeeds and cchWideChar is 0, the return value is the required size, in characters, for the buffer indicated by lpWideCharStr wchar_t* pwszUnicode = new wchar_t[len]; memset(pwszUnicode, 0, sizeof(wchar_t) * len); MultiByteToWideChar(CP_ACP, 0, pszOutBuffer, -1, pwszUnicode, len); //map to wide char int transLen = WideCharToMultiByte(CP_UTF8, 0, pwszUnicode, len, NULL, 0, NULL, NULL); //get length nSize += transLen; WideCharToMultiByte(CP_UTF8, 0, pwszUnicode,len, pszOutData+strlen(pszOutData), transLen, NULL, NULL); //transcoding } else { strcpy_s(pszOutData + nSize, strlen(pszOutBuffer) + 1, pszOutBuffer); //SizeInBytes should not less than src length(including '\0') nSize += strlen(pszOutBuffer) + 1; } delete [] pszOutBuffer; } while (dwSize > 0); if (hRequest) WinHttpCloseHandle(hRequest); if (hConnect) WinHttpCloseHandle(hConnect); if (hSession) WinHttpCloseHandle(hSession); return bResults; }}为了满足UTF-8编码的要求,输入输出还要有ANSI和UTF-8格局的相互转换: ...

March 25, 2021 · 4 min · jiezi

关于http:面试官问我一个-TCP-连接可以发多少个-HTTP-请求我竟然回答不上来

已经有这么一道经典面试题:从 URL 在浏览器被被输出到页面展示的过程中产生了什么? 置信大多数筹备过的同学都能答复进去,然而如果持续问:收到的 HTML 如果蕴含几十个图片标签,这些图片是以什么形式、什么程序、建设了多少连贯、应用什么协定被下载下来的呢?要搞懂这个问题,咱们须要先解决上面五个问题: 1.古代浏览器在与服务器建设了一个 TCP 连贯后是否会在一个 HTTP 申请实现后断开?什么状况下会断开? 2.一个 TCP 连贯能够对应几个 HTTP 申请? 3.一个 TCP 连贯中 HTTP 申请发送能够一起发送么(比方一起发三个申请,再三个响应一起接管)? 4.为什么有的时候刷新页面不须要从新建设 SSL 连贯? 5.浏览器对同一 Host 建设 TCP 连贯到数量有没有限度? 第一个问题 古代浏览器在与服务器建设了一个 TCP 连贯后是否会在一个 HTTP 申请实现后断开?什么状况下会断开? 在 HTTP/1.0 中,一个服务器在发送完一个 HTTP 响应后,会断开 TCP 链接。然而这样每次申请都会从新建设和断开 TCP 连贯,代价过大。所以尽管规范中没有设定,某些服务器对 Connection: keep-alive 的 Header 进行了反对。意思是说,实现这个 HTTP 申请之后,不要断开 HTTP 申请应用的 TCP 连贯。这样的益处是连贯能够被从新应用,之后发送 HTTP 申请的时候不须要从新建设 TCP 连贯,以及如果维持连贯,那么 SSL 的开销也能够防止,两张图片是我短时间内两次拜访 https://www.github.com 的工夫统计:头一次拜访,有初始化连贯和 SSL 开销初始化连贯和 SSL 开销隐没了,阐明应用的是同一个 TCP 连贯 ...

March 24, 2021 · 2 min · jiezi

关于http:Gin实战演练

Gin实战 1 gin的简略应用package mainimport "github.com/gin-gonic/gin"func main() { // Default办法的次要作用是实例化一个带有日志、故障复原中间件的引擎。 r := gin.Default() //实例化一个gin对象 // 定义申请 //定义一个GET申请的路由,参数一是路由地址,也就是在浏览器拜访的相对路径, // 参数二是一个匿名函数,函数外部用于业务逻辑解决。 r.GET("/login", func(c *gin.Context) { c.JSON(200, gin.H{ //JSON内容能够通过gin提供的H办法来构建,十分不便。 "msg": "login", //调用JSON办法返回数据。JSON的操作非常简单,参数一是状态码,参数二是JSON的内容。 }) }) // Run办法最终会调用内置http库的ListenAndServe办法来监听端口,如果不传参数默认监听80端口, // 也能够通过参数来变更地址和端口。 r.Run(":12005")}2 RESTful APIRESTful 是⽹络应⽤程序的⼀种设计⻛格和开发⽅式,每⼀个URI代表⼀种资源,客户端通过 POST 、 DELETE 、 PUT 、 GET 四种申请⽅式来对资源做增删改查的操作。 同样的,Gin框架给咱们提供的除这4种动词外,还有 PATCH 、 OPTION 、 HEAD 等,具体内容能够查看 rentergroup.go ⽂件的 IRoutes 接⼝ // IRoutes defines all router handle interface.type IRoutes interface { Use(...HandlerFunc) IRoutes Handle(string, string, ...HandlerFunc) IRoutes Any(string, ...HandlerFunc) IRoutes GET(string, ...HandlerFunc) IRoutes POST(string, ...HandlerFunc) IRoutes DELETE(string, ...HandlerFunc) IRoutes PATCH(string, ...HandlerFunc) IRoutes PUT(string, ...HandlerFunc) IRoutes OPTIONS(string, ...HandlerFunc) IRoutes HEAD(string, ...HandlerFunc) IRoutes StaticFile(string, string) IRoutes Static(string, string) IRoutes StaticFS(string, http.FileSystem) IRoutes}例如接口: ...

March 21, 2021 · 7 min · jiezi

关于live-server:常用的五种方式搭建本地静态html页面服务器

形式一:live-serverlive-server是一款npm工具,能够在我的项目目录启动一个node服务,而后间接在浏览器中预览,并且主动全局监听实时更新。 两种装置形式: 全局装置 npm i live-server -g本地装置 npm i live-server --save-dev间接应用live-server首先在我的项目下npm初始化:npm init -y; 而后能够抉择全局装置或者本地装置live-server,而后在package.json的scripts属性中增加如下代码: "scripts": { "server": "live-server ./ --port=8181 --host=localhost --proxy=/api:http://www.abc.com/api/"}中包含了代理设置proxy。 而后npm run server执行下就会主动关上以后工程,默认指向index.html页面。 应用node首先本地装置live-server,执行如下指令: npm i live-server --save-dev而后在该我的项目下新建一个build.js,代码如下: var liveServer = require("live-server");var params = { port: 8181, host: "localhost", open: true, file: "index.html", wait: 1000, logLevel: 2, proxy: [['/api','http://www.abc.com/api/']]};liveServer.start(params);最初在package.json的scripts下增加如下代码: "scripts": { "dev": "node build.js"}最初执行npm run dev就启动了本地动态页面,门路即是:http://localhost:8081/ 具体参考地址:https://www.npmjs.com/package/live-server 形式二:http-server全局装置http-server npm i -g http-server用法: http-server [path] [options]其中的path默认指向工程门路下的./public,如果不存在那么应用./。 options就是常见的配置,比方端口、代理地址等,罕用配置: -p or --port Port to use (defaults to 8080). It will also read from process.env.PORT. (设置端口)-a Address to use (defaults to 0.0.0.0) (设置拜访地址)-P or --proxy Proxies all requests which can't be resolved locally to the given url. e.g.: -P http://someurl.com(设置代理地址)-o [path] Open browser window after starting the server. Optionally provide a URL path to open. e.g.: -o /other/dir/ (默认关上浏览器)cmd进入动态目录工程,可执行如下操作: ...

March 20, 2021 · 4 min · jiezi

关于http:HTTP-协议中的-host

http申请头host字段示意指标服务器域名。咱们晓得个别服务器都只会有一个ip地址,而一个ip地址能够有多个域名,比方咱们有www.qiniu.com,www.taobao.com和www.jd.com几个域名,在域名供应商那通过A记录或者CNAME记录的形式记录的形式与服务器的ip地址关联,那么通过任何一个域名拜访最终解析到的都是该ip。 如果一个服务器只部署一个站点是不是很浪费资源,在tomcat上搭建站点时,能够给每个域名指定一个拜访目录,而后每次拜访都会依据不同的Host的信息申请到不同的站点下面,配置/usr/local/tomcat/conf/目录server.xml如下: <?xml version="1.0" encoding="UTF-8"?><Server port="8006" shutdown="SHUTDOWN"><Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/><Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/><Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/><Listener className="org.apache.catalina.core.AprLifecycleListener"/><GlobalNamingResources><Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml"/></GlobalNamingResources><Service name="Catalina"><Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxThreads="1000" minSpareThreads="20" acceptCount="1000" maxHttpHeaderSize="65536" debug="0" disableUploadTimeout="true" useBodyEncodingForURI="true" enableLookups="false" URIEncoding="UTF-8"/><Engine name="Catalina" defaultHost="localhost"><Realm className="org.apache.catalina.realm.LockOutRealm"><Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/></Realm>// Tomcat的Webapps目录是Tomcat默认的利用目录,当服务器启动时,会加载所有这个目录下的利用。如果你想要批改这个默认目录,能够在conf下的server.xml文件里批改Host标签里的appBase值。 <Host name="www.qiniu.com" appBase="/data/wwwroot/qiniuwebapp" unpackWARs="true" autoDeploy="true"> <Context path="" docBase="/data/wwwroot/qiniuwebapp" debug="0" reloadable="false" crossContext="true"/> // path:是拜访时的根地址,示意拜访的门路,能够自定义,如上述例子中,拜访该应用程序地址如下:http://localhost:8080/; // docbase:示意应用程序的门路,docBase能够应用绝对路径,也能够应用相对路径,相对路径绝对于webapps ; // reloadable:示意能够在运行时在classes与lib文件夹下主动加载类包。这个属性在开发阶段通常都设为true,不便开发;在公布阶段应该设置为false,进步应用程序的访问速度 ; <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" /> </Host> <Host name="www.taobao.com" appBase="/data/wwwroot/taobaowebapp" unpackWARs="true" autoDeploy="true"> <Context path="" docBase="/data/wwwroot/taobaowebapp" debug="0" reloadable="false" crossContext="true"/> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" /> </Host> <Host name="www.jb.com" appBase="/data/wwwroot/jbwebapp" unpackWARs="true" autoDeploy="true"> <Context path="" docBase="/data/wwwroot/jbwebapp" debug="0" reloadable="false" crossContext="true"/> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" /> </Host></Engine></Service></Server>

March 19, 2021 · 1 min · jiezi

关于前端:Referrer-Policy介绍

referer的写法是错的,正确的是referrer。大略是晚期http标准的拼写错误,而后为了放弃向下兼容,就一误再误了。 一、九种policy enum ReferrerPolicy { "", "no-referrer", "no-referrer-when-downgrade", "same-origin", "origin", "strict-origin", "origin-when-cross-origin", "strict-origin-when-cross-origin", "unsafe-url"};1 no-referrer示意http申请的申请头没有referer字段 2 no-referrer-when-downgrade(默认值)如果没指定其余policy,则这个就是浏览器的默认值。即以后的referer就是以后页面的地址(不包含锚点#)。如果存在降级的状况,则referer不会被发送,也就是申请头没有referer字段,比方https->http的状况。 3 same-origin如果申请是同源,即没有跨域,则referer字段会被发送。如果申请存在跨域,则referer字段不会被发送。 4 origin不论是否存在跨域或者降级的状况,referer字段都会被发送,但不会带上门路等信息,只有域名和端口。比方页面地址是http://localhost:3000/referer.html,则referer则是http://localhost:3000/ 5 strict-origin在policy=origin的要求内,减少了在降级(https->http)的状况下,referer不会被发送。 6 origin-when-cross-origin如果是同源的申请,则referer字段都会被发送,且referer的值是以后页面的地址(http://localhost:3000/referer.html)。如果是跨域的申请,referer也会被发送,但此时referer的值只有域名+端口(http://localhost:3000/),也就是跟origin一样。 7 strict-origin-when-cross-origin在policy=origin-when-cross-origin的要求内,减少了在降级(https->http)的状况下,referer不会被发送。 8 unsafe-url不论是否同源或跨域,referer都会被发送。 9 空字符串如果referer是空字符串,则会依据设定的算法回退到默认值,即no-referrer-when-downgrade 详情可参考:https://w3c.github.io/webapps... 二、referer什么时候不发送在浏览器地址栏,间接输出或者点击标签的时候,referer就不会被发送。其余形式都会发送。比方加载页面其余资源,如js,css和img等资源,又或者form表单,或者点击标签。 可通过js来获取referer的值:document.referrer。但想通过js来扭转http申请头的referer是不行的,尽管能扭转document.referrer的值,但申请头的referer字段仍然不会被扭转。 delete window.document.referrer;window.document.__defineGetter__('referrer', function () { return "http://referer.com";});console.log(window.document.referrer) // http://referer.com// 须要留神:此时http申请头的referer是没有被扭转的三、哪些html标签可设置referer的policy1 meta可通过meta来设置下面提到的九种policy如:<meta name="referrer" content="no-referrer"> 2 a可通过ref属性来设置。如:xxx 3 img可通过referrerPolicy属性来设置,如: 4 iframe可通过referrerPolicy属性来设置,如:<iframe src="http://xxx.com" referrerPolicy="no-referrer"></iframe> 下面几种形式,meta是网站级别的,相当于父级,一旦设置,html页面下的a和img等都会继承referer策略。但可通过独自设置a和img等来实现不同的referer策略。 网上说貌似form表单也能够设置referer,但看了下w3c文档,貌似没有。而link标签的referrerpolicy属性则属于试验阶段的API。referer的写法是错的,正确的是referrer。大略是晚期http标准的拼写错误,而后为了放弃向下兼容,就一误再误了。 一、九种policyenum ReferrerPolicy { "", "no-referrer", "no-referrer-when-downgrade", "same-origin", "origin", "strict-origin", "origin-when-cross-origin", "strict-origin-when-cross-origin", "unsafe-url"};1 no-referrer示意http申请的申请头没有referer字段 2 no-referrer-when-downgrade(默认值)如果没指定其余policy,则这个就是浏览器的默认值。即以后的referer就是以后页面的地址(不包含锚点#)。如果存在降级的状况,则referer不会被发送,也就是申请头没有referer字段,比方https->http的状况。 3 same-origin如果申请是同源,即没有跨域,则referer字段会被发送。如果申请存在跨域,则referer字段不会被发送。 ...

March 17, 2021 · 1 min · jiezi

关于http:HTTP-协议中的-TransferEncoding

Transfer-Encoding,是一个 HTTP 头部字段,字面意思是「传输编码」。实际上,HTTP 协定中还有另外一个头部与编码无关:Content-Encoding(内容编码)。Content-Encoding 通常用于对实体内容进行压缩编码,目标是优化传输,例如用 gzip 压缩文本文件,能大幅减小体积。内容编码通常是选择性的,例如 jpg / png 这类文件个别不开启,因为图片格式曾经是高度压缩过的,再压一遍没什么成果不说还节约 CPU。 而 Transfer-Encoding 则是用来扭转报文格式,它岂但不会缩小实体内容传输大小,甚至还会使传输变大,那它的作用是什么呢?本文接下来次要就是讲这个。咱们先记住一点,Content-Encoding 和 Transfer-Encoding 二者是相辅相成的,对于一个 HTTP 报文,很可能同时进行了内容编码和传输编码。 Persistent Connection临时把 Transfer-Encoding 放一边,咱们来看 HTTP 协定中另外一个重要概念:Persistent Connection(长久连贯,艰深说法长连贯)。咱们晓得 HTTP 运行在 TCP 连贯之上,天然也有着跟 TCP 一样的三次握手、慢启动等个性,为了尽可能的进步 HTTP 性能,应用长久连贯就显得尤为重要了。为此,HTTP 协定引入了相应的机制。 HTTP/1.0 的长久连贯机制是起初才引入的,通过 Connection: keep-alive 这个头部来实现,服务端和客户端都能够应用它通知对方在发送完数据之后不须要断开 TCP 连贯,以备后用。HTTP/1.1 则规定所有连贯都必须是长久的,除非显式地在头部加上 Connection: close。所以实际上,HTTP/1.1 中 Connection 这个头部字段曾经没有 keep-alive 这个取值了,但因为历史起因,很多 Web Server 和浏览器,还是保留着给 HTTP/1.1 长连贯发送 Connection: keep-alive 的习惯。 浏览器重用曾经关上的闲暇长久连贯,能够避开迟缓的三次握手,还能够防止遇上 TCP 慢启动的拥塞适应阶段,听起来非常美好。为了深入研究长久连贯的个性,我决定用 Node 写一个最简略的 Web Server 用于测试,Node 提供了 http 模块用于疾速创立 HTTP Web Server,但我须要更多的管制,所以用 net 模块创立了一个 TCP Server: ...

March 16, 2021 · 2 min · jiezi

关于http:搞定计算机网络的常见面试问题

在浏览器中输出一个 URL 至页面出现,网络上都产生了什么事?能说说 ISO 七层模型和 TCP/IP 四层模型吗? TCP/IP 与 HTTP 有什么关系吗? TCP协定与UDP协定的区别? 请具体介绍一下 TCP 的三次握手机制,为什么要三次握手?挥手却又是四次呢? 具体讲一下TCP的滑动窗口?晓得流量管制和拥塞管制吗? 说一下对称加密与非对称加密? 状态码 206 是什么意思? 你们用的 https 是吧,https 工作原理是什么? ..... 一、计算机网络通信协议通信协议(communications protocol)是指单方实体实现通信或服务所必须遵循的规定和约定。通过通信信道和设施互连起来的多个不同地理位置的数据通信零碎,要使其能协同工作实现信息替换和资源共享,它们之间必须具备独特的语言。交换什么、怎么交换及何时交换,都必须遵循某种相互都能承受的规定。这个规定就是通信协议。 网络模型随着技术的倒退,计算机的利用越来越宽泛,计算机之间的通信开始了百花齐放的状态,每个具备独立计算服务体系的信息技术公司都会建设本人的计算机通信规定,而这种状况会导致异构计算机之间无奈通信,极大的妨碍了网络通信的倒退,至此为了解决这个问题,国际标准化组织(ISO)制订了OSI模型,该模型定义了不同计算机互联的规范,OSI模型把网络通信的工作分为7层,别离是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。 这七层模型是设计层面的概念,每一层都有固定要实现的职责和性能,分层的益处在于清晰和性能独立性,但分层过多会使档次变的更加简单,尽管不须要实现本层的性能,然而也须要结构本层的上下文,空耗系统资源,所以在落地施行网络通信模型的时候将这七层模型简化合并为四层模型别离是应用层、传输层、网络层、网络接口层(各层之间的模型、协定统称为:TCP/IP协定簇)。 从上图能够看到,TCP/IP模型合并了OSI模型的应用层、表示层和会话层,将OSI模型的数据链路层和物理层合并为网络拜访层。 上图还列出了各层模型对应TCP/IP协定栈中的协定以及各层协定之间的关系。比方DNS协定是建设在TCP和UDP协定的根底上,FTP、HTTP、TELNET协定建设在TCP协定的根底上,NTP、TFTP、SNMP建设在UDP协定的根底上,而TCP、UDP协定又建设在IP协定的根底上,以此类推…. OSI中的层性能TCP/IP协定族应用层文件传输,电子邮件,文件服务,虚构终端TFTP,HTTP,SNMP,FTP,SMTP,DNS,RIP,Telnet表示层数据格式化,代码转换,数据加密无会话层控制应用程序之间会话能力;如不同软件数据分发给不同软件ASAP、TLS、SSH、ISO 8327 / CCITT X.225、RPC、NetBIOS、ASP、Winsock、BSD sockets传输层端到端传输数据的基本功能TCP、UDP网络层定义IP编址,定义路由性能;如不同设施的数据转发IP,ICMP,RIP,OSPF,BGP,IGMP数据链路层定义数据的根本格局,如何传输,如何标识SLIP,CSLIP,PPP,ARP,RARP,MTU物理层以二进制数据模式在物理媒体上传输数据ISO2110,IEEE802当咱们某一个网站上不去的时候。通常会ping一下这个网站 ping 能够说是ICMP的最驰名的利用,是TCP/IP协定的一部分。利用ping命令能够查看网络是否连通,能够很好地帮忙咱们剖析和断定网络故障。 二、TCP/IP数据在网络中传输最终肯定是通过物理介质传输。物理介质就是把电脑连接起来的物理伎俩,常见的有光纤、双绞线,以及无线电波,它决定了电信号(0和1)的传输方式,物理介质的不同决定了电信号的传输带宽、速率、传输间隔以及抗干扰性等等。网络数据传输就像快递邮寄,数据就是快件。只有路买通了,你的”快递”能力送到,因而物理介质是网络通信的基石。 寄快递首先得称重、确认体积(确认数据大小),贵重物品还得层层包裹填充物确保安全,封装,而后填写发件地址(源主机地址)和收件地址(指标主机地址),确认快递形式。对于偏远地区,快递不能中转,还须要中途转发。网络通信也是一样的情理,只不过把这些步骤都规定成了各种协定。 TCP/IP的模型的每一层都须要下一层所提供的协定来实现本人的目标。咱们来看下数据是怎么通过TCP/IP协定模型从一台主机发送到另一台主机的。 当用户通过HTTP协定发动一个申请,应用层、传输层、网络互联层和网络拜访层的相干协定顺次对该申请进行包装并携带对应的首部,最终在网络拜访层生成以太网数据包,以太网数据包通过物理介质传输给对方主机,对方接管到数据包当前,而后再一层一层采纳对应的协定进行拆包,最初把应用层数据交给利用程序处理。 TCP/IP 与 HTTPTCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指可能在多个不同网络间实现信息传输的协定簇。TCP/IP 协定不仅仅指的是 TCP 和 IP 两个协定,而是指一个由FTP、SMTP、TCP、UDP、IP等协定形成的协定簇, 只是因为在TCP/IP协定中TCP协定和IP协定最具代表性,所以被称为TCP/IP协定。 而HTTP是应用层协定,次要解决如何包装数据。 “IP”代表网际协议,TCP 和 UDP 应用该协定从一个网络传送数据包到另一个网络。把IP想像成一种高速公路,它容许其它协定在下面行驶并找到到其它电脑的进口。TCP和UDP是高速公路上的“卡车”,它们携带的货物就是像HTTP,文件传输协定FTP这样的协定等。 TCP 与 UDP都属于传输层协定。 TCP(Transmission Control Protocol,传输控制协议)是面向连贯的协定,也就是说,在收发数据前,必须和对方建设牢靠的连贯。一个TCP连贯必须有三次握手、四次挥手。 UDP(User Data Protocol,用户数据报协定)是一个非连贯的协定,传输数据之前源端和终端不建设连贯, 当它想传送时就简略地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上 ...

March 8, 2021 · 4 min · jiezi

关于http:Http和Https究竟有啥不一样

传送门:如何搭建https服务 1.从HTTP说起说起HTTP申请,咱们简直每天都在收回这样的申请,例如咱们在浏览器中输出http://www.baidu.com时,就是向百度的服务器收回一个http申请,而百度的服务器同时会给咱们返回该申请的一个回应。再例如,咱们在一个登录的场景下,输出用户名="123",明码="666666",而后按下登录按钮,此时http申请中将携带着用户名和明码两个信息提交到服务器,而后服务器从http申请的报文中提取到用户名和明码等信息。 很显著,http申请存在着一个很重大的问题,http协定传输的是明文,如果两头有个黑客拦挡到该申请,就拦挡到了咱们的数据,就能将咱们的用户名和明码看得一清二楚,这样隐衷的数据就非常容易泄露进来。 因而,咱们很容易想到,咱们能够对数据加密去解决该问题呀!这就引出了咱们明天的主题:HTTPS,于是,有了下图的场景。 能够看出,黑客即便截取到了咱们申请的数据,他看到也只是一串乱码,基本不晓得是啥子玩意,所以,HTTPS就是一种将数据加密后再传输的协定。 2.HTTP和HTTPS的比照 从上图能够看到,HTTP和HTTPS协定底层都是基于TCP的协定,只是HTTPS协定两头多了一层SSL或者TLS,因而,很简略,HTTPS就是HTTP协定加上SSL/TLS。TLS是SSL的升级版,它们的作用都是进行加密的连贯。 3.对称加密特点:靠一个密钥来加密数据,应用雷同的一个密钥来解密数据。首先用户须要把本人的一把钥匙给送给服务器,用户用这把钥匙加密数据,而后服务器待会拿这把雷同的钥匙去解密用户接下来发送的数据。 那么,这样的加密算法有什么不妥呢?首先,如果用户领有雷同的密钥的话,我的密钥能解你的数据,你的密钥能解密我的数据,这样,居心叵测的用户就能截取和破解你的数据了,所以,每个用户都必须领有一把只属于本人的密钥,那每个用户的密钥都要先发给服务器,那有5000万个用户服务器就有5000万把密钥,这显著给服务器减少了太多太多的负荷,这是显然不合乎咱们的需要的;其次,如果在客户端第一次发送密钥给服务器的时候,此次发送是明文发送的,黑客此刻在两头截取到了咱们的密钥,那接下来的数据黑客也能破解掉,这显著也是不合乎咱们的需要。然而,该加密形式计算量小,加密和解密的速度比拟快,适宜加密比拟大的数据。好了,讲完对称加密,咱们晓得对称加密存在着一些毛病,由此产生了第二种的加密形式,就是非对称加密。 4.非对称加密特点:有一个公钥和一个私钥,公钥加密只能私钥解密,私钥加密只能公钥解密。因为解密和加密应用不同的钥匙,所以称为非对称加密。公钥和私钥都放在服务器上,公钥是能够轻易传输的,私钥是相对不会裸露的,数据传输是平安的。 说了这么多形象的东东,咱们看一个具体的例子。 首先服务器端把公钥传给客户端,客户端拿到公钥后对数据进行加密,而后客户端发送应用公钥加密过的数据到服务器,服务器收到加密后的数据后应用私钥对数据进行解密。 此刻,黑客即便拿到公钥和公钥加密后的数据,也没法解密,因为公钥加密的数据公钥是解不了的,只有私钥能解。 该加密形式数据传输尽管平安,然而计算量大,加密和解密的速度比较慢。 那么,有没有一种办法是加密解密速度快,而且又是数据传输平安的呢?依据对称加密的长处和非对称加密的长处,由此诞生了HTTPS的加密形式,接下来咱们看一下HTTPS加密、解密及验证的过程。 5.HTTPS加密、解密及验证过程 如果服务器端存有一个公钥777和一个私钥888,首先,浏览器收回一个https申请,如https://www.baidu.com,服务器端响应申请,返回一个SSL数字证书给客户端,SSL数字证书包含了公钥和服务器的身份标识信息,客户端收到SSL数字证书之后,验证该数字证书是否无效,如有效,则浏览器会收回不平安正告,如无效,就会学生成一个随机码如6666,而后应用公钥777对这个随机码进行加密,而后传输该加密后的随机码到服务器,服务器应用私钥888进行解密,失去客户端的随机码为6666,以上该过程就是咱们说的非对称加密。此时,客户端和服务器都同时领有了该随机码6666,而后,把这个随机码6666用作对称加密的密钥,用密钥6666对userName和passWord的信息进行加密,发送到服务器端,服务器端同样应用雷同的密钥6666对数据进行解密,最初失去userName和passWord的信息。以上为整个HTTPS加密、解密及验证的过程。 总结本文从HTTP的不平安引出HTTPS,HTTPS就是在HTTP的根底上减少了一层SSL的加密协议,而后进一步讲述了两种不同的加密形式,别离是对称加密和非对称加密,而后讲述了两者的不同及各自的优缺点,HTTPS综合了两种加密形式,最初,给出了残缺的HTTPS加密、解密及验证过程。

March 8, 2021 · 1 min · jiezi

关于http:Web-安全-之-HTTP-Host-header-attacks

HTTP Host header attacks在本节中,咱们将探讨谬误的配置和有缺点的业务逻辑如何通过 HTTP Host 头使网站蒙受各种攻打。咱们将概述辨认易受 HTTP Host 头攻打的网站的高级办法,并演示如何利用此办法。最初,咱们将提供一些无关如何爱护本人网站的个别倡议。 什么是 HTTP Host 头从 HTTP/1.1 开始,HTTP Host 头是一个必须的申请头,其指定了客户端想要拜访的域名。例如,当用户拜访 https://portswigger.net/web-security 时,浏览器将会收回一个蕴含 Host 头的申请: GET /web-security HTTP/1.1Host: portswigger.net在某些状况下,例如当申请被中介零碎转发时,Host 值可能在达到预期的后端组件之前被更改。咱们将在上面更具体地探讨这种场景。 HTTP Host 头的作用是什么HTTP Host 头的作用就是标识客户端想要与哪个后端组件通信。如果申请没有 Host 头或者 Host 格局不正确,则把申请路由到预期的应用程序时会呈现问题。 历史上因为每个 IP 地址只会托管单个域名的内容,所以并不存在模糊性。然而现在,因为基于云的解决方案和相干架构的一直增长,使得多个网站和应用程序在同一个 IP 地址拜访变得很常见,这种形式也越来越受欢迎,局部起因是 IPv4 地址耗尽。 当多个应用程序通过同一个 IP 地址拜访时,通常是以下状况之一。 虚拟主机一种可能的状况是,一台 web 服务器部署多个网站或应用程序,这可能是同一个所有者领有多个网站,也有可能是不同网站的所有者部署在同一个共享平台上。这在以前不太常见,但在一些基于云的 SaaS 解决方案中依然会呈现。 在这种状况下,只管每个不同的网站都有不同的域名,然而他们都与服务器共享同一个 IP 地址。这种单台服务器托管多个网站的形式称为“虚拟主机”。 对于拜访网站的普通用户来说,通常无奈辨别网站应用的是虚拟主机还是本人的专用服务器。 通过中介路由流量另一种常见的状况是,网站托管在不同的后端服务器上,然而客户端和服务器之间的所有流量都会通过两头零碎路由。两头零碎可能是一个简略的负载均衡器或某种反向代理服务器。当客户端通过 CDN 拜访网站时,这种状况尤其广泛。 在这种状况下,即便不同的网站托管在不同的后端服务器上,然而他们的所有域名都须要解析为两头零碎这个 IP 地址。这也带来了一些与虚拟主机雷同的挑战,即反向代理或负载平衡服务器须要晓得怎么把每个申请路由到哪个适合的后端。 HTTP Host 头如何解决这个问题解决上述的状况,都须要依赖于 Host 头来指定申请预期的接管方。一个常见的比喻是给住在公寓楼里的某个人写信的过程。整栋楼都是同一个街道地址,然而这个街道地址前面有许多个不同的公寓房间,每个公寓房间都须要以某种形式承受正确的邮件。解决这个问题的一个办法就是简略地在地址中增加公寓房间号码或收件人的姓名。对于 HTTP 音讯而言,Host 头的作用与之相似。 ...

March 6, 2021 · 3 min · jiezi

关于http:Web-安全-之-Clickjacking

Clickjacking ( UI redressing )在本节中,咱们将解释什么是 clickjacking 点击劫持,并形容常见的点击劫持攻打示例,以及探讨如何进攻这些攻打。 什么是点击劫持点击劫持是一种基于界面的攻打,通过诱导用户点击钓鱼网站中的被暗藏了的可操作的危险内容。 例如:某个用户被诱导拜访了一个钓鱼网站(可能是点击了电子邮件中的链接),而后点击了一个赢取大奖的按钮。理论状况则是,攻击者在这个赢取大奖的按钮上面暗藏了另一个网站上向其余账户进行领取的按钮,而后果就是用户被诱骗进行了领取。这就是一个点击劫持攻打的例子。这项技术实际上就是通过 iframe 合并两个页面,实在操作的页面被暗藏,而诱骗用户点击的页面则显示进去。点击劫持攻打与 CSRF 攻打的不同之处在于,点击劫持须要用户执行某种操作,比方点击按钮,而 CSRF 则是在用户不知情或者没有输出的状况下伪造整个申请。 针对 CSRF 攻打的进攻措施通常是应用 CSRF token(针对特定会话、一次性应用的随机数)。而点击劫持无奈则通过 CSRF token 缓解攻打,因为指标会话是在实在网站加载的内容中建设的,并且所有申请均在域内产生。CSRF token 也会被放入申请中,并作为失常行为的一部分传递给服务器,与一般会话相比,差别就在于该过程产生在暗藏的 iframe 中。 如何结构一个根本的点击劫持攻打点击劫持攻打应用 CSS 创立和操作图层。攻击者将指标网站通过 iframe 嵌入并暗藏。应用款式标签和参数的示例如下: <head> <style> #target_website { position:relative; width:128px; height:128px; opacity:0.00001; z-index:2; } #decoy_website { position:absolute; width:300px; height:400px; z-index:1; } </style></head>...<body> <div id="decoy_website"> ...decoy web content here... </div> <iframe id="target_website" src="https://vulnerable-website.com"> </iframe></body>指标网站 iframe 被定位在浏览器中,应用适当的宽度和高度地位值将指标动作与钓饵网站准确重叠。无论屏幕大小,浏览器类型和平台如何,相对地位值和绝对地位值均用于确保指标网站精确地与钓饵重叠。z-index 决定了 iframe 和网站图层的重叠程序。透明度被设置为零,因而 iframe 内容对用户是通明的。浏览器可能会基于 iframe 透明度进行阈值判断从而主动进行点击劫持爱护(例如,Chrome 76 蕴含此行为,但 Firefox 没有),但攻击者依然能够抉择适当的透明度值,以便在不触发此爱护行为的状况下取得所需的成果。 ...

March 5, 2021 · 2 min · jiezi

关于http:Web-安全-之-HTTP-request-smuggling

HTTP request smuggling在本节中,咱们将解释什么是 HTTP 申请走私,并形容常见的申请走私破绽是如何产生的。 什么是 HTTP 申请走私HTTP 申请走私是一种烦扰网站解决多个 HTTP 申请序列的技术。申请走私破绽危害很大,它使攻击者能够绕过安全控制,未经受权拜访敏感数据并间接危害其余应用程序用户。 HTTP 申请走私到底产生了什么当初的利用架构中常常会应用诸如负载平衡、反向代理、网关等服务,这些服务在链路上起到了一个转发申请给后端服务器的作用,因为地位位于后端服务器的后面,所以本文把他们称为前端服务器。 以后端服务器(转发服务)将 HTTP 申请转发给后端服务器时,它通常会通过与后端服务器之间的同一个网络连接发送多个申请,因为这样做更加高效。协定非常简单:HTTP 申请被一个接一个地发送,承受申请的服务器则解析 HTTP 申请头以确定一个申请的完结地位和下一个申请的开始地位,如下图所示: 在这种状况下,前端服务器(转发服务)与后端系统必须就申请的边界达成统一。否则,攻击者可能会发送一个不置可否的申请,该申请被前端服务器(转发服务)与后端系统以不同的形式解析: 如上图所示,攻击者使上一个申请的一部分被后端服务器解析为下一个申请的开始,这时就会烦扰利用程序处理该申请的形式。这就是申请走私攻打,其可能会造成毁灭性的结果。 HTTP 申请走私破绽是怎么产生的绝大多数 HTTP 申请走私破绽的呈现是因为 HTTP 标准提供了两种不同的办法来指定申请的完结地位:Content-Length 头和 Transfer-Encoding 头。 Content-Length 头很简略,间接以字节为单位指定音讯体的长度。例如: POST /search HTTP/1.1Host: normal-website.comContent-Type: application/x-www-form-urlencodedContent-Length: 11q=smugglingTransfer-Encoding 头则能够申明音讯体应用了 chunked 编码,就是音讯体被拆分成了一个或多个分块传输,每个分块的结尾是以后分块大小(以十六进制示意),前面紧跟着 \r\n,而后是分块内容,前面也是 \r\n。音讯的终止分块也是同样的格局,只是其长度为零。例如: POST /search HTTP/1.1Host: normal-website.comContent-Type: application/x-www-form-urlencodedTransfer-Encoding: chunkedbq=smuggling0因为 HTTP 标准提供了两种不同的办法来指定 HTTP 音讯的长度,因而单个音讯中齐全能够同时应用这两种办法,从而使它们互相抵触。HTTP 标准为了防止这种歧义,其申明如果 Content-Length 和 Transfer-Encoding 同时存在,则 Content-Length 应该被疏忽。当只有一个服务运行时,这种歧义仿佛能够防止,然而当多个服务被连贯在一起时,这种歧义就无奈防止了。在这种状况下,呈现问题有两个起因: 某些服务器不反对申请中的 Transfer-Encoding 头。某些服务器尽管反对 Transfer-Encoding 头,然而能够通过某种形式进行混同,以诱导不解决此标头。如果前端服务器(转发服务)和后端服务器解决 Transfer-Encoding 的行为不同,则它们可能在间断申请之间的边界上存在一致,从而导致申请走私破绽。 ...

March 4, 2021 · 5 min · jiezi

关于http:如果被问到-HTTP-协议你真的能讲清楚吗

前段时间,在和许久未见的老同学聊天时,忽然被问到 http 协定到底是什么?脑海外面第一工夫想起来的就是 request 申请、response 响应之类的词汇,然而这样讲他真的能晓得是什么吗?我反诘本人,于是找了相干的材料攻读一番。其实,大多数程序员常常都是在每天致力的搬砖,我置信,很少有人认真的钻研过 http 协定到底是什么? 用官网的话来形容 http 协定又被称之为 超文本传输协定,是一种用于分布式、合作式和超媒体信息系统的应用层协定,它是网络互联的根底。咱们通常晓得 http 协定,说白了只是晓得其如何应用在编程中,但其实 http 协定的底层实现极其简单,它是通过网络七层架构或者说是网络五层架构通过一层一层的延长到最上层的应用层协定。网络架构不是咱们所钻研的重点,然而起码得晓得 tcp 协定的基本原理,为什么这里又提到了 tcp 协定,因为 tcp 协定也是属于应用层的一种协定,并且 http 协定就是对 tcp 协定的一种封装。 接下来,咱们看看 http 协定是怎么工作的。一个 http 申请在发送到服务端之后,首先会建设一个 tcp 的套接字连贯,紧接着服务端会收到来自客户端的申请报文、服务端对报文实现解析、就是晓得这个申请想干什么,而后服务端将其客户端申请所须要的的内容信息返回给客户端、同时也会返回 tcp 的连贯状态等信息,客户端拿到信息之后进行解析,在此之前响应也曾经实现、相应的连贯也会失去开释。留神:如果是对域名进行申请,在 tcp 套接字建设之前还会先进行域名服务器的拜访实现域名解析。 上面用几个乏味的图来阐明一下( 图片援用自:博客园 | 作者:爱文翱翔 ),通过图片说明 http 协定的申请过程。 下面两个乏味的图反映了 http 协定大抵的申请过程。 另外,http 协定是一种无状态的协定。也就是说,http 协定本身不对申请和响应之间的通信状态进行保留、不做长久化的解决,在实现了一次申请、响应操作之后会断开连接。 在日常的编码中,http 申请次要定义了八种执行申请的办法。也就是敌人在问起时我脑海外面想到的对于 http 申请的 POST、GET、PUT、DELETE 等,这些内容只是 http 申请过程能够用于操作服务器资源的办法而不是 http 申请的概念或者原理性的货色。更多精彩返回老王说编程>>>

March 3, 2021 · 1 min · jiezi

关于http:在B站看猫片被老板发现不如按下F12学学HTTP

文章继续更新,能够微信搜一搜「golang小白成长记」第一工夫浏览,回复【教程】获golang收费视频教程。本文曾经收录在GitHub https://github.com/xiaobaiTec... , 有大厂面试残缺考点和成长路线,欢送Star。 什么是HTTPHTTP 全称超⽂文本传输协定,也就是HyperText Transfer Protocol。其中咱们常见的文本,图片,视频这些货色都能够用超文本进行示意,而我常看的猫片,也属于超文本,所以大家不要再说我偷偷看猫片了,我只是在看超文本。HTTP只是定义了一套传输超文本的规定,只有合乎了这一套规定,不论你是用iphone,还是用老爷机,都能够实现猫片的传输。 七层网络 大略理解了HTTP后,给大家看看它在它们家族里的位置。HTTP位于应用层,跟它相似的协定还有常见的FTP协定,常见的某影地狱的下载链接已经常常是以FTP结尾的。 HTTP报文格式 有点形象?不晓得小白说的啥?那实操一下,用wireshark抓包看一下猫片里的申请报文和响应报文具体长什么样子吧 申请报文GET /cmaskboss/164203142_30_1.enhance.webmask HTTP/1.1Host: upos-sz-staticks3.bilivideo.comConnection: keep-aliveUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36Accept: */*Origin: https://www.bilibili.comSec-Fetch-Site: cross-siteSec-Fetch-Mode: corsSec-Fetch-Dest: emptyReferer: https://www.bilibili.com/Accept-Encoding: identityAccept-Language: zh-CN,zh;q=0.9Range: bytes=0-16这下面第一行的GET 就是申请办法,/cmaskboss/164203142_30_1.enhance.webmask 则是 URL , 而HTTP/1.1则是协定版本。接下来从Host开始到最初一行Range,都是Headers头。 响应报文HTTP/1.1 206 Partial ContentContent-Type: application/octet-streamContent-Length: 17Connection: keep-aliveServer: TengineETag: "92086de1e6d1d4791fb950a0ac7e30ba"Date: Sat, 30 Jan 2021 09:31:31 GMTLast-Modified: Sun, 04 Oct 2020 01:54:28 GMTExpires: Mon, 01 Mar 2021 09:31:31 GMTAge: 1018695Content-Range: bytes 0-16/353225Accept-Ranges: bytesX-Application-Context: applicationx-kss-request-id: 75bcbfa8ab194e3c825e89c81a912692x-kss-BucketOwner: MjAwMDAyMDEwNw==X-Info-StorageClass: -Content-MD5: kght4ebR1HkfuVCgrH4wug==X-Cache-Status: HIT from KS-CLOUD-JH-MP-01-03X-Cache-Status: HIT from KS-CLOUD-TJ-UN-14-13X-Cache-Status: HIT from KS-CLOUD-LF-UN-11-25Access-Control-Allow-Origin: https://www.bilibili.comAccess-Control-Allow-Headers: Origin,X-Requested-With,Content-Type,Accept,rangeX-Cdn-Request-ID: 7e2c783ca7d392624118593ec1dc66bc相似申请报文,HTTP/1.1是协定版本,206是状态码,Partial Content 则是状态描述符。接下来从Content-Type开始到最初一行X-Cdn-Request-ID都是Headers信息。 ...

February 25, 2021 · 3 min · jiezi

关于http:深入理解-Web-协议-三HTTP-2

本篇将具体介绍 http2 协定的方方面面,知识点如下: HTTP 2 连贯的建设HTTP 2 中帧和流的关系HTTP 2 中流量节俭的神秘:HPACK 算法HTTP 2 协定中 Server Push 的能力HTTP 2 为什么要实现流量管制?HTTP 2 协定遇到的问题一、HTTP 2 连贯的建设和许多人的固有印象不同的是 HTTP 2协定自身并没有规定必须建设在TLS/SSL之上,其实用一般的TCP连贯也能够实现HTTP 2连贯的建设。只不过当初为了平安市面上所有的浏览器都仅默认反对基于TLS/SSL的 HTTP 2协定。简略来说咱们能够把构建在TCP连贯之上的 HTTP 2 协定称之为H2C,而构建在TLS/SSL协定之上的就能够了解为是H2了。 输出命令: tcpdump -i eth0 port 80 and host nghttp2.org -w h2c.pcap &而后用curl拜访基于TCP连贯,也就是port 80端口的 HTTP 2站点(这里是没方法用浏览器拜访的,因为浏览器不容许) curl http://nghttp2.org --http2 -v其实看日志也能够大抵理解一下这个连贯建设的过程: 咱们将TCPDump进去的pcap文件拷贝到本地,而后用Wireshark关上当前还原一下整个HTTP 2连贯建设的报文: 首先是 HTTP 1.1 降级到 HTTP 2 协定 而后客户端还须要发送一个“魔法帧”: 最初还须要发送一个设置帧: 之后,咱们来看一下,基于TLS的 HTTP 2连贯是如何建设的,思考到加密等因素,咱们须要提前做一些筹备工作。能够在Chrome中下载这个插件。 而后关上任意一个网页只有看到这个闪电的图标为蓝色就代表这个站点反对HTTP 2;否则不反对。如下图: ...

February 23, 2021 · 2 min · jiezi

关于http:embed小技巧动态文件更新

go1.16 embed能够将文件嵌入到编译后的二进制中,当前公布一个web程序能够只提供一个二进制程序,不须要其余文件,同时防止反复文件io读取。 然而在开发时,应用embed后如果批改前端文件那么须要重启GO程序,从新生成embed数据,导致开发过程不不便。 提供一个embed反对动静文件的小技巧,应用http.Dir和embed.FS混合组合一个新的http.FileSystem,如果当前目录存在动态文件,那么应用http.Dir返回动态文件内容,否则应用embed.FS编译的内容,这样既能够应用http.Dir拜访时时的动态文件,能够使公布的二进制程序应用embed.FS编译内置的动态文件数据。 package mainimport ( "embed" "net/http")//go:embed staticvar f embed.FSfunc main() { http.ListenAndServe(":8088", http.FileServer(FileSystems{ http.Dir("."), http.FS(f), }))}// 组合多个http.FileSystemtype FileSystems []http.FileSystemfunc (fs FileSystems) Open(name string) (file http.File, err error) { for _, i := range fs { // 顺次关上多个http.FileSystem返回一个胜利关上的数据。 file, err = i.Open(name) if err == nil { return } } return}在代码目录创立一个static目录,而后外面创立一个index.html auth.html,启动程序后就能够应用http://localhost:8088/static/index.html拜访到动态文件,在批改文件后不重启也会显示最新的文件内容。

February 22, 2021 · 1 min · jiezi

关于http:JS-获取网站-StatusCode若存在写入文件

JS 获取网站状态码,若网站存在,写入 TXT 文件,实用于 IE。 <script>//写文件     function writeFile(filename,filecontent) {         var fso, f, s ;         fso = new ActiveXObject("Scripting.FileSystemObject");            f = fso.OpenTextFile(filename,8,true);         f.WriteLine(filecontent);           f.Close();          }//判断网站是否能关上function http_go(URL) { var http_c= new ActiveXObject("microsoft.xmlhttp"); http_c.Open("GET",URL,false); try { http_c.Send(); } catch(e) {} finally { var result = http_c.responseText; if(result) { if(http_c.Status==200) { return(true); } else { return(false); } } else { return(false); } }}var q = ['bj','sh','sz','gz','tj','hz','nj'];var c = ['b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z'];for(var x=0;x<q.length;x++) { for(var i=0;i<c.length;i++)  { for(var j=0;j<c.length;j++) { for(var k=0;k<c.length;k++) {   var domain_m =q[x]+c[i]+c[j]+c[k]+'.com'; var domain_m1 ='http://'+domain_m; var domain_m2 ='http://www'+domain_m; if(http_go(domain_m1)||http_go(domain_m2)){ writeFile('D:/WORK/domain/domain_qc.txt',domain_m); } } } }}</script>当浏览者拜访一个网页时,浏览者的浏览器会向网页所在服务器发出请求。 当浏览器接管并显示网页前,此网页所在的服务器会返回一个蕴含 HTTP 状态码的信息头(server header)用以响应浏览器的申请。 HTTP 状态码的英文为 HTTP Status Code。 ...

February 22, 2021 · 1 min · jiezi

关于http:解密协议层的攻击HTTP请求走私

最近始终在钻研一些比拟有意思的攻打办法与思路,在查阅本地文档的时候(没错,本地,我常常会将一些有意思的文章然而没工夫看就会被我保留pdf到本地),一篇2019年Black hat的议题——HTTP申请走私,进入我的视线,同时我也查阅到在2020 Blackhat中该攻打手法再次被剖析。我对此产生浓重学习趣味,于是便有了这篇文章。 HTTP申请走私是一种HTTP协定的攻打利用办法,该攻打产生的起因在于HTTP代理链中HTTP Server的实现中存在不统一的问题。 工夫线2004年,_@Amit Klein提出_HTTP Response Splitting 技术,为HTTP Smuggling攻打雏形;2005年, 第一次被@Watchfire所提出, 并对其进行了具体介绍;2016年, DEFCON 24上,@regilero在他的议题—— Hiding Wookiees in HTTP 中在对后面报告进行丰盛与裁减;2019年, Blackhat USA上,PortSwigger的@James Kettle在其议题—— HTTP DESYNC ATTACKS SMASHING INTO THE CELL NEXT DOOR 中对以后网络环境进行了剖析,同时在其利用上退出chunked技术,对现有攻击面进行了拓展;2020年, Blackhat USA上,@Amit Klein在其议题——_HTTP Request Smuggling in 2020_ 中最新变种手法进行剖析,同时对各类环境场景下进行了剖析。破绽利用场景剖析HTTP协定申请走私并不像其余web攻打手法那么直观,而是在更加简单的网络环境中,因不同服务器基于不同的RFC规范实现的针对HTTP协定包的不同解决形式而产生的一种平安危险。 在对其破绽进行剖析前,首先须要理解目前被宽泛应用的HTTP 1.1协定个性——Keep-Alive、Pipeline技术。 简略来说,在HTTP 1.0及其以前版本的协定中,在每次进行交互的时候,C/S两端都须要进行TCP的三次握手链接。而现在的web页面大部分次要还是由大量动态资源所组成。如果仍然依照HTTP 1.0及其以前版本的协定设计,会导致服务器大量的负载被节约。于是在HTTP 1.1中,减少了Keep-Alive、Pipeline技术。 KEEP-ALIVE依据RFC7230标准中 section-6.3 能够得悉,HTTP 1.1中默认应用persistent connections形式。其实现手法是在HTTP通信包中退出Connection: Keep-Alive标识:在一次HTTP通信后不会敞开TCP连贯,而在后续雷同指标服务器申请中复用该闲暇的TCP通道,防止了因为新建TCP连贯产生的时延和服务器资源耗费,晋升用户资源访问速度。 PIPELINE而在Keep-Alive中后续又有了Pipeline机制,这样客户端就能够像流水线一样不必期待某个包的响应而继续的向服务器发包。而服务器也会遵循先进先出准则对客户端申请进行响应。 如图,咱们能够看到相比于no pipelining模式,pipelining模式下服务器在响应工夫上有了很大的晋升。 现如今,为了进步用户浏览速度、增强服务稳定性、晋升应用体验以及加重网络累赘。大部分厂商都会应用CDN减速服务或负载平衡LB等部署业务。当用户拜访服务器动态资源时,将间接从CDN上获取详情,当存在真正服务器交互时,才会与后端服务器产生交互。如图所示: 然而,该模式中reverse proxy局部将长期与back-end局部通信,个别状况下这部分连贯会重用TCP通道。艰深来说,用户流量来自五湖四海,user端到reverse proxy端通信会建设多条TCP通道,而rever proxy与back-end端通信ip固定,这两者重用TCP连贯通道来通信便牵强附会了。 在这种场景下,当不同服务器实现时参考的RFC规范不同时,咱们向reverse proxy发送一个比拟含糊的HTTP申请时,因为reverse proxy与back-end基于不同规范进行解析,可能产生reverse proxy认为该HTTP申请非法,并转发到back-end,而back-end只认为局部HTTP申请非法,剩下的多余申请,便就算是夹带走私的HTTP申请了。当该局部对失常用户的申请造成了影响之后,就实现了HTTP走私攻打。如图所示:深色为失常申请,橙色为走私申请,绿色为失常用户申请。一起发包状况下,走私的申请内容被拼接到失常申请中。 CHUNKED数据包格局分块传输编码(Chunked transfer encoding) 是超文本传输协定(HTTP)中的一种数据传输机制,容许 HTTP 的数据能够分成多个局部。 ...

February 19, 2021 · 5 min · jiezi

关于http:代理和网关是否有区别

代理和网关有区别,然而区别很含糊。如果非要说,你能够像上面这样来了解: 代理连贯的是两个或多个应用雷同协定的应用程序。网关连贯的是两个或多个应用不同协定的端点,表演“协定转换器”的角色

February 5, 2021 · 1 min · jiezi

关于http:深入理解nodejs的HTTP处理流程

简介咱们曾经晓得如何应用nodejs搭建一个HTTP服务,明天咱们会具体的介绍nodejs中的HTTP解决流程,从而对nodejs的HTTP进行深刻的了解。 应用nodejs创立HTTP服务应用nodejs创立HTTP服务很简略,nodejs提供了专门的HTTP模块,咱们能够应用其中的createServer办法来轻松创立HTTP服务: const http = require('http');const server = http.createServer((request, response) => { // magic happens here!});首先createServer办法传入的是一个callback函数,这个callback函数将会在每次服务端接管到客户端的申请时调用。所以这个callback函数,也叫做 request handler. 再看看createServer的返回值,createServer返回的是一个EventEmitter对象。 之前咱们也介绍过了EventEmitter,它能够发送和接管事件,所以咱们能够应用on来监听客户端的事件。 下面的代码相当于: const server = http.createServer();server.on('request', (request, response) => { // the same kind of magic happens here!});当发送request事件的时候,就会触发前面的handler method,并传入request和response参数。咱们能够在这个handler中编写业务逻辑。 当然,为了让http server失常运行,咱们还须要加上listen办法,来绑定ip和端口,以最终启动服务。 const hostname = '127.0.0.1'const port = 3000server.listen(port, hostname, () => { console.log(`please visit http://${hostname}:${port}/`)})解构request下面的request参数实际上是一个http.IncomingMessage对象,咱们看下这个对象的定义: class IncomingMessage extends stream.Readable { constructor(socket: Socket); aborted: boolean; httpVersion: string; httpVersionMajor: number; httpVersionMinor: number; complete: boolean; /** * @deprecate Use `socket` instead. */ connection: Socket; socket: Socket; headers: IncomingHttpHeaders; rawHeaders: string[]; trailers: NodeJS.Dict<string>; rawTrailers: string[]; setTimeout(msecs: number, callback?: () => void): this; /** * Only valid for request obtained from http.Server. */ method?: string; /** * Only valid for request obtained from http.Server. */ url?: string; /** * Only valid for response obtained from http.ClientRequest. */ statusCode?: number; /** * Only valid for response obtained from http.ClientRequest. */ statusMessage?: string; destroy(error?: Error): void; }通常咱们须要用到request中的method,url和headers属性。 ...

February 3, 2021 · 2 min · jiezi

关于http:前端123浏览器缓存的工作方式

浏览器缓存的工作流程     通过网络获取内容既速度迟缓又开销微小。较大的响应须要在客户端与服务器之间进行屡次往返通信,这会提早浏览器取得和解决内容的工夫,还会减少访问者的流量费用。因而,缓存并反复利用之前获取的资源的能力成为性能优化的一个要害方面。      这里先看张大家最相熟的Devtools网络图: 图中青色、绿色和橙色圈出的局部别离是来自内存(memory缓存)、磁盘(disk缓存)和Http申请拿到的数据(非缓存),还有一种返回码304的申请也是从缓存(memory/disk)中获取数据。304跟memory/disk缓存的区别是:在浏览器判断资源曾经过期的状况下会去服务器查问资源是否更新,如果资源没更新则返回304码,浏览器收到304码就会更新资源的过期工夫并间接从之前disk/memory缓存中拿到以后资源,换言之如果资源没过期,那么浏览器就会跳过向服务器校验资源这一步并间接去拿memory/disk缓存获取。 大抵流程如下: 1)首先查看是否存在 Service Worker Cache,没命中或不存在则进行下一步2)查看内存中是否存在资源,存在的话间接加载(from memory - 200)。3)如果内存没有,择取从硬盘获取,存在且没过期的话间接加载(from disk - 200),过期了间接向服务器发送申请获取资源。如果资源没更新,服务器返回304,浏览器从硬盘缓存中获取资源,并更新过期工夫/Etag/Last-Modified。如果资源更新了则获取最新的资源,并通过HTTP申请将资源返回,从新缓存资源并更新过期工夫/Etag/Last-Modified。4)如果硬盘也没有,那么会向后端发送HTTP网络申请。5)加载到的资源缓存到硬盘和内存,并更新资源的过期工夫/Etag/Last-Modified。     Service Worker Cache具备较高的优先级,数据管制更为简单,操作自由度最高;Memory Cache更多的强调了一种缓存存储形式和浏览器内存缓存策略;HTTP Cache绝对于Memory Cache依据存储形式的不同也能叫做Disk Cache,它依赖于整个HTTP缓存校验流程(强缓存和协商缓存),并通过校验来最终确定何时从缓存读取,何时从服务器更新资源;Push Cache材料较少,利用得不多,临时只做介绍。 Service-Worker Cache(优先级最高)     Service Worker 是运行在浏览器背地的独立线程,个别能够用来实现缓存性能。应用 Service Worker 的话,传输协定必须为 HTTPS。因为 Service Worker 中波及到申请拦挡,所以必须应用 HTTPS 协定来保障平安。Service Worker 的缓存与浏览器其余内建的缓存机制不同,它能够让咱们自在管制缓存哪些文件、如何匹配缓存、如何读取缓存,并且缓存是持续性的。      Service Worker 实现缓存性能个别分为三个步骤:首先须要先注册 Service Worker,而后监听到 install 事件当前就能够缓存须要的文件,那么在下次用户拜访的时候就能够通过拦挡申请的形式查问是否存在缓存,存在缓存的话就能够间接读取缓存文件,否则就去申请数据。      当 Service Worker 没有命中缓存的时候,咱们须要去调用 fetch 函数获取数据。也就是说,如果咱们没有在 Service Worker 命中缓存的话,会依据缓存查找优先级去查找数据。然而不论咱们是从 Memory Cache 中还是从网络申请中获取的数据,浏览器都会显示咱们是从 Service Worker 中获取的内容。 Memory Cache(优先级次之)     Memory Cache 也就是内存中的缓存,次要蕴含的是以后中页面中曾经获取到的资源,例如页面上曾经下载的款式、脚本、图片等。读取内存中的数据必定比磁盘快,内存缓存尽管读取高效,可是缓存持续性很短,会随着过程的开释而开释。 一旦咱们敞开 Tab 页面,内存中的缓存也就被开释了。内存缓存在缓存资源时并不关怀返回资源的HTTP响应头部 Cache-Control 是什么值,换句话说这是一种强依赖于浏览器本地内存管理策略的缓存形式,各个浏览器对内存缓存的解决形式也略有区别。 ...

January 29, 2021 · 1 min · jiezi

关于http:网页出现不河蟹弹窗那是被劫持了

作为攻城狮的二狗子,除了脚踏实地地工作,私下还经营着集体博客。凭借着博客中精彩丰盛的文章,播种了一众粉丝。平时更一更文章,读一读粉丝留言,是二狗子无上的高兴。 这一天二狗子照例在闲余工夫关上了留言:“咦?明天的粉丝分外激情呀,留言怎么这么多。”二狗子认真一看,发现格调跟来日齐全不符。 “二狗子,你怎么变成网游代言人了?” “狗子,一刀 999,带我一腾飞呀?” “狗子狗子,你的博客被攻陷啦!” “二狗子,你的网站是不是被劫持了?” 满屏都是这种让二狗子满头问号的留言,满脸迷茫的二狗子懵逼地关上了本人的博客。刚关上博客,首页后下角就弹出了“一刀 999 回收 666 这是你没有玩过一刀版本”的硕大弹窗。 “我没加过这个呀,这是什么鬼,怪不得大家这么调侃我,这要怎么办?”二狗子心中一阵慌乱,忽的他想起了留言中某粉丝的回复,“劫持?会是这个起因么?”二狗子连忙在上网查了起来。 这一查发现遇到这个问题的网友还真不少。2016 年,在一场继续超过六个小时的大规模银行欺诈案中,一家巴西银行的网站被黑客劫持,在线客户被路由到攻击者的网络钓鱼站点,导致该银行的 36 个域名、企业电子邮箱整体失陷。“被劫持的危险竟然这么大!”吓的二狗子瓜子都掉了,这可得好好理解一下,再彻底解决。通过材料,他发现劫持还分为 HTTP 劫持和 DNS 劫持。那这两种有什么区别,都有什么危害呢?咱们一起跟着二狗子来看看吧。 什么是劫持当咱们浏览一些网站,特地是一些没有装备 SSL 证书的网站时,有时会遇到网站没有显示正确的内容,或者在正确的内容中夹杂了一些乌七八糟的广告的状况,这可能是遇到了网络劫持。受到劫持的网站轻则被攻打,重则数据被盗窃。 那为什么会产生劫持景象呢? 我国简单的网络环境是劫持产生的一大起因。除了电信、联通、挪动这三大家,还有长城宽带、鹏博士、教育网、科技网、广电等等不少于 20 多家的小运营商,而且各个省市是互相独立经营。这就导致网络呈现跨网、跨运营商的状况会特地多。而这种大量跨网拜访的流量交互就非常容易产生网络劫持, 比拟常见的劫持分两种:DNS 劫持和 HTTP 劫持。用网上一个形象活泼的比喻来辨别的话,DNS 劫持就是你想去银行存钱却把你拉到了劫匪手中,HTTP 劫持就是你从服务器买了一包零食,外面给你放了一坨粑粑。 当然这是一个浅显的比喻,真正的区别咱们上面细说。 HTTP 劫持HTTP 劫持产生在用户与其目标网络服务所建设的专用数据通道中。它会监督特定数据信息,当满足设定的条件时,就会在失常的数据流中插入精心设计的网络数据报文。从而让用户端程序解释“谬误”的数据,并在使用者界面弹出新窗口展现宣传性广告或者间接显示某网站的内容。 常见的 HTTP 劫持景象有以下三种: 扭转拜访内容:将失常返回的页面进行劫持并做 302 跳转,跳转到更改后的页面插入广告:在返回页面中退出框架代码来实现强行退出广告篡改网页中原有广告:将网页中本来就存在的广告更改为劫持方要推送的广告 那如何预防和解决 HTTP 劫持呢?办法很简略,配置 SSL 证书应用 HTTPS 链接拜访网站就能够了。目前又拍云提供收费的 SSL 证书,一次申请远离 HTTP 劫持。 DNS 劫持DNS 是域名零碎 (Domain Name System)的缩写,是将域名和 IP 地址互相映射的分布式数据库,可能让用户更不便的拜访互联网。当咱们在浏览器中输出网址,拜访申请会发送到 DNS 解析服务器。DNS 解析服务器通过与顶级域及根服务器进行通信查问,将网址解析成对应的 IP 地址,从而让咱们实现网站拜访。 ...

January 28, 2021 · 1 min · jiezi

关于http:前端缓存总结HTTP缓存

前言在前端面试中,可能或多或少都会被提及缓存问题,而这个问题大多数都是作为业务中不得不思考的一个性能优化点,如果平时没有怎么关注或是特意去理解这块的童鞋们,可能就是不太理解其中的原由,那么明天咱们就这个缓存问题来细细剖析,帮忙一些还不是太明确的或是刚入门的前端童鞋们梳理梳理,了解了解,那就话不多说,开始吧^-^。 概述其实缓存有很多种,包含:HTTP缓存,DNS缓存,CDN缓存等等。明天次要介绍的就是HTTP缓存,在开始介绍之前,先简略说说HTTP报文。 HTTP报文就是浏览器和服务器之间通信时发送响应的数据块。浏览器向服务器申请数据,发送申请(request)报文;服务器向浏览器返回数据,返回响应(response)报文。 报文次要蕴含以下两局部: 属性的头部(header);数据的主体局部(body);浏览器缓存策略浏览器每次发动申请时,先在本地缓存中查找后果以及缓存标识,依据缓存标识来判断是否应用本地缓存。如果缓存无效,则应用本地缓存;否则,向服务器发动申请并携带缓存标识。依据是否须要向服务器发动HTTP申请,将缓存过程划分为两个局部: 强制缓存:服务器告诉浏览器一个缓存工夫,在缓存工夫内,下次申请间接应用缓存,不在工夫内,执行比拟缓存策略;协商缓存:让客户端与服务器之间能实现缓存文件是否更新的验证、晋升缓存复用率,将缓存信息中的Etag和Last-Modified通过申请发送给服务器,由服务器校验,返回304状态码时,浏览器间接应用缓存;强缓存优先于协商缓存。 缓存运作的整体流程图如下: 强制缓存当申请命中强制缓存时,浏览器不会将本次申请发往服务器,而是间接从缓存中读取内容,在Chrome中关上控制台,在network中显示的是memory cache或者是disk cache。 强缓存能够通过设置两种HTTP Header实现:Expires(1.0)和Cache-Control(1.1)。 ExpiresExpires是一个相对工夫,是缓存过期工夫。用以表白在这个工夫点之前发动申请能够间接从浏览器中读取数据,而无需从新发动申请。 Expires = max-age + 到期工夫。因为受限于本地工夫,如果批改了本地工夫,可能会造成缓存生效。 该字段是服务器响应音讯头字段,通知浏览器在过期工夫之前能够间接从浏览器缓存中存取数据。因为是相对工夫内,用户可能将本读工夫进行批改,从而导致浏览器判断缓存生效,从新申请资源。在不思考批改,时差或者误差等因素也可能照成客户端于服务端的工夫不统一,以致缓存生效。 长处: HTTP 1.0产物,能够在HTTP 1.0和1.1中应用,简略、易用。以时刻标识生效工夫。毛病: 工夫是由服务器发送的,如果服务器工夫和客户端工夫不统一,可能会呈现问题。存在版本问题,到期之前的批改客户端是不可知的。Cache-ControlCache-Control的优先级比Expires的优先级高。该字段示意资源缓存最大无效工夫,在该工夫内,客户端不须要向服务器发送申请。前者的呈现是为了解决Expires在浏览器中,工夫被手动更改导致缓存判断谬误的问题。如果同时存在则应用Cache-Control。 常见的取值有(残缺的列表能够查看MDN): private(默认值):客户端能够缓存,代理服务器不能缓存public:客户端和代理服务器都可缓存no-cache:在公布缓存正本之前,强制要求缓存把申请提交给原始服务器进行验证(协商缓存验证)max-age:设置缓存存储的最大周期,超过这个工夫缓存被认为过期(单位秒)no-store:缓存不应该存储无关客户端申请或服务器响应的任何内容,即便不应用任何缓存举个栗子????: 图中Cache-Control指定了max-age,public,缓存工夫为31536000秒(365天)。也就是说,在365天内再次申请这条数据,都会间接获取缓存数据库中的数据,间接应用。 长处: HTTP 1.1产物,以工夫距离标识生效工夫,解决了Expires服务器和客户端绝对工夫的问题。比Expires多了很多选项设置。毛病: 存在版本问题,到期之前的批改客户端是不可知的。协商缓存协商缓存就是强制缓存生效后,浏览器携带缓存标识向服务器发动申请,由服务器依据缓存标识决定是否应用缓存的过程。而整个过程是须要发出请求的。 协商缓存由2组字段(不是2个),管制协商缓存的字段有: Last-Modified/If-Modified-since(http 1.0): 示意的是服务器的资源最初一次批改的工夫;Etag/If-None-match(http 1.1): 示意的是服务器资源的惟一标识,只有资源有变动,Etag就会从新生成;Etag/If-None-match 的优先级高于Last-Modified/If-Modified-since。 Last-Modified/If-Modified-since服务器通过 Last-Modified 字段告知客户端(返回资源的同时在header增加),示意资源最初一次被批改的工夫,浏览器将这个值和内容一起记录在缓存数据库中下一次申请雷同的资源时,浏览器会从本人的缓存中找出“不确定是否过期的”缓存,因而在申请头中将上次的Last-Modified的值写入到申请头的If-Modified-since字段服务器会将If-Modified-since的值与Last-Modified字段进行比照。如果相等,这示意未修改,响应304;反之则示意批改了,响应 200 状态码,并返回数据长处: 不存在版本问题,每次申请都会去服务器进行校验。服务器比照最初批改工夫如果雷同则返回304,不同返回200及资源内容。如果返回的是 304,返回的仅仅是一个状态码而已,并没有理论的文件内容,因而在响应体的体积上节俭是很好的长处毛病: 只有资源产生了批改,无论内容是否产生了实质性的扭转,都会将该资源返回客户端。例如周期性重写,但这种状况下资源蕴含的数据本质是一样的。以时刻作为标识,无奈辨认一秒内屡次批改的状况。如果资源更新的速度是秒以下的单位,那么该缓存是不能被应用的,因为它的工夫最低单位是秒。某些服务器不能准确的失去文件最初批改工夫。如果文件是服务器动静生成的,那么该办法的更新工夫永远是生成的工夫,只管文件可能并没有变动,所以也起不到缓存的作用。Etag/If-None-match为了解决上述问题,呈现了一组新的字段Etag/In-None-Match。 Etag是上一次加载资源时,服务器返回的。它的作用是惟一用来标识资源是否有变动浏览器在下一次发动申请时,会将上一次返回的Etag值赋值给If-None-Match并增加在 Request Header 中。服务端匹配传入的值与上次是否统一,如果统一返回304,浏览器则读取本地缓存,否则返回200和更新后的资源及新的Etag长处: 能够更加准确的判断资源是否被批改,能够辨认一秒内屡次批改的状况不存在版本问题,每次申请都会去服务器进行校验毛病: 计算Etag值须要性能损耗分布式服务器存储状况下下,计算Etag的算法如果不统一,会导致浏览器从一个服务器上获取得页面内容后到另一台服务器上进行验证时呈现Etag不匹配的状况总结对于强制缓存,服务器告诉浏览器一个缓存工夫,在缓存工夫内,下次申请,间接用缓存,不在工夫内,执行比拟缓存策略。 对于协商缓存,将缓存信息中的Etag和Last-Modified通过申请发送给服务器,由服务器校验,返回304状态码时,浏览器间接应用缓存。

January 26, 2021 · 1 min · jiezi

关于http:五千多字图文并茂详解HTTP报文格式请求响应头cookie以及HTTPS加密方式

靓仔靓女们大家好,咱们又见面了,公众号:java小杰要加油,这周来分享一篇对于HTTP协定相干的文章看完此文能够对 HTTP报文格式、HTTP各种申请头,HTTP响应码、 cookie属性以及HTTPS为什么平安(波及到三种加密形式) 有个清晰的认知全文五千来字,强烈建议珍藏,坚固根底若文中波及到的知识点有所偏差的话,还请大佬们指出,小杰感激不尽,冲冲冲!~话不多说,间接开搞HTTP简介超文本传输协定(Hypertext Transfer Protocol,HTTP)是一个简略的申请-响应协定,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的音讯以及失去什么样的响应当初次要利用 http1.1 协定http是无状态协定,不会保留屡次申请之间的关系,应用cookie做状态治理长久连贯节俭通信量(HTTP1.1和局部HTTP1.0)通过申请办法告知服务器用意,get,post等HTTP报文用于HTTP协定交互的信息叫做HTTP报文报文由报文首部和报文主体来组成,其中由空行宰割申请报文和响应报文的报文构造不一样,其中最大的区别就是在报文首部中,各有各的特定的首部 报文首部:服务器或者客户端须要解决的申请或者响应的内容及其属性报文主体:被发送的数据HTTP申请报文构造由客户端发送的报文叫做申请报文 申请行:蕴含用于申请的办法,申请URI和HTTP版本申请首部字段:申请报文里特有的字段(后文会提到)通用首部字段:申请报文和响应报文都会用到的首部实体首部字段:针对申请报文的实体局部应用的首部其余:可能蕴含HTTP的RFC里未定义的首部(如Cookie等)HTTP响应报文构造由服务端发送的报文叫做响应报文 状态行:蕴含表明响应后果的状态码,起因短语和HTTP版本响应首部字段:响应报文里特有的字段(后文会提到)通用首部字段:申请报文和响应报文都会用到的首部实体首部字段:针对响应报文的实体局部应用的首部其余:可能蕴含HTTP的RFC里未定义的首部(如Set-Cookie等)注:若HTTP首部字段反复了的话,不同的浏览器解决机制不一样 有些浏览器会优先解决第一次呈现的字段有些浏览器会优先解决最初一次呈现的字段HTTP响应码2xx 胜利2xx的响应后果就代表申请被失常解决了200 OK:示意客户端发来的申请被服务器失常解决了204 Not Content:申请被胜利解决,然而返回的响应报文不蕴含实体的主体局部206 Partial Content:客户端进行范畴申请,而服务器从新执行了这部分的GET申请3xx 重定向3xx的响应后果就表明浏览器须要执行某些非凡的解决以正确处理申请301 Moved Permanently:永恒重定向。示意申请的资源曾经被调配了新的URI,当前应该应用新的URI302 Found:长期重定向。代表资源只是临时的挪动了当前还可能会挪动为新的URI303 See Other:因为申请对应的资源存在着另一个URI,应应用GET办法定向获取申请的资源304 Not Modified:客户端发送附带条件(申请首部中if结尾的属性中的一种)的申请的时候,服务端容许拜访资源,然而那些申请并没有满足,间接返回304,即服务端资源未扭转,能够间接应用客户端未过期的缓存,304返回时,不蕴含任何响应的主体局部(尽管被划分为3xx里,然而和重定向没有任何关系)4xx 客户端谬误4xx的响应后果就表明客户端是产生谬误的起因所在400 Bad Requset:申请报文中存在语法错误,请批改申请内容后再发送申请401 Unauthorized:客户端未认证受权403 Forbidden:服务端禁止客户端拜访此资源404 Not Found:URL写错了,找不到此门路5xx 服务器谬误5xx的响应后果就表明服务器自身产生谬误500 Internal Server Error:服务器外部故障,可能是bug导致的503 Service Unavaliable:服务器临时不可用(停机保护或者超负载),如果当时晓得解除这种状况所需的工夫,最好写入响应头中的Retry-After这个字段再返回给客户端HTTP报文首部HTTP1.1 规定了 以下47种首部字段 通用首部 (共9种)首部字段解释1. Cache-Control管制缓存的行为2. Connection逐跳首部、连贯的治理3. Date创立报文的日期和工夫4. Pragma报文指令5. Trailer报文末端的首部一览6. Transfer-Encoding指定报文主体的传输编码方式7. Upgrade降级为其余协定8. Via代理服务器的相干信息9. Warning谬误告诉上面咱们来看挑几个重要的属性来看下~ Connection 他有两个作用 管制不再转发给代理的首部字段GET / HTTP/1.1Upgrade: HTTP/1.1 // 就会把次字段删除后再从代理服务器转发进来Connection: Upgrade // 不再转发的首部字段名 治理长久链接(这个比拟常见) HTTP/1.1默认连贯都是长久连贯Connction: Keep-Alive当服务器想断开的时候,须要指定Connction: closePragme :是HTTP/1.1之前版本遗留的字段,仅仅是为了与HTTP/1.0向后兼容而定义 Pragm:no-cache :通用首部字段,在申请头中,示意所有的两头服务器不返回缓存的资源可是所有的两头服务器都以HTTP/1.1为基准的话,能够间接采纳 Cache-Control:no-cache所以个别会发送两个字段Cache-Control:no-cache Pragm:no-cache申请报文首部 (共19种)首部字段解释1.Accrpt用户代理可解决的媒体类型2.Accrpt-Charset优先的字符集3.Accept-Encoding优先的内容编码4.Accept-Language优先的语言(自然语言)5.Authorizationweb认证信息6.Expect期待服务器的特定行为7.From用户的电子邮箱地址8.Host申请资源所在服务器9.If-Match比拟实体标记(ETag)10.If-Modified-Since比拟资源的更新工夫11.If-None-Match比拟实体标记(与If-Match相同)12.If-Range资源未更新时发送实体Byte的范畴申请13.If-Unmodified-Since比拟资源的更新工夫(与If-Modified-Since相同)14.Max-Forwards最大传输逐跳数15.Proxy-Authorization代理服务器要求客户端的认证信息16.Range实体的字节范畴要求17.Referer对申请中URI的原始获取方18.TE传输编码的优先级19.User-AgentHTTP客户端程序的信息If-Match:只有当 If-Match 字段值跟 ETag 值匹配统一时,服务器才会承受申请 ...

January 25, 2021 · 1 min · jiezi